blob: 1173feaae6aff0c2382811247a991ad6c4aca68d [file] [log] [blame]
#ifndef _ASMPOWERPC_HCALL_H_
#define _ASMPOWERPC_HCALL_H_
/*
* Copyright (C) 2016, Red Hat Inc, Andrew Jones <drjones@redhat.com>
*
* This work is licensed under the terms of the GNU LGPL, version 2.
*/
#define SC1 0x44000022
#define SC1_REPLACEMENT 0x7c000268
#define H_SUCCESS 0
#define H_HARDWARE -1
#define H_FUNCTION -2
#define H_PRIVILEGE -3
#define H_PARAMETER -4
#define H_SET_SPRG0 0x24
#define H_SET_DABR 0x28
#define H_PAGE_INIT 0x2c
#define H_CEDE 0xE0
#define H_GET_TERM_CHAR 0x54
#define H_PUT_TERM_CHAR 0x58
#define H_RANDOM 0x300
#define H_SET_MODE 0x31C
#define KVMPPC_HCALL_BASE 0xf000
#define KVMPPC_H_RTAS (KVMPPC_HCALL_BASE + 0x0)
#ifndef __ASSEMBLY__
/*
* hcall_have_broken_sc1 checks if we're on a host with a broken sc1.
* Returns 0 if we're not.
*/
extern int hcall_have_broken_sc1(void);
/*
* hcall is the hypercall wrapper function. unittests may do what
* they like, but the framework should make all hypercalls through
* here to ensure they use a working sc1 instruction. @nr is the
* hypercall number.
*/
extern unsigned long hcall(unsigned long nr, ...);
#endif /* !__ASSEMBLY__ */
#endif /* _ASMPOWERPC_HCALL_H_ */