1255643Snwhitehorn/*-
2255643Snwhitehorn * Copyright (C) 2010 Andreas Tobler
3255643Snwhitehorn * All rights reserved.
4255643Snwhitehorn *
5255643Snwhitehorn * Redistribution and use in source and binary forms, with or without
6255643Snwhitehorn * modification, are permitted provided that the following conditions
7255643Snwhitehorn * are met:
8255643Snwhitehorn * 1. Redistributions of source code must retain the above copyright
9255643Snwhitehorn *    notice, this list of conditions and the following disclaimer.
10255643Snwhitehorn * 2. Redistributions in binary form must reproduce the above copyright
11255643Snwhitehorn *    notice, this list of conditions and the following disclaimer in the
12255643Snwhitehorn *    documentation and/or other materials provided with the distribution.
13255643Snwhitehorn *
14255643Snwhitehorn * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15255643Snwhitehorn * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16255643Snwhitehorn * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17255643Snwhitehorn * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
18255643Snwhitehorn * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19255643Snwhitehorn * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
20255643Snwhitehorn * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
21255643Snwhitehorn * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
22255643Snwhitehorn * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
23255643Snwhitehorn * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24255643Snwhitehorn *
25255643Snwhitehorn * $FreeBSD: releng/10.2/sys/powerpc/pseries/phyp-hvcall.h 255643 2013-09-17 17:37:04Z nwhitehorn $
26255643Snwhitehorn */
27255643Snwhitehorn
28255643Snwhitehorn#ifndef	_PSERIES_PHYP_HVCALL_H_
29255643Snwhitehorn#define	_PSERIES_PHYP_HVCALL_H_
30255643Snwhitehorn
31255643Snwhitehorn/* Information taken from: Power.org PAPR, Version 2.4 (December 7, 2009). */
32255643Snwhitehorn
33255643Snwhitehorn#include <sys/types.h>
34255643Snwhitehorn
35255643Snwhitehorn/* Return codes. */
36255643Snwhitehorn
37255643Snwhitehorn#define H_SUCCESS       0
38255643Snwhitehorn#define H_BUSY          1  /* Hardware Busy -- Retry Later. */
39255643Snwhitehorn#define H_CLOSED        2  /* Virtual I/O connection is closed. */
40255643Snwhitehorn#define H_NOT_AVAILABLE 3
41255643Snwhitehorn#define H_CONSTRAINED   4  /* The request called for resources in excess of
42255643Snwhitehorn			      the maximum allowed. The resultant allocation
43255643Snwhitehorn			      was constrained to maximum allowed. */
44255643Snwhitehorn#define H_PARTIAL       5  /* The request completed only partially successful.
45255643Snwhitehorn			      Parameters were valid but some specific hcall
46255643Snwhitehorn			      function condition prevented fully completing the
47255643Snwhitehorn			      architected function, see the specific hcall
48255643Snwhitehorn			      definition for possible reasons. */
49255643Snwhitehorn#define H_IN_PROGRESS     14
50255643Snwhitehorn#define H_PAGE_REGISTERED 15
51255643Snwhitehorn#define H_PARTIAL_STORE   16
52255643Snwhitehorn#define H_PENDING         17
53255643Snwhitehorn#define H_CONTINUE        18
54255643Snwhitehorn
55255643Snwhitehorn#define H_LONG_BUSY_ORDER_1_MS   9900  /* This return code is identical to
56255643Snwhitehorn					  H_BUSY, but with the added bonus of a
57255643Snwhitehorn					  hint to the partition OS. If the
58255643Snwhitehorn					  partition OS can delay for 1
59255643Snwhitehorn					  millisecond, the hcall will likely
60255643Snwhitehorn					  succeed on a new hcall with no further
61255643Snwhitehorn					  busy return codes. If the partition OS
62255643Snwhitehorn					  cannot handle a delay, they are
63255643Snwhitehorn					  certainly free to immediately turn
64255643Snwhitehorn					  around and try again. */
65255643Snwhitehorn#define H_LONG_BUSY_ORDER_10_MS  9901  /* Similar to H_LONG_BUSY_ORDER_1_MS, but
66255643Snwhitehorn					  the hint is 10mSec wait this time. */
67255643Snwhitehorn
68255643Snwhitehorn#define H_LONG_BUSY_ORDER_100_MS 9902  /* Similar to H_LONG_BUSY_ORDER_1_MS, but
69255643Snwhitehorn					  the hint is 100mSec wait this time. */
70255643Snwhitehorn
71255643Snwhitehorn#define H_LONG_BUSY_ORDER_1_S    9903  /* Similar to H_LONG_BUSY_ORDER_1_MS, but
72255643Snwhitehorn					  the hint is 1Sec wait this time. */
73255643Snwhitehorn#define H_LONG_BUSY_ORDER_10_S   9904  /* Similar to H_LONG_BUSY_ORDER_1_MS, but
74255643Snwhitehorn					  the hint is 10Sec wait this time. */
75255643Snwhitehorn#define H_LONG_BUSY_ORDER_100_S  9905  /* Similar to H_LONG_BUSY_ORDER_1_MS, but
76255643Snwhitehorn					  the hint is 100Sec wait this time. */
77255643Snwhitehorn
78255643Snwhitehorn#define H_HARDWARE   -1  /* Error. */
79255643Snwhitehorn#define H_FUNCTION   -2  /* Not supported. */
80255643Snwhitehorn#define H_PRIVILEGE  -3  /* Caller not in privileged mode. */
81255643Snwhitehorn#define H_PARAMETER  -4  /* Outside valid range for partition or conflicting. */
82255643Snwhitehorn#define H_BAD_MODE   -5  /* Illegal MSR value. */
83255643Snwhitehorn#define H_PTEG_FULL  -6  /* The requested pteg was full. */
84255643Snwhitehorn#define H_NOT_FOUND  -7  /* The requested entitiy was not found. */
85255643Snwhitehorn#define H_RESERVED_DABR -8  /* The requested address is reserved by the
86255643Snwhitehorn			       hypervisor on this processor. */
87255643Snwhitehorn#define H_NOMEM      -9
88255643Snwhitehorn#define H_AUTHORITY -10  /* The caller did not have authority to perform the
89255643Snwhitehorn			    function. */
90255643Snwhitehorn#define H_PERMISSION -11  /* The mapping specified by the request does not
91255643Snwhitehorn			     allow for the requested transfer. */
92255643Snwhitehorn#define H_DROPPED   -12  /* One or more packets could not be delivered to
93255643Snwhitehorn			    their requested destinations. */
94255643Snwhitehorn#define H_S_PARM   -13  /* The source parameter is illegal. */
95255643Snwhitehorn#define H_D_PARM   -14  /* The destination parameter is illegal. */
96255643Snwhitehorn#define H_R_PARM   -15  /* The remote TCE mapping is illegal. */
97255643Snwhitehorn#define H_RESOURCE  -16  /* One or more required resources are in use. */
98255643Snwhitehorn#define H_ADAPTER_PARM -17  /* Invalid adapter. */
99255643Snwhitehorn#define H_RH_PARM  -18  /* Resource not valid or logical partition
100255643Snwhitehorn			   conflicting. */
101255643Snwhitehorn#define H_RCQ_PARM -19  /* RCQ not valid or logical partition conflicting. */
102255643Snwhitehorn#define H_SCQ_PARM -20  /* SCQ not valid or logical partition conflicting. */
103255643Snwhitehorn#define H_EQ_PARM -21  /* EQ not valid or logical partition conflicting. */
104255643Snwhitehorn#define H_RT_PARM -22  /* Invalid resource type. */
105255643Snwhitehorn#define H_ST_PARM -23  /* Invalid service type. */
106255643Snwhitehorn#define H_SIGT_PARM -24 /* Invalid signalling type. */
107255643Snwhitehorn#define H_TOKEN_PARM -25  /* Invalid token. */
108255643Snwhitehorn#define H_MLENGTH_PARM -27  /* Invalid memory length. */
109255643Snwhitehorn#define H_MEM_PARM -28  /* Invalid memory I/O virtual address. */
110255643Snwhitehorn#define H_MEM_ACCESS_PARM -29  /* Invalid memory access control. */
111255643Snwhitehorn#define H_ATTR_PARM -30  /* Invalid attribute value. */
112255643Snwhitehorn#define H_PORT_PARM -31  /* Invalid port number. */
113255643Snwhitehorn#define H_MCG_PARM -32  /* Invalid multicast group. */
114255643Snwhitehorn#define H_VL_PARM -33  /* Invalid virtual lane. */
115255643Snwhitehorn#define H_TSIZE_PARM -34  /* Invalid trace size. */
116255643Snwhitehorn#define H_TRACE_PARM -35  /* Invalid trace buffer. */
117255643Snwhitehorn#define H_MASK_PARM -37  /* Invalid mask value. */
118255643Snwhitehorn#define H_MCG_FULL -38  /* Multicast attachments exceeded. */
119255643Snwhitehorn#define H_ALIAS_EXIST -39  /* Alias QP already defined. */
120255643Snwhitehorn#define H_P_COUNTER -40  /* Invalid counter specification. */
121255643Snwhitehorn#define H_TABLE_FULL -41  /* Resource page table full. */
122255643Snwhitehorn#define H_ALT_TABLE -42  /* Alternate table already exists / alternate page
123255643Snwhitehorn			    table not available. */
124255643Snwhitehorn#define H_MR_CONDITION -43  /* Invalid memory region condition. */
125255643Snwhitehorn#define H_NOT_ENOUGH_RESOURCES -44  /* Insufficient resources. */
126255643Snwhitehorn#define H_R_STATE -45  /* Invalid resource state condition or sequencing
127255643Snwhitehorn			  error. */
128255643Snwhitehorn#define H_RESCINDED -46
129255643Snwhitehorn#define H_ABORTED -54
130255643Snwhitehorn#define H_P2 -55
131255643Snwhitehorn#define H_P3 -56
132255643Snwhitehorn#define H_P4 -57
133255643Snwhitehorn#define H_P5 -58
134255643Snwhitehorn#define H_P6 -59
135255643Snwhitehorn#define H_P7 -60
136255643Snwhitehorn#define H_P8 -61
137255643Snwhitehorn#define H_P9 -62
138255643Snwhitehorn#define H_NOOP -63
139255643Snwhitehorn#define H_TOO_BIG -64
140255643Snwhitehorn
141255643Snwhitehorn#define H_UNSUPPORTED -67  /* Parameter value outside of the range supported
142255643Snwhitehorn			      by this implementation. */
143255643Snwhitehorn
144255643Snwhitehorn/* Flags. */
145255643Snwhitehorn/* Table 168. Page Frame Table Access flags field definition. */
146255643Snwhitehorn#define H_EXACT                 (1UL<<(63-24))
147255643Snwhitehorn#define H_R_XLATE               (1UL<<(63-25))
148255643Snwhitehorn#define H_READ_4                (1UL<<(63-26))
149255643Snwhitehorn
150255643Snwhitehorn/* Table 178. CMO Page Usage State flags Definition. */
151255643Snwhitehorn#define H_PAGE_STATE_CHANGE     (1UL<<(63-28))
152255643Snwhitehorn#define H_PAGE_UNUSED           ((1UL<<(63-29)) | (1UL<<(63-30)))
153255643Snwhitehorn#define H_PAGE_SET_UNUSED       (H_PAGE_STATE_CHANGE | H_PAGE_UNUSED)
154255643Snwhitehorn#define H_PAGE_SET_LOANED       (H_PAGE_SET_UNUSED | (1UL<<(63-31)))
155255643Snwhitehorn#define H_PAGE_SET_ACTIVE       H_PAGE_STATE_CHANGE
156255643Snwhitehorn
157255643Snwhitehorn/* Table 168. Page Frame Table Access flags field definition. */
158255643Snwhitehorn#define H_AVPN                  (1UL<<(63-32))
159255643Snwhitehorn#define H_ANDCOND               (1UL<<(63-33))
160255643Snwhitehorn
161255643Snwhitehorn#define H_ICACHE_INVALIDATE     (1UL<<(63-40))
162255643Snwhitehorn#define H_ICACHE_SYNCHRONIZE    (1UL<<(63-41))
163255643Snwhitehorn
164255643Snwhitehorn#define H_ZERO_PAGE             (1UL<<(63-48))
165255643Snwhitehorn#define H_COPY_PAGE             (1UL<<(63-49))
166255643Snwhitehorn
167255643Snwhitehorn#define H_N (1UL<<(63-61))
168255643Snwhitehorn#define H_PP1 (1UL<<(63-62))
169255643Snwhitehorn#define H_PP2 (1UL<<(63-63))
170255643Snwhitehorn
171255643Snwhitehorn/* pSeries hypervisor opcodes. */
172255643Snwhitehorn#define H_REMOVE		0x04
173255643Snwhitehorn#define H_ENTER			0x08
174255643Snwhitehorn#define H_READ			0x0c
175255643Snwhitehorn#define H_CLEAR_MOD		0x10
176255643Snwhitehorn#define H_CLEAR_REF		0x14
177255643Snwhitehorn#define H_PROTECT		0x18
178255643Snwhitehorn#define H_GET_TCE		0x1c
179255643Snwhitehorn#define H_PUT_TCE		0x20
180255643Snwhitehorn#define H_SET_SPRG0		0x24
181255643Snwhitehorn#define H_SET_DABR		0x28
182255643Snwhitehorn#define H_PAGE_INIT		0x2c
183255643Snwhitehorn#define H_SET_ASR		0x30
184255643Snwhitehorn#define H_ASR_ON		0x34
185255643Snwhitehorn#define H_ASR_OFF		0x38
186255643Snwhitehorn#define H_LOGICAL_CI_LOAD	0x3c
187255643Snwhitehorn#define H_LOGICAL_CI_STORE	0x40
188255643Snwhitehorn#define H_LOGICAL_CACHE_LOAD	0x44
189255643Snwhitehorn#define H_LOGICAL_CACHE_STORE	0x48
190255643Snwhitehorn#define H_LOGICAL_ICBI		0x4c
191255643Snwhitehorn#define H_LOGICAL_DCBF		0x50
192255643Snwhitehorn#define H_GET_TERM_CHAR		0x54
193255643Snwhitehorn#define H_PUT_TERM_CHAR		0x58
194255643Snwhitehorn#define H_REAL_TO_LOGICAL	0x5c
195255643Snwhitehorn#define H_HYPERVISOR_DATA	0x60
196255643Snwhitehorn#define H_EOI			0x64
197255643Snwhitehorn#define H_CPPR			0x68
198255643Snwhitehorn#define H_IPI			0x6c
199255643Snwhitehorn#define H_IPOLL			0x70
200255643Snwhitehorn#define H_XIRR			0x74
201255643Snwhitehorn#define H_MIGRATE_DMA		0x78
202255643Snwhitehorn#define H_PERFMON		0x7c
203255643Snwhitehorn#define H_REGISTER_VPA		0xdc
204255643Snwhitehorn#define H_CEDE			0xe0
205255643Snwhitehorn#define H_CONFER		0xe4
206255643Snwhitehorn#define H_PROD			0xe8
207255643Snwhitehorn#define H_GET_PPP		0xec
208255643Snwhitehorn#define H_SET_PPP		0xf0
209255643Snwhitehorn#define H_PURR			0xf4
210255643Snwhitehorn#define H_PIC			0xf8
211255643Snwhitehorn#define H_REG_CRQ		0xfc
212255643Snwhitehorn#define H_FREE_CRQ		0x100
213255643Snwhitehorn#define H_VIO_SIGNAL		0x104
214255643Snwhitehorn#define H_SEND_CRQ		0x108
215255643Snwhitehorn#define H_PUT_RTCE              0x10c
216255643Snwhitehorn#define H_COPY_RDMA		0x110
217255643Snwhitehorn#define H_REGISTER_LOGICAL_LAN	0x114
218255643Snwhitehorn#define H_FREE_LOGICAL_LAN	0x118
219255643Snwhitehorn#define H_ADD_LOGICAL_LAN_BUFFER 0x11c
220255643Snwhitehorn#define H_SEND_LOGICAL_LAN	0x120
221255643Snwhitehorn#define H_BULK_REMOVE		0x124
222255643Snwhitehorn#define H_WRITE_RDMA            0x128
223255643Snwhitehorn#define H_READ_RDMA             0x12c
224255643Snwhitehorn#define H_MULTICAST_CTRL	0x130
225255643Snwhitehorn#define H_SET_XDABR		0x134
226255643Snwhitehorn#define H_STUFF_TCE		0x138
227255643Snwhitehorn#define H_PUT_TCE_INDIRECT	0x13c
228255643Snwhitehorn#define H_PUT_RTCE_INDIRECT	0x140
229255643Snwhitehorn#define H_CHANGE_LOGICAL_LAN_MAC 0x14c
230255643Snwhitehorn#define H_VTERM_PARTNER_INFO	0x150
231255643Snwhitehorn#define H_REGISTER_VTERM	0x154
232255643Snwhitehorn#define H_FREE_VTERM		0x158
233255643Snwhitehorn/* Reserved ....
234255643Snwhitehorn#define H_RESET_EVENTS          0x15c
235255643Snwhitehorn#define H_ALLOC_RESOURCE        0x160
236255643Snwhitehorn#define H_FREE_RESOURCE         0x164
237255643Snwhitehorn#define H_MODIFY_QP             0x168
238255643Snwhitehorn#define H_QUERY_QP              0x16c
239255643Snwhitehorn#define H_REREGISTER_PMR        0x170
240255643Snwhitehorn#define H_REGISTER_SMR          0x174
241255643Snwhitehorn#define H_QUERY_MR              0x178
242255643Snwhitehorn#define H_QUERY_MW              0x17c
243255643Snwhitehorn#define H_QUERY_HCA             0x180
244255643Snwhitehorn#define H_QUERY_PORT            0x184
245255643Snwhitehorn#define H_MODIFY_PORT           0x188
246255643Snwhitehorn#define H_DEFINE_AQP1           0x18c
247255643Snwhitehorn#define H_GET_TRACE_BUFFER      0x190
248255643Snwhitehorn#define H_DEFINE_AQP0           0x194
249255643Snwhitehorn#define H_RESIZE_MR             0x198
250255643Snwhitehorn#define H_ATTACH_MCQP           0x19c
251255643Snwhitehorn#define H_DETACH_MCQP           0x1a0
252255643Snwhitehorn#define H_CREATE_RPT            0x1a4
253255643Snwhitehorn#define H_REMOVE_RPT            0x1a8
254255643Snwhitehorn#define H_REGISTER_RPAGES       0x1ac
255255643Snwhitehorn#define H_DISABLE_AND_GETC      0x1b0
256255643Snwhitehorn#define H_ERROR_DATA            0x1b4
257255643Snwhitehorn#define H_GET_HCA_INFO          0x1b8
258255643Snwhitehorn#define H_GET_PERF_COUNT        0x1bc
259255643Snwhitehorn#define H_MANAGE_TRACE          0x1c0
260255643Snwhitehorn.... */
261255643Snwhitehorn#define H_FREE_LOGICAL_LAN_BUFFER 0x1d4
262255643Snwhitehorn#define H_POLL_PENDING		0x1d8
263255643Snwhitehorn/* Reserved ....
264255643Snwhitehorn#define H_QUERY_INT_STATE       0x1e4
265255643Snwhitehorn.... */
266255643Snwhitehorn#define H_LIOBN_ATTRIBUTES	0x240
267255643Snwhitehorn#define H_ILLAN_ATTRIBUTES	0x244
268255643Snwhitehorn#define H_REMOVE_RTCE	        0x24c
269255643Snwhitehorn/* Reserved ...
270255643Snwhitehorn#define H_MODIFY_HEA_QP		0x250
271255643Snwhitehorn#define H_QUERY_HEA_QP		0x254
272255643Snwhitehorn#define H_QUERY_HEA		0x258
273255643Snwhitehorn#define H_QUERY_HEA_PORT	0x25c
274255643Snwhitehorn#define H_MODIFY_HEA_PORT	0x260
275255643Snwhitehorn#define H_REG_BCMC		0x264
276255643Snwhitehorn#define H_DEREG_BCMC		0x268
277255643Snwhitehorn#define H_REGISTER_HEA_RPAGES	0x26c
278255643Snwhitehorn#define H_DISABLE_AND_GET_HEA	0x270
279255643Snwhitehorn#define H_GET_HEA_INFO		0x274
280255643Snwhitehorn#define H_ALLOC_HEA_RESOURCE	0x278
281255643Snwhitehorn#define H_ADD_CONN		0x284
282255643Snwhitehorn#define H_DEL_CONN		0x288
283255643Snwhitehorn... */
284255643Snwhitehorn#define H_JOIN			0x298
285255643Snwhitehorn#define H_DONOR_OPERATION	0x29c
286255643Snwhitehorn#define H_VASI_SIGNAL	       	0x2a0
287255643Snwhitehorn#define H_VASI_STATE            0x2a4
288255643Snwhitehorn#define H_VIOCTL	       	0x2a8
289255643Snwhitehorn#define H_VRMASD	       	0x2ac
290255643Snwhitehorn#define H_ENABLE_CRQ		0x2b0
291255643Snwhitehorn/* Reserved ...
292255643Snwhitehorn#define H_GET_EM_PARMS		0x2b8
293255643Snwhitehorn... */
294255643Snwhitehorn#define H_VPM_STAT	       	0x2bc
295255643Snwhitehorn#define H_SET_MPP		0x2d0
296255643Snwhitehorn#define H_GET_MPP		0x2d4
297255643Snwhitehorn#define MAX_HCALL_OPCODE	H_GET_MPP
298255643Snwhitehorn
299255643Snwhitehornint64_t phyp_hcall(uint64_t opcode, ...);
300255643Snwhitehornint64_t phyp_pft_hcall(uint64_t opcode, uint64_t flags, uint64_t pteidx,
301255643Snwhitehorn    uint64_t pte_hi, uint64_t pte_lo, uint64_t *pteidx_out, uint64_t *ptelo_out,
302255643Snwhitehorn    uint64_t *r6);
303255643Snwhitehorn
304255643Snwhitehorn#endif /* _PSERIES_PHYP_HVCALL_H_ */
305255643Snwhitehorn
306