/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (C) 2010 Andreas Tobler * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef _PSERIES_PHYP_HVCALL_H_ #define _PSERIES_PHYP_HVCALL_H_ /* Information taken from: Power.org PAPR, Version 2.4 (December 7, 2009). */ #include /* Return codes. */ #define H_SUCCESS 0 #define H_BUSY 1 /* Hardware Busy -- Retry Later. */ #define H_CLOSED 2 /* Virtual I/O connection is closed. */ #define H_NOT_AVAILABLE 3 #define H_CONSTRAINED 4 /* The request called for resources in excess of the maximum allowed. The resultant allocation was constrained to maximum allowed. */ #define H_PARTIAL 5 /* The request completed only partially successful. Parameters were valid but some specific hcall function condition prevented fully completing the architected function, see the specific hcall definition for possible reasons. */ #define H_IN_PROGRESS 14 #define H_PAGE_REGISTERED 15 #define H_PARTIAL_STORE 16 #define H_PENDING 17 #define H_CONTINUE 18 #define H_LONG_BUSY_ORDER_1_MS 9900 /* This return code is identical to H_BUSY, but with the added bonus of a hint to the partition OS. If the partition OS can delay for 1 millisecond, the hcall will likely succeed on a new hcall with no further busy return codes. If the partition OS cannot handle a delay, they are certainly free to immediately turn around and try again. */ #define H_LONG_BUSY_ORDER_10_MS 9901 /* Similar to H_LONG_BUSY_ORDER_1_MS, but the hint is 10mSec wait this time. */ #define H_LONG_BUSY_ORDER_100_MS 9902 /* Similar to H_LONG_BUSY_ORDER_1_MS, but the hint is 100mSec wait this time. */ #define H_LONG_BUSY_ORDER_1_S 9903 /* Similar to H_LONG_BUSY_ORDER_1_MS, but the hint is 1Sec wait this time. */ #define H_LONG_BUSY_ORDER_10_S 9904 /* Similar to H_LONG_BUSY_ORDER_1_MS, but the hint is 10Sec wait this time. */ #define H_LONG_BUSY_ORDER_100_S 9905 /* Similar to H_LONG_BUSY_ORDER_1_MS, but the hint is 100Sec wait this time. */ #define H_HARDWARE -1 /* Error. */ #define H_FUNCTION -2 /* Not supported. */ #define H_PRIVILEGE -3 /* Caller not in privileged mode. */ #define H_PARAMETER -4 /* Outside valid range for partition or conflicting. */ #define H_BAD_MODE -5 /* Illegal MSR value. */ #define H_PTEG_FULL -6 /* The requested pteg was full. */ #define H_NOT_FOUND -7 /* The requested entitiy was not found. */ #define H_RESERVED_DABR -8 /* The requested address is reserved by the hypervisor on this processor. */ #define H_NOMEM -9 #define H_AUTHORITY -10 /* The caller did not have authority to perform the function. */ #define H_PERMISSION -11 /* The mapping specified by the request does not allow for the requested transfer. */ #define H_DROPPED -12 /* One or more packets could not be delivered to their requested destinations. */ #define H_S_PARM -13 /* The source parameter is illegal. */ #define H_D_PARM -14 /* The destination parameter is illegal. */ #define H_R_PARM -15 /* The remote TCE mapping is illegal. */ #define H_RESOURCE -16 /* One or more required resources are in use. */ #define H_ADAPTER_PARM -17 /* Invalid adapter. */ #define H_RH_PARM -18 /* Resource not valid or logical partition conflicting. */ #define H_RCQ_PARM -19 /* RCQ not valid or logical partition conflicting. */ #define H_SCQ_PARM -20 /* SCQ not valid or logical partition conflicting. */ #define H_EQ_PARM -21 /* EQ not valid or logical partition conflicting. */ #define H_RT_PARM -22 /* Invalid resource type. */ #define H_ST_PARM -23 /* Invalid service type. */ #define H_SIGT_PARM -24 /* Invalid signalling type. */ #define H_TOKEN_PARM -25 /* Invalid token. */ #define H_MLENGTH_PARM -27 /* Invalid memory length. */ #define H_MEM_PARM -28 /* Invalid memory I/O virtual address. */ #define H_MEM_ACCESS_PARM -29 /* Invalid memory access control. */ #define H_ATTR_PARM -30 /* Invalid attribute value. */ #define H_PORT_PARM -31 /* Invalid port number. */ #define H_MCG_PARM -32 /* Invalid multicast group. */ #define H_VL_PARM -33 /* Invalid virtual lane. */ #define H_TSIZE_PARM -34 /* Invalid trace size. */ #define H_TRACE_PARM -35 /* Invalid trace buffer. */ #define H_MASK_PARM -37 /* Invalid mask value. */ #define H_MCG_FULL -38 /* Multicast attachments exceeded. */ #define H_ALIAS_EXIST -39 /* Alias QP already defined. */ #define H_P_COUNTER -40 /* Invalid counter specification. */ #define H_TABLE_FULL -41 /* Resource page table full. */ #define H_ALT_TABLE -42 /* Alternate table already exists / alternate page table not available. */ #define H_MR_CONDITION -43 /* Invalid memory region condition. */ #define H_NOT_ENOUGH_RESOURCES -44 /* Insufficient resources. */ #define H_R_STATE -45 /* Invalid resource state condition or sequencing error. */ #define H_RESCINDED -46 #define H_ABORTED -54 #define H_P2 -55 #define H_P3 -56 #define H_P4 -57 #define H_P5 -58 #define H_P6 -59 #define H_P7 -60 #define H_P8 -61 #define H_P9 -62 #define H_NOOP -63 #define H_TOO_BIG -64 #define H_UNSUPPORTED -67 /* Parameter value outside of the range supported by this implementation. */ /* Flags. */ /* Table 168. Page Frame Table Access flags field definition. */ #define H_EXACT (1UL<<(63-24)) #define H_R_XLATE (1UL<<(63-25)) #define H_READ_4 (1UL<<(63-26)) /* Table 178. CMO Page Usage State flags Definition. */ #define H_PAGE_STATE_CHANGE (1UL<<(63-28)) #define H_PAGE_UNUSED ((1UL<<(63-29)) | (1UL<<(63-30))) #define H_PAGE_SET_UNUSED (H_PAGE_STATE_CHANGE | H_PAGE_UNUSED) #define H_PAGE_SET_LOANED (H_PAGE_SET_UNUSED | (1UL<<(63-31))) #define H_PAGE_SET_ACTIVE H_PAGE_STATE_CHANGE /* Table 168. Page Frame Table Access flags field definition. */ #define H_AVPN (1UL<<(63-32)) #define H_ANDCOND (1UL<<(63-33)) #define H_ICACHE_INVALIDATE (1UL<<(63-40)) #define H_ICACHE_SYNCHRONIZE (1UL<<(63-41)) #define H_ZERO_PAGE (1UL<<(63-48)) #define H_COPY_PAGE (1UL<<(63-49)) #define H_N (1UL<<(63-61)) #define H_PP1 (1UL<<(63-62)) #define H_PP2 (1UL<<(63-63)) /* H_SET_MODE resource identifiers from 14.5.4.3.5. */ #define H_SET_MODE_RSRC_CIABR 0x1 /* All versions */ #define H_SET_MODE_RSRC_DAWR0 0x2 /* All versions */ #define H_SET_MODE_RSRC_INTR_TRANS_MODE 0x3 /* All versions */ #define H_SET_MODE_RSRC_ILE 0x4 /* PAPR 2.8 / ISA 2.07 */ #define H_SET_MODE_RSRC_DAWR1 0x5 /* ISA 3.1 Future support */ /* H_REGISTER_PROC_TBL identifiers. */ #define PROC_TABLE_OP_MASK 0x18 #define PROC_TABLE_DEREG 0x10 #define PROC_TABLE_NEW 0x18 #define PROC_TABLE_TYPE_MASK 0x06 #define PROC_TABLE_HPT_SLB 0x00 #define PROC_TABLE_GTSE 0x01 #define PROC_TABLE_HPT_PT 0x02 #define PROC_TABLE_RADIX 0x04 /* pSeries hypervisor opcodes. */ #define H_REMOVE 0x04 #define H_ENTER 0x08 #define H_READ 0x0c #define H_CLEAR_MOD 0x10 #define H_CLEAR_REF 0x14 #define H_PROTECT 0x18 #define H_GET_TCE 0x1c #define H_PUT_TCE 0x20 #define H_SET_SPRG0 0x24 #define H_SET_DABR 0x28 #define H_PAGE_INIT 0x2c #define H_SET_ASR 0x30 #define H_ASR_ON 0x34 #define H_ASR_OFF 0x38 #define H_LOGICAL_CI_LOAD 0x3c #define H_LOGICAL_CI_STORE 0x40 #define H_LOGICAL_CACHE_LOAD 0x44 #define H_LOGICAL_CACHE_STORE 0x48 #define H_LOGICAL_ICBI 0x4c #define H_LOGICAL_DCBF 0x50 #define H_GET_TERM_CHAR 0x54 #define H_PUT_TERM_CHAR 0x58 #define H_REAL_TO_LOGICAL 0x5c #define H_HYPERVISOR_DATA 0x60 #define H_EOI 0x64 #define H_CPPR 0x68 #define H_IPI 0x6c #define H_IPOLL 0x70 #define H_XIRR 0x74 #define H_MIGRATE_DMA 0x78 #define H_PERFMON 0x7c #define H_REGISTER_VPA 0xdc #define H_CEDE 0xe0 #define H_CONFER 0xe4 #define H_PROD 0xe8 #define H_GET_PPP 0xec #define H_SET_PPP 0xf0 #define H_PURR 0xf4 #define H_PIC 0xf8 #define H_REG_CRQ 0xfc #define H_FREE_CRQ 0x100 #define H_VIO_SIGNAL 0x104 #define H_SEND_CRQ 0x108 #define H_PUT_RTCE 0x10c #define H_COPY_RDMA 0x110 #define H_REGISTER_LOGICAL_LAN 0x114 #define H_FREE_LOGICAL_LAN 0x118 #define H_ADD_LOGICAL_LAN_BUFFER 0x11c #define H_SEND_LOGICAL_LAN 0x120 #define H_BULK_REMOVE 0x124 #define H_WRITE_RDMA 0x128 #define H_READ_RDMA 0x12c #define H_MULTICAST_CTRL 0x130 #define H_SET_XDABR 0x134 #define H_STUFF_TCE 0x138 #define H_PUT_TCE_INDIRECT 0x13c #define H_PUT_RTCE_INDIRECT 0x140 #define H_CHANGE_LOGICAL_LAN_MAC 0x14c #define H_VTERM_PARTNER_INFO 0x150 #define H_REGISTER_VTERM 0x154 #define H_FREE_VTERM 0x158 /* Reserved .... #define H_RESET_EVENTS 0x15c #define H_ALLOC_RESOURCE 0x160 #define H_FREE_RESOURCE 0x164 #define H_MODIFY_QP 0x168 #define H_QUERY_QP 0x16c #define H_REREGISTER_PMR 0x170 #define H_REGISTER_SMR 0x174 #define H_QUERY_MR 0x178 #define H_QUERY_MW 0x17c #define H_QUERY_HCA 0x180 #define H_QUERY_PORT 0x184 #define H_MODIFY_PORT 0x188 #define H_DEFINE_AQP1 0x18c #define H_GET_TRACE_BUFFER 0x190 #define H_DEFINE_AQP0 0x194 #define H_RESIZE_MR 0x198 #define H_ATTACH_MCQP 0x19c #define H_DETACH_MCQP 0x1a0 #define H_CREATE_RPT 0x1a4 #define H_REMOVE_RPT 0x1a8 #define H_REGISTER_RPAGES 0x1ac #define H_DISABLE_AND_GETC 0x1b0 #define H_ERROR_DATA 0x1b4 #define H_GET_HCA_INFO 0x1b8 #define H_GET_PERF_COUNT 0x1bc #define H_MANAGE_TRACE 0x1c0 .... */ #define H_FREE_LOGICAL_LAN_BUFFER 0x1d4 #define H_POLL_PENDING 0x1d8 /* Reserved .... #define H_QUERY_INT_STATE 0x1e4 .... */ #define H_LIOBN_ATTRIBUTES 0x240 #define H_ILLAN_ATTRIBUTES 0x244 #define H_REMOVE_RTCE 0x24c /* Reserved ... #define H_MODIFY_HEA_QP 0x250 #define H_QUERY_HEA_QP 0x254 #define H_QUERY_HEA 0x258 #define H_QUERY_HEA_PORT 0x25c #define H_MODIFY_HEA_PORT 0x260 #define H_REG_BCMC 0x264 #define H_DEREG_BCMC 0x268 #define H_REGISTER_HEA_RPAGES 0x26c #define H_DISABLE_AND_GET_HEA 0x270 #define H_GET_HEA_INFO 0x274 #define H_ALLOC_HEA_RESOURCE 0x278 #define H_ADD_CONN 0x284 #define H_DEL_CONN 0x288 ... */ #define H_JOIN 0x298 #define H_DONOR_OPERATION 0x29c #define H_VASI_SIGNAL 0x2a0 #define H_VASI_STATE 0x2a4 #define H_VIOCTL 0x2a8 #define H_VRMASD 0x2ac #define H_ENABLE_CRQ 0x2b0 /* Reserved ... #define H_GET_EM_PARMS 0x2b8 ... */ #define H_VPM_STAT 0x2bc #define H_SET_MPP 0x2d0 #define H_GET_MPP 0x2d4 #define H_MO_PERF 0x2d8 #define H_REG_SUB_CRQ 0x2dc #define H_FREE_SUB_CRQ 0x2e0 #define H_SEND_SUB_CRQ 0x2e4 #define H_SEND_SUB_CRQ_IND 0x2e8 #define H_HOME_NODE_ASSOC 0x2ec /* Reserved ... */ #define H_BEST_ENERGY 0x2f4 #define H_REG_SNS 0x2f8 #define H_X_XIRR 0x2fc #define H_RANDOM 0x300 /* Reserved ... */ #define H_COP_OP 0x304 #define H_STOP_COP_OP 0x308 #define H_GET_MPP_X 0x314 #define H_SET_MODE 0x31C /* Reserved ... */ #define H_GET_DMA_XLATES_L 0x324 /* Reserved ... */ #define H_REGISTER_PROC_TBL 0x37c #define MAX_HCALL_OPCODE H_REGISTER_PROC_TBL int64_t phyp_hcall(uint64_t opcode, ...); int64_t phyp_pft_hcall(uint64_t opcode, uint64_t flags, uint64_t pteidx, uint64_t pte_hi, uint64_t pte_lo, uint64_t *pteidx_out, uint64_t *ptelo_out, uint64_t *r6); #endif /* _PSERIES_PHYP_HVCALL_H_ */