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