1*a23a72ddSLeonardo Garcia====================== 2d55b123dSLeonardo GarciasPAPR hypervisor calls 3*a23a72ddSLeonardo Garcia====================== 4d55b123dSLeonardo Garcia 5d55b123dSLeonardo GarciaWhen used with the ``pseries`` machine type, ``qemu-system-ppc64`` implements 6*a23a72ddSLeonardo Garciaa set of hypervisor calls (a.k.a. hcalls) defined in the Linux on Power 7*a23a72ddSLeonardo GarciaArchitecture Reference ([LoPAR]_) document. This document is a subset of the 8*a23a72ddSLeonardo GarciaPower Architecture Platform Reference (PAPR+) specification (IBM internal only), 9*a23a72ddSLeonardo Garciawhich is what PowerVM, the IBM proprietary hypervisor, adheres to. 10d55b123dSLeonardo Garcia 11d55b123dSLeonardo GarciaThe subset in LoPAR is selected based on the requirements of Linux as a guest. 12d55b123dSLeonardo Garcia 13d55b123dSLeonardo GarciaIn addition to those calls, we have added our own private hypervisor 14d55b123dSLeonardo Garciacalls which are mostly used as a private interface between the firmware 15d55b123dSLeonardo Garciarunning in the guest and QEMU. 16d55b123dSLeonardo Garcia 17d55b123dSLeonardo GarciaAll those hypercalls start at hcall number 0xf000 which correspond 18d55b123dSLeonardo Garciato an implementation specific range in PAPR. 19d55b123dSLeonardo Garcia 20*a23a72ddSLeonardo Garcia``H_RTAS (0xf000)`` 21*a23a72ddSLeonardo Garcia=================== 22d55b123dSLeonardo Garcia 23d55b123dSLeonardo GarciaRTAS stands for Run-Time Abstraction Sercies and is a set of runtime services 24d55b123dSLeonardo Garciagenerally provided by the firmware inside the guest to the operating system. It 25d55b123dSLeonardo Garciapredates the existence of hypervisors (it was originally an extension to Open 26d55b123dSLeonardo GarciaFirmware) and is still used by PAPR and LoPAR to provide various services that 27d55b123dSLeonardo Garciaare not performance sensitive. 28d55b123dSLeonardo Garcia 29d55b123dSLeonardo GarciaWe currently implement the RTAS services in QEMU itself. The actual RTAS 30d55b123dSLeonardo Garcia"firmware" blob in the guest is a small stub of a few instructions which 31d55b123dSLeonardo Garciacalls our private H_RTAS hypervisor call to pass the RTAS calls to QEMU. 32d55b123dSLeonardo Garcia 33d55b123dSLeonardo GarciaArguments: 34d55b123dSLeonardo Garcia 35d55b123dSLeonardo Garcia ``r3``: ``H_RTAS (0xf000)`` 36d55b123dSLeonardo Garcia 37d55b123dSLeonardo Garcia ``r4``: Guest physical address of RTAS parameter block. 38d55b123dSLeonardo Garcia 39d55b123dSLeonardo GarciaReturns: 40d55b123dSLeonardo Garcia 41d55b123dSLeonardo Garcia ``H_SUCCESS``: Successfully called the RTAS function (RTAS result will have 42d55b123dSLeonardo Garcia been stored in the parameter block). 43d55b123dSLeonardo Garcia 44d55b123dSLeonardo Garcia ``H_PARAMETER``: Unknown token. 45d55b123dSLeonardo Garcia 46*a23a72ddSLeonardo Garcia``H_LOGICAL_MEMOP (0xf001)`` 47*a23a72ddSLeonardo Garcia============================ 48d55b123dSLeonardo Garcia 49d55b123dSLeonardo GarciaWhen the guest runs in "real mode" (in powerpc terminology this means with MMU 50d55b123dSLeonardo Garciadisabled, i.e. guest effective address equals to guest physical address), it 51d55b123dSLeonardo Garciaonly has access to a subset of memory and no I/Os. 52d55b123dSLeonardo Garcia 53d55b123dSLeonardo GarciaPAPR and LoPAR provides a set of hypervisor calls to perform cacheable or 54d55b123dSLeonardo Garcianon-cacheable accesses to any guest physical addresses that the 55d55b123dSLeonardo Garciaguest can use in order to access IO devices while in real mode. 56d55b123dSLeonardo Garcia 57d55b123dSLeonardo GarciaThis is typically used by the firmware running in the guest. 58d55b123dSLeonardo Garcia 59d55b123dSLeonardo GarciaHowever, doing a hypercall for each access is extremely inefficient 60d55b123dSLeonardo Garcia(even more so when running KVM) when accessing the frame buffer. In 61d55b123dSLeonardo Garciathat case, things like scrolling become unusably slow. 62d55b123dSLeonardo Garcia 63d55b123dSLeonardo GarciaThis hypercall allows the guest to request a "memory op" to be applied 64d55b123dSLeonardo Garciato memory. The supported memory ops at this point are to copy a range 65d55b123dSLeonardo Garciaof memory (supports overlap of source and destination) and XOR which 66d55b123dSLeonardo Garciais used by our SLOF firmware to invert the screen. 67d55b123dSLeonardo Garcia 68d55b123dSLeonardo GarciaArguments: 69d55b123dSLeonardo Garcia 70d55b123dSLeonardo Garcia ``r3 ``: ``H_LOGICAL_MEMOP (0xf001)`` 71d55b123dSLeonardo Garcia 72d55b123dSLeonardo Garcia ``r4``: Guest physical address of destination. 73d55b123dSLeonardo Garcia 74d55b123dSLeonardo Garcia ``r5``: Guest physical address of source. 75d55b123dSLeonardo Garcia 76d55b123dSLeonardo Garcia ``r6``: Individual element size, defined by the binary logarithm of the 77d55b123dSLeonardo Garcia desired size. Supported values are: 78d55b123dSLeonardo Garcia 79d55b123dSLeonardo Garcia ``0`` = 1 byte 80d55b123dSLeonardo Garcia 81d55b123dSLeonardo Garcia ``1`` = 2 bytes 82d55b123dSLeonardo Garcia 83d55b123dSLeonardo Garcia ``2`` = 4 bytes 84d55b123dSLeonardo Garcia 85d55b123dSLeonardo Garcia ``3`` = 8 bytes 86d55b123dSLeonardo Garcia 87d55b123dSLeonardo Garcia ``r7``: Number of elements. 88d55b123dSLeonardo Garcia 89d55b123dSLeonardo Garcia ``r8``: Operation. Supported values are: 90d55b123dSLeonardo Garcia 91d55b123dSLeonardo Garcia ``0``: copy 92d55b123dSLeonardo Garcia 93d55b123dSLeonardo Garcia ``1``: xor 94d55b123dSLeonardo Garcia 95d55b123dSLeonardo GarciaReturns: 96d55b123dSLeonardo Garcia 97d55b123dSLeonardo Garcia ``H_SUCCESS``: Success. 98d55b123dSLeonardo Garcia 99d55b123dSLeonardo Garcia ``H_PARAMETER``: Invalid argument. 100