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