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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * HvCall.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. #include <asm/paca.h>
  35. //-------------------------------------------------------------------
  36. // Constants
  37. //-------------------------------------------------------------------
  38. #ifndef _HVCALL_H
  39. #define _HVCALL_H
  40. /*
  41. enum HvCall_ReturnCode
  42. {
  43. HvCall_Good = 0,
  44. HvCall_Partial = 1,
  45. HvCall_NotOwned = 2,
  46. HvCall_NotFreed = 3,
  47. HvCall_UnspecifiedError = 4
  48. };
  49. enum HvCall_TypeOfSIT
  50. {
  51. HvCall_ReduceOnly = 0,
  52. HvCall_Unconditional = 1
  53. };
  54. enum HvCall_TypeOfYield
  55. {
  56. HvCall_YieldTimed = 0, // Yield until specified time
  57. HvCall_YieldToActive = 1, // Yield until all active procs have run
  58. HvCall_YieldToProc = 2 // Yield until the specified processor has run
  59. };
  60. enum HvCall_InterruptMasks
  61. {
  62. HvCall_MaskIPI = 0x00000001,
  63. HvCall_MaskLpEvent = 0x00000002,
  64. HvCall_MaskLpProd = 0x00000004,
  65. HvCall_MaskTimeout = 0x00000008
  66. };
  67. enum HvCall_VaryOffChunkRc
  68. {
  69. HvCall_VaryOffSucceeded = 0,
  70. HvCall_VaryOffWithdrawn = 1,
  71. HvCall_ChunkInLoadArea = 2,
  72. HvCall_ChunkInHPT = 3,
  73. HvCall_ChunkNotAccessible = 4,
  74. HvCall_ChunkInUse = 5
  75. };
  76. */
  77. /* Type of yield for HvCallBaseYieldProcessor */
  78. #define HvCall_YieldTimed  0 // Yield until specified time (tb)
  79. #define HvCall_YieldToActive 1 // Yield until all active procs have run
  80. #define HvCall_YieldToProc 2 // Yield until the specified processor has run
  81. /* interrupt masks for setEnabledInterrupts */
  82. #define HvCall_MaskIPI 0x00000001
  83. #define HvCall_MaskLpEvent 0x00000002
  84. #define HvCall_MaskLpProd 0x00000004
  85. #define HvCall_MaskTimeout 0x00000008
  86. /* Log buffer formats                       */
  87. #define HvCall_LogBuffer_ASCII          0
  88. #define HvCall_LogBuffer_EBCDIC         1
  89. #define HvCallBaseAckDeferredInts HvCallBase +  0
  90. #define HvCallBaseCpmPowerOff HvCallBase +  1
  91. #define HvCallBaseGetHwPatch HvCallBase +  2
  92. #define HvCallBaseReIplSpAttn HvCallBase +  3
  93. #define HvCallBaseSetASR HvCallBase +  4
  94. #define HvCallBaseSetASRAndRfi HvCallBase +  5 
  95. #define HvCallBaseSetIMR HvCallBase +  6
  96. #define HvCallBaseSendIPI HvCallBase +  7
  97. #define HvCallBaseTerminateMachine HvCallBase +  8
  98. #define HvCallBaseTerminateMachineSrc HvCallBase +  9
  99. #define HvCallBaseProcessPlicInterrupts HvCallBase + 10
  100. #define HvCallBaseIsPrimaryCpmOrMsdIpl HvCallBase + 11
  101. #define HvCallBaseSetVirtualSIT HvCallBase + 12
  102. #define HvCallBaseVaryOffThisProcessor HvCallBase + 13
  103. #define HvCallBaseVaryOffMemoryChunk HvCallBase + 14
  104. #define HvCallBaseVaryOffInteractivePercentage HvCallBase + 15
  105. #define HvCallBaseSendLpProd HvCallBase + 16
  106. #define HvCallBaseSetEnabledInterrupts HvCallBase + 17
  107. #define HvCallBaseYieldProcessor HvCallBase + 18
  108. #define HvCallBaseVaryOffSharedProcUnits HvCallBase + 19
  109. #define HvCallBaseSetVirtualDecr HvCallBase + 20
  110. #define HvCallBaseClearLogBuffer HvCallBase + 21
  111. #define HvCallBaseGetLogBufferCodePage HvCallBase + 22
  112. #define HvCallBaseGetLogBufferFormat HvCallBase + 23
  113. #define HvCallBaseGetLogBufferLength HvCallBase + 24
  114. #define HvCallBaseReadLogBuffer  HvCallBase + 25
  115. #define HvCallBaseSetLogBufferFormatAndCodePage HvCallBase + 26
  116. #define HvCallBaseWriteLogBuffer                HvCallBase + 27
  117. #define HvCallBaseRouter28 HvCallBase + 28
  118. #define HvCallBaseRouter29 HvCallBase + 29
  119. #define HvCallBaseRouter30 HvCallBase + 30
  120. #define HvCallCcSetDABR   HvCallCc + 7
  121. //=====================================================================================
  122. static inline void HvCall_setVirtualDecr(void)
  123. {
  124. /* Ignore any error return codes - most likely means that the target value for the
  125.  * LP has been increased and this vary off would bring us below the new target. */
  126. HvCall0(HvCallBaseSetVirtualDecr);
  127. }
  128. //=====================================================================
  129. static inline void HvCall_yieldProcessor(unsigned typeOfYield, u64 yieldParm)
  130. {
  131. HvCall2( HvCallBaseYieldProcessor, typeOfYield, yieldParm );
  132. }
  133. //=====================================================================
  134. static inline void HvCall_setEnabledInterrupts(u64 enabledInterrupts)
  135. {
  136. HvCall1(HvCallBaseSetEnabledInterrupts,enabledInterrupts);
  137. }
  138. //=====================================================================
  139. static inline void HvCall_clearLogBuffer(HvLpIndex lpindex)
  140. {
  141. HvCall1(HvCallBaseClearLogBuffer,lpindex);
  142. }
  143. //=====================================================================
  144. static inline u32   HvCall_getLogBufferCodePage(HvLpIndex lpindex)
  145. {
  146. u32 retVal = HvCall1(HvCallBaseGetLogBufferCodePage,lpindex);
  147. return retVal;
  148. }
  149. //=====================================================================
  150. static inline int   HvCall_getLogBufferFormat(HvLpIndex lpindex)
  151. {
  152. int retVal = HvCall1(HvCallBaseGetLogBufferFormat,lpindex);
  153. return retVal;
  154. }
  155. //=====================================================================
  156. static inline u32   HvCall_getLogBufferLength(HvLpIndex lpindex)
  157. {
  158. u32 retVal = HvCall1(HvCallBaseGetLogBufferLength,lpindex);
  159. return retVal;
  160. }
  161. //=====================================================================
  162. static inline void   HvCall_setLogBufferFormatAndCodepage(int format, u32 codePage)
  163. {
  164. HvCall2(HvCallBaseSetLogBufferFormatAndCodePage,format, codePage);
  165. }
  166. //=====================================================================
  167. int HvCall_readLogBuffer(HvLpIndex lpindex, void *buffer, u64 bufLen);
  168. void HvCall_writeLogBuffer(const void *buffer, u64 bufLen);
  169. //=====================================================================
  170. static inline void HvCall_sendIPI(struct paca_struct * targetPaca)
  171. {
  172. HvCall1( HvCallBaseSendIPI, targetPaca->xPacaIndex );
  173. }
  174. //=====================================================================
  175. static inline void HvCall_terminateMachineSrc(void)
  176. {
  177. HvCall0( HvCallBaseTerminateMachineSrc );
  178. }
  179. static inline void HvCall_setDABR(unsigned long val)
  180. {
  181. HvCall1(HvCallCcSetDABR, val);
  182. }
  183. #endif // _HVCALL_H