xref: /openbmc/qemu/docs/specs/ppc-spapr-hcalls.rst (revision f8d75e10d3e0033a0a29a7a7e4777a4fbc17a016)
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