1
2#define H_Success	0
3#define H_Busy		1	/* Hardware busy -- retry later */
4#define H_Hardware	-1	/* Hardware error */
5#define H_Function	-2	/* Function not supported */
6#define H_Privilege	-3	/* Caller not privileged */
7#define H_Parameter	-4	/* Parameter invalid, out-of-range or conflicting */
8#define H_Bad_Mode	-5	/* Illegal msr value */
9#define H_PTEG_Full	-6	/* PTEG is full */
10#define H_Not_Found	-7	/* PTE was not found" */
11#define H_Reserved_DABR	-8	/* DABR address is reserved by the hypervisor on this processor" */
12
13/* Flags */
14#define H_LARGE_PAGE		(1UL<<(63-16))
15#define H_EXACT		    (1UL<<(63-24))	/* Use exact PTE or return H_PTEG_FULL */
16#define H_R_XLATE		(1UL<<(63-25))	/* include a valid logical page num in the pte if the valid bit is set */
17#define H_READ_4		(1UL<<(63-26))	/* Return 4 PTEs */
18#define H_AVPN			(1UL<<(63-32))	/* An avpn is provided as a sanity test */
19#define H_ANDCOND		(1UL<<(63-33))
20#define H_ICACHE_INVALIDATE	(1UL<<(63-40))	/* icbi, etc.  (ignored for IO pages) */
21#define H_ICACHE_SYNCHRONIZE	(1UL<<(63-41))	/* dcbst, icbi, etc (ignored for IO pages */
22#define H_ZERO_PAGE		(1UL<<(63-48))	/* zero the page before mapping (ignored for IO pages) */
23#define H_COPY_PAGE		(1UL<<(63-49))
24#define H_N			(1UL<<(63-61))
25#define H_PP1			(1UL<<(63-62))
26#define H_PP2			(1UL<<(63-63))
27
28
29
30/* pSeries hypervisor opcodes */
31#define H_REMOVE		0x04
32#define H_ENTER			0x08
33#define H_READ			0x0c
34#define H_CLEAR_MOD		0x10
35#define H_CLEAR_REF		0x14
36#define H_PROTECT		0x18
37#define H_GET_TCE		0x1c
38#define H_PUT_TCE		0x20
39#define H_SET_SPRG0		0x24
40#define H_SET_DABR		0x28
41#define H_PAGE_INIT		0x2c
42#define H_SET_ASR		0x30
43#define H_ASR_ON		0x34
44#define H_ASR_OFF		0x38
45#define H_LOGICAL_CI_LOAD	0x3c
46#define H_LOGICAL_CI_STORE	0x40
47#define H_LOGICAL_CACHE_LOAD	0x44
48#define H_LOGICAL_CACHE_STORE	0x48
49#define H_LOGICAL_ICBI		0x4c
50#define H_LOGICAL_DCBF		0x50
51#define H_GET_TERM_CHAR		0x54
52#define H_PUT_TERM_CHAR		0x58
53#define H_REAL_TO_LOGICAL	0x5c
54#define H_HYPERVISOR_DATA	0x60
55#define H_EOI			0x64
56#define H_CPPR			0x68
57#define H_IPI			0x6c
58#define H_IPOLL			0x70
59#define H_XIRR			0x74
60
61#define HSC			".long 0x44000022\n"
62#define H_ENTER_r3		"li	3, 0x08\n"
63
64/* plpar_hcall() -- Generic call interface using above opcodes
65 *
66 * The actual call interface is a hypervisor call instruction with
67 * the opcode in R3 and input args in R4-R7.
68 * Status is returned in R3 with variable output values in R4-R11.
69 * Only H_PTE_READ with H_READ_4 uses R6-R11 so we ignore it for now
70 * and return only two out args which MUST ALWAYS BE PROVIDED.
71 */
72long plpar_hcall(unsigned long opcode,
73		 unsigned long arg1,
74		 unsigned long arg2,
75		 unsigned long arg3,
76		 unsigned long arg4,
77		 unsigned long *out1,
78		 unsigned long *out2,
79		 unsigned long *out3);
80
81/* Same as plpar_hcall but for those opcodes that return no values
82 * other than status.  Slightly more efficient.
83 */
84long plpar_hcall_norets(unsigned long opcode, ...);
85
86