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