PageRenderTime 28ms CodeModel.GetById 21ms app.highlight 5ms RepoModel.GetById 1ms app.codeStats 0ms

/arch/powerpc/platforms/iseries/call_hpt.h

https://bitbucket.org/abioy/linux
C Header | 102 lines | 65 code | 16 blank | 21 comment | 0 complexity | dbeadbc3372caa7251a3688de52829da MD5 | raw file
Possible License(s): CC-BY-SA-3.0, GPL-2.0, LGPL-2.0, AGPL-1.0
  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 */