linux/arch/powerpc/platforms/iseries/call_hpt.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2001  Mike Corrigan IBM Corporation
   3 *
   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.
   8 *
   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.
  13 *
  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
  17 */
  18#ifndef _PLATFORMS_ISERIES_CALL_HPT_H
  19#define _PLATFORMS_ISERIES_CALL_HPT_H
  20
  21/*
  22 * This file contains the "hypervisor call" interface which is used to
  23 * drive the hypervisor from the OS.
  24 */
  25
  26#include <asm/iseries/hv_call_sc.h>
  27#include <asm/iseries/hv_types.h>
  28#include <asm/mmu.h>
  29
  30#define HvCallHptGetHptAddress          HvCallHpt +  0
  31#define HvCallHptGetHptPages            HvCallHpt +  1
  32#define HvCallHptSetPp                  HvCallHpt +  5
  33#define HvCallHptSetSwBits              HvCallHpt +  6
  34#define HvCallHptUpdate                 HvCallHpt +  7
  35#define HvCallHptInvalidateNoSyncICache HvCallHpt +  8
  36#define HvCallHptGet                    HvCallHpt + 11
  37#define HvCallHptFindNextValid          HvCallHpt + 12
  38#define HvCallHptFindValid              HvCallHpt + 13
  39#define HvCallHptAddValidate            HvCallHpt + 16
  40#define HvCallHptInvalidateSetSwBitsGet HvCallHpt + 18
  41
  42
  43static inline u64 HvCallHpt_getHptAddress(void)
  44{
  45        return HvCall0(HvCallHptGetHptAddress);
  46}
  47
  48static inline u64 HvCallHpt_getHptPages(void)
  49{
  50        return HvCall0(HvCallHptGetHptPages);
  51}
  52
  53static inline void HvCallHpt_setPp(u32 hpteIndex, u8 value)
  54{
  55        HvCall2(HvCallHptSetPp, hpteIndex, value);
  56}
  57
  58static inline void HvCallHpt_setSwBits(u32 hpteIndex, u8 bitson, u8 bitsoff)
  59{
  60        HvCall3(HvCallHptSetSwBits, hpteIndex, bitson, bitsoff);
  61}
  62
  63static inline void HvCallHpt_invalidateNoSyncICache(u32 hpteIndex)
  64{
  65        HvCall1(HvCallHptInvalidateNoSyncICache, hpteIndex);
  66}
  67
  68static inline u64 HvCallHpt_invalidateSetSwBitsGet(u32 hpteIndex, u8 bitson,
  69                u8 bitsoff)
  70{
  71        u64 compressedStatus;
  72
  73        compressedStatus = HvCall4(HvCallHptInvalidateSetSwBitsGet,
  74                        hpteIndex, bitson, bitsoff, 1);
  75        HvCall1(HvCallHptInvalidateNoSyncICache, hpteIndex);
  76        return compressedStatus;
  77}
  78
  79static inline u64 HvCallHpt_findValid(struct hash_pte *hpte, u64 vpn)
  80{
  81        return HvCall3Ret16(HvCallHptFindValid, hpte, vpn, 0, 0);
  82}
  83
  84static inline u64 HvCallHpt_findNextValid(struct hash_pte *hpte, u32 hpteIndex,
  85                u8 bitson, u8 bitsoff)
  86{
  87        return HvCall3Ret16(HvCallHptFindNextValid, hpte, hpteIndex,
  88                        bitson, bitsoff);
  89}
  90
  91static inline void HvCallHpt_get(struct hash_pte *hpte, u32 hpteIndex)
  92{
  93        HvCall2Ret16(HvCallHptGet, hpte, hpteIndex, 0);
  94}
  95
  96static inline void HvCallHpt_addValidate(u32 hpteIndex, u32 hBit,
  97                                         struct hash_pte *hpte)
  98{
  99        HvCall4(HvCallHptAddValidate, hpteIndex, hBit, hpte->v, hpte->r);
 100}
 101
 102#endif /* _PLATFORMS_ISERIES_CALL_HPT_H */
 103