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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * HvCallHpt.h
  3.  * Copyright (C) 2001  Mike Corrigan IBM Corporation
  4.  * 
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or
  8.  * (at your option) any later version.
  9.  * 
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  * 
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  18.  */
  19. //============================================================================
  20. //
  21. // This file contains the "hypervisor call" interface which is used to
  22. // drive the hypervisor from the OS.
  23. //
  24. //============================================================================
  25. //-------------------------------------------------------------------
  26. // Standard Includes
  27. //-------------------------------------------------------------------
  28. #ifndef  _HVCALLSC_H
  29. #include "HvCallSc.h"
  30. #endif
  31. #ifndef  _HVTYPES_H
  32. #include <asm/iSeries/HvTypes.h>
  33. #endif
  34. //-------------------------------------------------------------------
  35. // Other Includes
  36. //-------------------------------------------------------------------
  37. #ifndef _PPC_MMU_H
  38. #include <asm/mmu.h>
  39. #endif
  40. //-----------------------------------------------------------------------------
  41. // Constants
  42. //-----------------------------------------------------------------------------
  43. #ifndef _HVCALLHPT_H
  44. #define _HVCALLHPT_H
  45. #define HvCallHptGetHptAddress HvCallHpt +  0
  46. #define HvCallHptGetHptPages HvCallHpt +  1
  47. #define HvCallHptSetPp HvCallHpt +  5
  48. #define HvCallHptSetSwBits HvCallHpt +  6
  49. #define HvCallHptUpdate HvCallHpt +  7
  50. #define HvCallHptInvalidateNoSyncICache HvCallHpt +  8
  51. #define HvCallHptGet HvCallHpt + 11
  52. #define HvCallHptFindNextValid HvCallHpt + 12
  53. #define HvCallHptFindValid HvCallHpt + 13
  54. #define HvCallHptAddValidate HvCallHpt + 16
  55. #define HvCallHptInvalidateSetSwBitsGet HvCallHpt + 18
  56. //============================================================================
  57. static inline u64 HvCallHpt_getHptAddress(void)
  58. {
  59. u64 retval = HvCall0(HvCallHptGetHptAddress);
  60. // getPaca()->adjustHmtForNoOfSpinLocksHeld();
  61. return retval;
  62. }
  63. //============================================================================
  64. static inline u64 HvCallHpt_getHptPages(void)
  65. {
  66. u64 retval = HvCall0(HvCallHptGetHptPages);
  67. // getPaca()->adjustHmtForNoOfSpinLocksHeld();
  68. return retval;
  69. }
  70. //=============================================================================
  71. static inline void HvCallHpt_setPp(u32 hpteIndex, u8 value)
  72. {
  73. HvCall2( HvCallHptSetPp, hpteIndex, value );
  74. // getPaca()->adjustHmtForNoOfSpinLocksHeld();
  75. }
  76. //=============================================================================
  77. static inline void HvCallHpt_setSwBits(u32 hpteIndex, u8 bitson, u8 bitsoff )
  78. {
  79. HvCall3( HvCallHptSetSwBits, hpteIndex, bitson, bitsoff );
  80. // getPaca()->adjustHmtForNoOfSpinLocksHeld();
  81. }
  82. //=============================================================================
  83. static inline void HvCallHpt_invalidateNoSyncICache(u32 hpteIndex)
  84. {
  85. HvCall1( HvCallHptInvalidateNoSyncICache, hpteIndex );
  86. // getPaca()->adjustHmtForNoOfSpinLocksHeld();
  87. }
  88. //=============================================================================
  89. static inline u64 HvCallHpt_invalidateSetSwBitsGet(u32 hpteIndex, u8 bitson, u8 bitsoff )
  90. {
  91. u64 compressedStatus;
  92. compressedStatus = HvCall4( HvCallHptInvalidateSetSwBitsGet, hpteIndex, bitson, bitsoff, 1 );
  93. HvCall1( HvCallHptInvalidateNoSyncICache, hpteIndex );
  94. // getPaca()->adjustHmtForNoOfSpinLocksHeld();
  95. return compressedStatus;
  96. }
  97. //=============================================================================
  98. static inline u64 HvCallHpt_findValid( struct _HPTE *hpte, u64 vpn )
  99. {
  100. u64 retIndex = HvCall3Ret16( HvCallHptFindValid, hpte, vpn, 0, 0 );
  101. // getPaca()->adjustHmtForNoOfSpinLocksHeld();
  102. return retIndex;
  103. }
  104. //=============================================================================
  105. static inline u64 HvCallHpt_findNextValid( struct _HPTE *hpte, u32 hpteIndex, u8 bitson, u8 bitsoff )
  106. {
  107. u64 retIndex = HvCall3Ret16( HvCallHptFindNextValid, hpte, hpteIndex, bitson, bitsoff );
  108. // getPaca()->adjustHmtForNoOfSpinLocksHeld();
  109. return retIndex;
  110. }
  111. //=============================================================================
  112. static inline void HvCallHpt_get( struct _HPTE *hpte, u32 hpteIndex )
  113. {
  114. HvCall2Ret16( HvCallHptGet, hpte, hpteIndex, 0 );
  115. // getPaca()->adjustHmtForNoOfSpinLocksHeld();
  116. }
  117. //============================================================================
  118. static inline void HvCallHpt_addValidate( u32 hpteIndex,
  119.        u32 hBit,
  120.        struct _HPTE *hpte )
  121. {
  122. HvCall4( HvCallHptAddValidate, hpteIndex,
  123.  hBit, (*((u64 *)hpte)), (*(((u64 *)hpte)+1)) );
  124. // getPaca()->adjustHmtForNoOfSpinLocksHeld();
  125. }
  126. //=============================================================================
  127. #endif // _HVCALLHPT_H