xref: /kvm-unit-tests/lib/powerpc/asm/hcall.h (revision 1d0f08f40d53daa39566842ec46a112db5f7e524)
1 #ifndef _ASMPOWERPC_HCALL_H_
2 #define _ASMPOWERPC_HCALL_H_
3 /*
4  * Copyright (C) 2016, Red Hat Inc, Andrew Jones <drjones@redhat.com>
5  *
6  * This work is licensed under the terms of the GNU LGPL, version 2.
7  */
8 
9 #define SC1			0x44000022
10 #define SC1_REPLACEMENT		0x7c000268
11 
12 #define H_SUCCESS		0
13 #define H_HARDWARE		-1
14 #define H_FUNCTION		-2
15 #define H_PRIVILEGE		-3
16 #define H_PARAMETER		-4
17 
18 #define H_SET_SPRG0		0x24
19 #define H_SET_DABR		0x28
20 #define H_PAGE_INIT		0x2c
21 #define H_REGISTER_VPA		0xDC
22 #define H_CEDE			0xE0
23 #define H_GET_TERM_CHAR		0x54
24 #define H_PUT_TERM_CHAR		0x58
25 #define H_RANDOM		0x300
26 #define H_SET_MODE		0x31C
27 
28 #define KVMPPC_HCALL_BASE	0xf000
29 #define KVMPPC_H_RTAS		(KVMPPC_HCALL_BASE + 0x0)
30 
31 #ifndef __ASSEMBLY__
32 /*
33  * hcall_have_broken_sc1 checks if we're on a host with a broken sc1.
34  * Returns 0 if we're not.
35  */
36 extern int hcall_have_broken_sc1(void);
37 
38 /*
39  * hcall is the hypercall wrapper function. unittests may do what
40  * they like, but the framework should make all hypercalls through
41  * here to ensure they use a working sc1 instruction. @nr is the
42  * hypercall number.
43  */
44 extern unsigned long hcall(unsigned long nr, ...);
45 
46 #endif /* !__ASSEMBLY__ */
47 #endif /* _ASMPOWERPC_HCALL_H_ */
48