2  * Copyright (C) 2001  Mike Corrigan IBM Corporation
 
   4  * This program is free software; you can redistribute it and/or modify
 
   5  * it under the terms of the GNU General Public License as published by
 
   6  * the Free Software Foundation; either version 2 of the License, or
 
   7  * (at your option) any later version.
 
   9  * This program is distributed in the hope that it will be useful,
 
  10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
  11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
  12  * GNU General Public License for more details.
 
  14  * You should have received a copy of the GNU General Public License
 
  15  * along with this program; if not, write to the Free Software
 
  16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 
  18  * This file contains the "hypervisor call" interface which is used to
 
  19  * drive the hypervisor from the OS.
 
  21 #ifndef _ASM_POWERPC_ISERIES_HV_CALL_H
 
  22 #define _ASM_POWERPC_ISERIES_HV_CALL_H
 
  24 #include <asm/iseries/hv_call_sc.h>
 
  25 #include <asm/iseries/hv_types.h>
 
  28 /* Type of yield for HvCallBaseYieldProcessor */
 
  29 #define HvCall_YieldTimed       0       /* Yield until specified time (tb) */
 
  30 #define HvCall_YieldToActive    1       /* Yield until all active procs have run */
 
  31 #define HvCall_YieldToProc      2       /* Yield until the specified processor has run */
 
  33 /* interrupt masks for setEnabledInterrupts */
 
  34 #define HvCall_MaskIPI          0x00000001
 
  35 #define HvCall_MaskLpEvent      0x00000002
 
  36 #define HvCall_MaskLpProd       0x00000004
 
  37 #define HvCall_MaskTimeout      0x00000008
 
  39 /* Log buffer formats */
 
  40 #define HvCall_LogBuffer_ASCII          0
 
  41 #define HvCall_LogBuffer_EBCDIC         1
 
  43 #define HvCallBaseAckDeferredInts                       HvCallBase +  0
 
  44 #define HvCallBaseCpmPowerOff                           HvCallBase +  1
 
  45 #define HvCallBaseGetHwPatch                            HvCallBase +  2
 
  46 #define HvCallBaseReIplSpAttn                           HvCallBase +  3
 
  47 #define HvCallBaseSetASR                                HvCallBase +  4
 
  48 #define HvCallBaseSetASRAndRfi                          HvCallBase +  5
 
  49 #define HvCallBaseSetIMR                                HvCallBase +  6
 
  50 #define HvCallBaseSendIPI                               HvCallBase +  7
 
  51 #define HvCallBaseTerminateMachine                      HvCallBase +  8
 
  52 #define HvCallBaseTerminateMachineSrc                   HvCallBase +  9
 
  53 #define HvCallBaseProcessPlicInterrupts                 HvCallBase + 10
 
  54 #define HvCallBaseIsPrimaryCpmOrMsdIpl                  HvCallBase + 11
 
  55 #define HvCallBaseSetVirtualSIT                         HvCallBase + 12
 
  56 #define HvCallBaseVaryOffThisProcessor                  HvCallBase + 13
 
  57 #define HvCallBaseVaryOffMemoryChunk                    HvCallBase + 14
 
  58 #define HvCallBaseVaryOffInteractivePercentage          HvCallBase + 15
 
  59 #define HvCallBaseSendLpProd                            HvCallBase + 16
 
  60 #define HvCallBaseSetEnabledInterrupts                  HvCallBase + 17
 
  61 #define HvCallBaseYieldProcessor                        HvCallBase + 18
 
  62 #define HvCallBaseVaryOffSharedProcUnits                HvCallBase + 19
 
  63 #define HvCallBaseSetVirtualDecr                        HvCallBase + 20
 
  64 #define HvCallBaseClearLogBuffer                        HvCallBase + 21
 
  65 #define HvCallBaseGetLogBufferCodePage                  HvCallBase + 22
 
  66 #define HvCallBaseGetLogBufferFormat                    HvCallBase + 23
 
  67 #define HvCallBaseGetLogBufferLength                    HvCallBase + 24
 
  68 #define HvCallBaseReadLogBuffer                         HvCallBase + 25
 
  69 #define HvCallBaseSetLogBufferFormatAndCodePage         HvCallBase + 26
 
  70 #define HvCallBaseWriteLogBuffer                        HvCallBase + 27
 
  71 #define HvCallBaseRouter28                              HvCallBase + 28
 
  72 #define HvCallBaseRouter29                              HvCallBase + 29
 
  73 #define HvCallBaseRouter30                              HvCallBase + 30
 
  74 #define HvCallBaseSetDebugBus                           HvCallBase + 31
 
  76 #define HvCallCcSetDABR                                 HvCallCc + 7
 
  78 static inline void HvCall_setVirtualDecr(void)
 
  81          * Ignore any error return codes - most likely means that the
 
  82          * target value for the LP has been increased and this vary off
 
  83          * would bring us below the new target.
 
  85         HvCall0(HvCallBaseSetVirtualDecr);
 
  88 static inline void HvCall_yieldProcessor(unsigned typeOfYield, u64 yieldParm)
 
  90         HvCall2(HvCallBaseYieldProcessor, typeOfYield, yieldParm);
 
  93 static inline void HvCall_setEnabledInterrupts(u64 enabledInterrupts)
 
  95         HvCall1(HvCallBaseSetEnabledInterrupts, enabledInterrupts);
 
  98 static inline void HvCall_setLogBufferFormatAndCodepage(int format,
 
 101         HvCall2(HvCallBaseSetLogBufferFormatAndCodePage, format, codePage);
 
 104 extern void HvCall_writeLogBuffer(const void *buffer, u64 bufLen);
 
 106 static inline void HvCall_sendIPI(struct paca_struct *targetPaca)
 
 108         HvCall1(HvCallBaseSendIPI, targetPaca->paca_index);
 
 111 #endif /* _ASM_POWERPC_ISERIES_HV_CALL_H */