xref: /kvmtool/powerpc/include/asm/kvm.h (revision 85aaadf64649698c3eb2cfbc8df81d0880141744)
11bbe92f5SDave Martin /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
260021220SAndre Przywara /*
360021220SAndre Przywara  * This program is free software; you can redistribute it and/or modify
460021220SAndre Przywara  * it under the terms of the GNU General Public License, version 2, as
560021220SAndre Przywara  * published by the Free Software Foundation.
660021220SAndre Przywara  *
760021220SAndre Przywara  * This program is distributed in the hope that it will be useful,
860021220SAndre Przywara  * but WITHOUT ANY WARRANTY; without even the implied warranty of
960021220SAndre Przywara  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1060021220SAndre Przywara  * GNU General Public License for more details.
1160021220SAndre Przywara  *
1260021220SAndre Przywara  * You should have received a copy of the GNU General Public License
1360021220SAndre Przywara  * along with this program; if not, write to the Free Software
1460021220SAndre Przywara  * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
1560021220SAndre Przywara  *
1660021220SAndre Przywara  * Copyright IBM Corp. 2007
1760021220SAndre Przywara  *
1860021220SAndre Przywara  * Authors: Hollis Blanchard <hollisb@us.ibm.com>
1960021220SAndre Przywara  */
2060021220SAndre Przywara 
2160021220SAndre Przywara #ifndef __LINUX_KVM_POWERPC_H
2260021220SAndre Przywara #define __LINUX_KVM_POWERPC_H
2360021220SAndre Przywara 
2460021220SAndre Przywara #include <linux/types.h>
2560021220SAndre Przywara 
2660021220SAndre Przywara /* Select powerpc specific features in <linux/kvm.h> */
2760021220SAndre Przywara #define __KVM_HAVE_SPAPR_TCE
2860021220SAndre Przywara #define __KVM_HAVE_PPC_SMT
2960021220SAndre Przywara #define __KVM_HAVE_IRQCHIP
3060021220SAndre Przywara #define __KVM_HAVE_IRQ_LINE
3160021220SAndre Przywara 
321bbe92f5SDave Martin /* Not always available, but if it is, this is the correct offset.  */
331bbe92f5SDave Martin #define KVM_COALESCED_MMIO_PAGE_OFFSET 1
341bbe92f5SDave Martin 
3560021220SAndre Przywara struct kvm_regs {
3660021220SAndre Przywara 	__u64 pc;
3760021220SAndre Przywara 	__u64 cr;
3860021220SAndre Przywara 	__u64 ctr;
3960021220SAndre Przywara 	__u64 lr;
4060021220SAndre Przywara 	__u64 xer;
4160021220SAndre Przywara 	__u64 msr;
4260021220SAndre Przywara 	__u64 srr0;
4360021220SAndre Przywara 	__u64 srr1;
4460021220SAndre Przywara 	__u64 pid;
4560021220SAndre Przywara 
4660021220SAndre Przywara 	__u64 sprg0;
4760021220SAndre Przywara 	__u64 sprg1;
4860021220SAndre Przywara 	__u64 sprg2;
4960021220SAndre Przywara 	__u64 sprg3;
5060021220SAndre Przywara 	__u64 sprg4;
5160021220SAndre Przywara 	__u64 sprg5;
5260021220SAndre Przywara 	__u64 sprg6;
5360021220SAndre Przywara 	__u64 sprg7;
5460021220SAndre Przywara 
5560021220SAndre Przywara 	__u64 gpr[32];
5660021220SAndre Przywara };
5760021220SAndre Przywara 
5860021220SAndre Przywara #define KVM_SREGS_E_IMPL_NONE	0
5960021220SAndre Przywara #define KVM_SREGS_E_IMPL_FSL	1
6060021220SAndre Przywara 
6160021220SAndre Przywara #define KVM_SREGS_E_FSL_PIDn	(1 << 0) /* PID1/PID2 */
6260021220SAndre Przywara 
631bbe92f5SDave Martin /* flags for kvm_run.flags */
641bbe92f5SDave Martin #define KVM_RUN_PPC_NMI_DISP_MASK		(3 << 0)
651bbe92f5SDave Martin #define   KVM_RUN_PPC_NMI_DISP_FULLY_RECOV	(1 << 0)
661bbe92f5SDave Martin #define   KVM_RUN_PPC_NMI_DISP_LIMITED_RECOV	(2 << 0)
671bbe92f5SDave Martin #define   KVM_RUN_PPC_NMI_DISP_NOT_RECOV	(3 << 0)
681bbe92f5SDave Martin 
6960021220SAndre Przywara /*
7060021220SAndre Przywara  * Feature bits indicate which sections of the sregs struct are valid,
7160021220SAndre Przywara  * both in KVM_GET_SREGS and KVM_SET_SREGS.  On KVM_SET_SREGS, registers
7260021220SAndre Przywara  * corresponding to unset feature bits will not be modified.  This allows
7360021220SAndre Przywara  * restoring a checkpoint made without that feature, while keeping the
7460021220SAndre Przywara  * default values of the new registers.
7560021220SAndre Przywara  *
7660021220SAndre Przywara  * KVM_SREGS_E_BASE contains:
7760021220SAndre Przywara  * CSRR0/1 (refers to SRR2/3 on 40x)
7860021220SAndre Przywara  * ESR
7960021220SAndre Przywara  * DEAR
8060021220SAndre Przywara  * MCSR
8160021220SAndre Przywara  * TSR
8260021220SAndre Przywara  * TCR
8360021220SAndre Przywara  * DEC
8460021220SAndre Przywara  * TB
8560021220SAndre Przywara  * VRSAVE (USPRG0)
8660021220SAndre Przywara  */
8760021220SAndre Przywara #define KVM_SREGS_E_BASE		(1 << 0)
8860021220SAndre Przywara 
8960021220SAndre Przywara /*
9060021220SAndre Przywara  * KVM_SREGS_E_ARCH206 contains:
9160021220SAndre Przywara  *
9260021220SAndre Przywara  * PIR
9360021220SAndre Przywara  * MCSRR0/1
9460021220SAndre Przywara  * DECAR
9560021220SAndre Przywara  * IVPR
9660021220SAndre Przywara  */
9760021220SAndre Przywara #define KVM_SREGS_E_ARCH206		(1 << 1)
9860021220SAndre Przywara 
9960021220SAndre Przywara /*
10060021220SAndre Przywara  * Contains EPCR, plus the upper half of 64-bit registers
10160021220SAndre Przywara  * that are 32-bit on 32-bit implementations.
10260021220SAndre Przywara  */
10360021220SAndre Przywara #define KVM_SREGS_E_64			(1 << 2)
10460021220SAndre Przywara 
10560021220SAndre Przywara #define KVM_SREGS_E_SPRG8		(1 << 3)
10660021220SAndre Przywara #define KVM_SREGS_E_MCIVPR		(1 << 4)
10760021220SAndre Przywara 
10860021220SAndre Przywara /*
10960021220SAndre Przywara  * IVORs are used -- contains IVOR0-15, plus additional IVORs
11060021220SAndre Przywara  * in combination with an appropriate feature bit.
11160021220SAndre Przywara  */
11260021220SAndre Przywara #define KVM_SREGS_E_IVOR		(1 << 5)
11360021220SAndre Przywara 
11460021220SAndre Przywara /*
11560021220SAndre Przywara  * Contains MAS0-4, MAS6-7, TLBnCFG, MMUCFG.
11660021220SAndre Przywara  * Also TLBnPS if MMUCFG[MAVN] = 1.
11760021220SAndre Przywara  */
11860021220SAndre Przywara #define KVM_SREGS_E_ARCH206_MMU		(1 << 6)
11960021220SAndre Przywara 
12060021220SAndre Przywara /* DBSR, DBCR, IAC, DAC, DVC */
12160021220SAndre Przywara #define KVM_SREGS_E_DEBUG		(1 << 7)
12260021220SAndre Przywara 
12360021220SAndre Przywara /* Enhanced debug -- DSRR0/1, SPRG9 */
12460021220SAndre Przywara #define KVM_SREGS_E_ED			(1 << 8)
12560021220SAndre Przywara 
12660021220SAndre Przywara /* Embedded Floating Point (SPE) -- IVOR32-34 if KVM_SREGS_E_IVOR */
12760021220SAndre Przywara #define KVM_SREGS_E_SPE			(1 << 9)
12860021220SAndre Przywara 
12960021220SAndre Przywara /*
13060021220SAndre Przywara  * DEPRECATED! USE ONE_REG FOR THIS ONE!
13160021220SAndre Przywara  * External Proxy (EXP) -- EPR
13260021220SAndre Przywara  */
13360021220SAndre Przywara #define KVM_SREGS_EXP			(1 << 10)
13460021220SAndre Przywara 
13560021220SAndre Przywara /* External PID (E.PD) -- EPSC/EPLC */
13660021220SAndre Przywara #define KVM_SREGS_E_PD			(1 << 11)
13760021220SAndre Przywara 
13860021220SAndre Przywara /* Processor Control (E.PC) -- IVOR36-37 if KVM_SREGS_E_IVOR */
13960021220SAndre Przywara #define KVM_SREGS_E_PC			(1 << 12)
14060021220SAndre Przywara 
14160021220SAndre Przywara /* Page table (E.PT) -- EPTCFG */
14260021220SAndre Przywara #define KVM_SREGS_E_PT			(1 << 13)
14360021220SAndre Przywara 
14460021220SAndre Przywara /* Embedded Performance Monitor (E.PM) -- IVOR35 if KVM_SREGS_E_IVOR */
14560021220SAndre Przywara #define KVM_SREGS_E_PM			(1 << 14)
14660021220SAndre Przywara 
14760021220SAndre Przywara /*
14860021220SAndre Przywara  * Special updates:
14960021220SAndre Przywara  *
15060021220SAndre Przywara  * Some registers may change even while a vcpu is not running.
15160021220SAndre Przywara  * To avoid losing these changes, by default these registers are
15260021220SAndre Przywara  * not updated by KVM_SET_SREGS.  To force an update, set the bit
15360021220SAndre Przywara  * in u.e.update_special corresponding to the register to be updated.
15460021220SAndre Przywara  *
15560021220SAndre Przywara  * The update_special field is zero on return from KVM_GET_SREGS.
15660021220SAndre Przywara  *
15760021220SAndre Przywara  * When restoring a checkpoint, the caller can set update_special
15860021220SAndre Przywara  * to 0xffffffff to ensure that everything is restored, even new features
15960021220SAndre Przywara  * that the caller doesn't know about.
16060021220SAndre Przywara  */
16160021220SAndre Przywara #define KVM_SREGS_E_UPDATE_MCSR		(1 << 0)
16260021220SAndre Przywara #define KVM_SREGS_E_UPDATE_TSR		(1 << 1)
16360021220SAndre Przywara #define KVM_SREGS_E_UPDATE_DEC		(1 << 2)
16460021220SAndre Przywara #define KVM_SREGS_E_UPDATE_DBSR		(1 << 3)
16560021220SAndre Przywara 
16660021220SAndre Przywara /*
16760021220SAndre Przywara  * In KVM_SET_SREGS, reserved/pad fields must be left untouched from a
16860021220SAndre Przywara  * previous KVM_GET_REGS.
16960021220SAndre Przywara  *
17060021220SAndre Przywara  * Unless otherwise indicated, setting any register with KVM_SET_SREGS
17160021220SAndre Przywara  * directly sets its value.  It does not trigger any special semantics such
17260021220SAndre Przywara  * as write-one-to-clear.  Calling KVM_SET_SREGS on an unmodified struct
17360021220SAndre Przywara  * just received from KVM_GET_SREGS is always a no-op.
17460021220SAndre Przywara  */
17560021220SAndre Przywara struct kvm_sregs {
17660021220SAndre Przywara 	__u32 pvr;
17760021220SAndre Przywara 	union {
17860021220SAndre Przywara 		struct {
17960021220SAndre Przywara 			__u64 sdr1;
18060021220SAndre Przywara 			struct {
18160021220SAndre Przywara 				struct {
18260021220SAndre Przywara 					__u64 slbe;
18360021220SAndre Przywara 					__u64 slbv;
18460021220SAndre Przywara 				} slb[64];
18560021220SAndre Przywara 			} ppc64;
18660021220SAndre Przywara 			struct {
18760021220SAndre Przywara 				__u32 sr[16];
18860021220SAndre Przywara 				__u64 ibat[8];
18960021220SAndre Przywara 				__u64 dbat[8];
19060021220SAndre Przywara 			} ppc32;
19160021220SAndre Przywara 		} s;
19260021220SAndre Przywara 		struct {
19360021220SAndre Przywara 			union {
19460021220SAndre Przywara 				struct { /* KVM_SREGS_E_IMPL_FSL */
19560021220SAndre Przywara 					__u32 features; /* KVM_SREGS_E_FSL_ */
19660021220SAndre Przywara 					__u32 svr;
19760021220SAndre Przywara 					__u64 mcar;
19860021220SAndre Przywara 					__u32 hid0;
19960021220SAndre Przywara 
20060021220SAndre Przywara 					/* KVM_SREGS_E_FSL_PIDn */
20160021220SAndre Przywara 					__u32 pid1, pid2;
20260021220SAndre Przywara 				} fsl;
20360021220SAndre Przywara 				__u8 pad[256];
20460021220SAndre Przywara 			} impl;
20560021220SAndre Przywara 
20660021220SAndre Przywara 			__u32 features; /* KVM_SREGS_E_ */
20760021220SAndre Przywara 			__u32 impl_id;	/* KVM_SREGS_E_IMPL_ */
20860021220SAndre Przywara 			__u32 update_special; /* KVM_SREGS_E_UPDATE_ */
20960021220SAndre Przywara 			__u32 pir;	/* read-only */
21060021220SAndre Przywara 			__u64 sprg8;
21160021220SAndre Przywara 			__u64 sprg9;	/* E.ED */
21260021220SAndre Przywara 			__u64 csrr0;
21360021220SAndre Przywara 			__u64 dsrr0;	/* E.ED */
21460021220SAndre Przywara 			__u64 mcsrr0;
21560021220SAndre Przywara 			__u32 csrr1;
21660021220SAndre Przywara 			__u32 dsrr1;	/* E.ED */
21760021220SAndre Przywara 			__u32 mcsrr1;
21860021220SAndre Przywara 			__u32 esr;
21960021220SAndre Przywara 			__u64 dear;
22060021220SAndre Przywara 			__u64 ivpr;
22160021220SAndre Przywara 			__u64 mcivpr;
22260021220SAndre Przywara 			__u64 mcsr;	/* KVM_SREGS_E_UPDATE_MCSR */
22360021220SAndre Przywara 
22460021220SAndre Przywara 			__u32 tsr;	/* KVM_SREGS_E_UPDATE_TSR */
22560021220SAndre Przywara 			__u32 tcr;
22660021220SAndre Przywara 			__u32 decar;
22760021220SAndre Przywara 			__u32 dec;	/* KVM_SREGS_E_UPDATE_DEC */
22860021220SAndre Przywara 
22960021220SAndre Przywara 			/*
23060021220SAndre Przywara 			 * Userspace can read TB directly, but the
23160021220SAndre Przywara 			 * value reported here is consistent with "dec".
23260021220SAndre Przywara 			 *
23360021220SAndre Przywara 			 * Read-only.
23460021220SAndre Przywara 			 */
23560021220SAndre Przywara 			__u64 tb;
23660021220SAndre Przywara 
23760021220SAndre Przywara 			__u32 dbsr;	/* KVM_SREGS_E_UPDATE_DBSR */
23860021220SAndre Przywara 			__u32 dbcr[3];
23960021220SAndre Przywara 			/*
24060021220SAndre Przywara 			 * iac/dac registers are 64bit wide, while this API
24160021220SAndre Przywara 			 * interface provides only lower 32 bits on 64 bit
24260021220SAndre Przywara 			 * processors. ONE_REG interface is added for 64bit
24360021220SAndre Przywara 			 * iac/dac registers.
24460021220SAndre Przywara 			 */
24560021220SAndre Przywara 			__u32 iac[4];
24660021220SAndre Przywara 			__u32 dac[2];
24760021220SAndre Przywara 			__u32 dvc[2];
24860021220SAndre Przywara 			__u8 num_iac;	/* read-only */
24960021220SAndre Przywara 			__u8 num_dac;	/* read-only */
25060021220SAndre Przywara 			__u8 num_dvc;	/* read-only */
25160021220SAndre Przywara 			__u8 pad;
25260021220SAndre Przywara 
25360021220SAndre Przywara 			__u32 epr;	/* EXP */
25460021220SAndre Przywara 			__u32 vrsave;	/* a.k.a. USPRG0 */
25560021220SAndre Przywara 			__u32 epcr;	/* KVM_SREGS_E_64 */
25660021220SAndre Przywara 
25760021220SAndre Przywara 			__u32 mas0;
25860021220SAndre Przywara 			__u32 mas1;
25960021220SAndre Przywara 			__u64 mas2;
26060021220SAndre Przywara 			__u64 mas7_3;
26160021220SAndre Przywara 			__u32 mas4;
26260021220SAndre Przywara 			__u32 mas6;
26360021220SAndre Przywara 
26460021220SAndre Przywara 			__u32 ivor_low[16]; /* IVOR0-15 */
26560021220SAndre Przywara 			__u32 ivor_high[18]; /* IVOR32+, plus room to expand */
26660021220SAndre Przywara 
26760021220SAndre Przywara 			__u32 mmucfg;	/* read-only */
26860021220SAndre Przywara 			__u32 eptcfg;	/* E.PT, read-only */
26960021220SAndre Przywara 			__u32 tlbcfg[4];/* read-only */
27060021220SAndre Przywara 			__u32 tlbps[4]; /* read-only */
27160021220SAndre Przywara 
27260021220SAndre Przywara 			__u32 eplc, epsc; /* E.PD */
27360021220SAndre Przywara 		} e;
27460021220SAndre Przywara 		__u8 pad[1020];
27560021220SAndre Przywara 	} u;
27660021220SAndre Przywara };
27760021220SAndre Przywara 
27860021220SAndre Przywara struct kvm_fpu {
27960021220SAndre Przywara 	__u64 fpr[32];
28060021220SAndre Przywara };
28160021220SAndre Przywara 
28260021220SAndre Przywara /*
28360021220SAndre Przywara  * Defines for h/w breakpoint, watchpoint (read, write or both) and
28460021220SAndre Przywara  * software breakpoint.
28560021220SAndre Przywara  * These are used as "type" in KVM_SET_GUEST_DEBUG ioctl and "status"
28660021220SAndre Przywara  * for KVM_DEBUG_EXIT.
28760021220SAndre Przywara  */
28860021220SAndre Przywara #define KVMPPC_DEBUG_NONE		0x0
28960021220SAndre Przywara #define KVMPPC_DEBUG_BREAKPOINT		(1UL << 1)
29060021220SAndre Przywara #define KVMPPC_DEBUG_WATCH_WRITE	(1UL << 2)
29160021220SAndre Przywara #define KVMPPC_DEBUG_WATCH_READ		(1UL << 3)
29260021220SAndre Przywara struct kvm_debug_exit_arch {
29360021220SAndre Przywara 	__u64 address;
29460021220SAndre Przywara 	/*
29560021220SAndre Przywara 	 * exiting to userspace because of h/w breakpoint, watchpoint
29660021220SAndre Przywara 	 * (read, write or both) and software breakpoint.
29760021220SAndre Przywara 	 */
29860021220SAndre Przywara 	__u32 status;
29960021220SAndre Przywara 	__u32 reserved;
30060021220SAndre Przywara };
30160021220SAndre Przywara 
30260021220SAndre Przywara /* for KVM_SET_GUEST_DEBUG */
30360021220SAndre Przywara struct kvm_guest_debug_arch {
30460021220SAndre Przywara 	struct {
30560021220SAndre Przywara 		/* H/W breakpoint/watchpoint address */
30660021220SAndre Przywara 		__u64 addr;
30760021220SAndre Przywara 		/*
30860021220SAndre Przywara 		 * Type denotes h/w breakpoint, read watchpoint, write
30960021220SAndre Przywara 		 * watchpoint or watchpoint (both read and write).
31060021220SAndre Przywara 		 */
31160021220SAndre Przywara 		__u32 type;
31260021220SAndre Przywara 		__u32 reserved;
31360021220SAndre Przywara 	} bp[16];
31460021220SAndre Przywara };
31560021220SAndre Przywara 
31660021220SAndre Przywara /* Debug related defines */
31760021220SAndre Przywara /*
31860021220SAndre Przywara  * kvm_guest_debug->control is a 32 bit field. The lower 16 bits are generic
31960021220SAndre Przywara  * and upper 16 bits are architecture specific. Architecture specific defines
32060021220SAndre Przywara  * that ioctl is for setting hardware breakpoint or software breakpoint.
32160021220SAndre Przywara  */
32260021220SAndre Przywara #define KVM_GUESTDBG_USE_SW_BP		0x00010000
32360021220SAndre Przywara #define KVM_GUESTDBG_USE_HW_BP		0x00020000
32460021220SAndre Przywara 
32560021220SAndre Przywara /* definition of registers in kvm_run */
32660021220SAndre Przywara struct kvm_sync_regs {
32760021220SAndre Przywara };
32860021220SAndre Przywara 
32960021220SAndre Przywara #define KVM_INTERRUPT_SET	-1U
33060021220SAndre Przywara #define KVM_INTERRUPT_UNSET	-2U
33160021220SAndre Przywara #define KVM_INTERRUPT_SET_LEVEL	-3U
33260021220SAndre Przywara 
33360021220SAndre Przywara #define KVM_CPU_440		1
33460021220SAndre Przywara #define KVM_CPU_E500V2		2
33560021220SAndre Przywara #define KVM_CPU_3S_32		3
33660021220SAndre Przywara #define KVM_CPU_3S_64		4
33760021220SAndre Przywara #define KVM_CPU_E500MC		5
33860021220SAndre Przywara 
33960021220SAndre Przywara /* for KVM_CAP_SPAPR_TCE */
34060021220SAndre Przywara struct kvm_create_spapr_tce {
34160021220SAndre Przywara 	__u64 liobn;
34260021220SAndre Przywara 	__u32 window_size;
34360021220SAndre Przywara };
34460021220SAndre Przywara 
345b37ed70eSAndre Przywara /* for KVM_CAP_SPAPR_TCE_64 */
346b37ed70eSAndre Przywara struct kvm_create_spapr_tce_64 {
347b37ed70eSAndre Przywara 	__u64 liobn;
348b37ed70eSAndre Przywara 	__u32 page_shift;
349b37ed70eSAndre Przywara 	__u32 flags;
350b37ed70eSAndre Przywara 	__u64 offset;	/* in pages */
351b37ed70eSAndre Przywara 	__u64 size;	/* in pages */
352b37ed70eSAndre Przywara };
353b37ed70eSAndre Przywara 
35460021220SAndre Przywara /* for KVM_ALLOCATE_RMA */
35560021220SAndre Przywara struct kvm_allocate_rma {
35660021220SAndre Przywara 	__u64 rma_size;
35760021220SAndre Przywara };
35860021220SAndre Przywara 
35960021220SAndre Przywara /* for KVM_CAP_PPC_RTAS */
36060021220SAndre Przywara struct kvm_rtas_token_args {
36160021220SAndre Przywara 	char name[120];
36260021220SAndre Przywara 	__u64 token;	/* Use a token of 0 to undefine a mapping */
36360021220SAndre Przywara };
36460021220SAndre Przywara 
36560021220SAndre Przywara struct kvm_book3e_206_tlb_entry {
36660021220SAndre Przywara 	__u32 mas8;
36760021220SAndre Przywara 	__u32 mas1;
36860021220SAndre Przywara 	__u64 mas2;
36960021220SAndre Przywara 	__u64 mas7_3;
37060021220SAndre Przywara };
37160021220SAndre Przywara 
37260021220SAndre Przywara struct kvm_book3e_206_tlb_params {
37360021220SAndre Przywara 	/*
37460021220SAndre Przywara 	 * For mmu types KVM_MMU_FSL_BOOKE_NOHV and KVM_MMU_FSL_BOOKE_HV:
37560021220SAndre Przywara 	 *
37660021220SAndre Przywara 	 * - The number of ways of TLB0 must be a power of two between 2 and
37760021220SAndre Przywara 	 *   16.
37860021220SAndre Przywara 	 * - TLB1 must be fully associative.
37960021220SAndre Przywara 	 * - The size of TLB0 must be a multiple of the number of ways, and
38060021220SAndre Przywara 	 *   the number of sets must be a power of two.
38160021220SAndre Przywara 	 * - The size of TLB1 may not exceed 64 entries.
38260021220SAndre Przywara 	 * - TLB0 supports 4 KiB pages.
38360021220SAndre Przywara 	 * - The page sizes supported by TLB1 are as indicated by
38460021220SAndre Przywara 	 *   TLB1CFG (if MMUCFG[MAVN] = 0) or TLB1PS (if MMUCFG[MAVN] = 1)
38560021220SAndre Przywara 	 *   as returned by KVM_GET_SREGS.
38660021220SAndre Przywara 	 * - TLB2 and TLB3 are reserved, and their entries in tlb_sizes[]
38760021220SAndre Przywara 	 *   and tlb_ways[] must be zero.
38860021220SAndre Przywara 	 *
38960021220SAndre Przywara 	 * tlb_ways[n] = tlb_sizes[n] means the array is fully associative.
39060021220SAndre Przywara 	 *
39160021220SAndre Przywara 	 * KVM will adjust TLBnCFG based on the sizes configured here,
39260021220SAndre Przywara 	 * though arrays greater than 2048 entries will have TLBnCFG[NENTRY]
39360021220SAndre Przywara 	 * set to zero.
39460021220SAndre Przywara 	 */
39560021220SAndre Przywara 	__u32 tlb_sizes[4];
39660021220SAndre Przywara 	__u32 tlb_ways[4];
39760021220SAndre Przywara 	__u32 reserved[8];
39860021220SAndre Przywara };
39960021220SAndre Przywara 
40060021220SAndre Przywara /* For KVM_PPC_GET_HTAB_FD */
40160021220SAndre Przywara struct kvm_get_htab_fd {
40260021220SAndre Przywara 	__u64	flags;
40360021220SAndre Przywara 	__u64	start_index;
40460021220SAndre Przywara 	__u64	reserved[2];
40560021220SAndre Przywara };
40660021220SAndre Przywara 
40760021220SAndre Przywara /* Values for kvm_get_htab_fd.flags */
40860021220SAndre Przywara #define KVM_GET_HTAB_BOLTED_ONLY	((__u64)0x1)
40960021220SAndre Przywara #define KVM_GET_HTAB_WRITE		((__u64)0x2)
41060021220SAndre Przywara 
41160021220SAndre Przywara /*
41260021220SAndre Przywara  * Data read on the file descriptor is formatted as a series of
41360021220SAndre Przywara  * records, each consisting of a header followed by a series of
41460021220SAndre Przywara  * `n_valid' HPTEs (16 bytes each), which are all valid.  Following
41560021220SAndre Przywara  * those valid HPTEs there are `n_invalid' invalid HPTEs, which
41660021220SAndre Przywara  * are not represented explicitly in the stream.  The same format
41760021220SAndre Przywara  * is used for writing.
41860021220SAndre Przywara  */
41960021220SAndre Przywara struct kvm_get_htab_header {
42060021220SAndre Przywara 	__u32	index;
42160021220SAndre Przywara 	__u16	n_valid;
42260021220SAndre Przywara 	__u16	n_invalid;
42360021220SAndre Przywara };
42460021220SAndre Przywara 
425764dfba1SAndre Przywara /* For KVM_PPC_CONFIGURE_V3_MMU */
426764dfba1SAndre Przywara struct kvm_ppc_mmuv3_cfg {
427764dfba1SAndre Przywara 	__u64	flags;
428764dfba1SAndre Przywara 	__u64	process_table;	/* second doubleword of partition table entry */
429764dfba1SAndre Przywara };
430764dfba1SAndre Przywara 
431764dfba1SAndre Przywara /* Flag values for KVM_PPC_CONFIGURE_V3_MMU */
432764dfba1SAndre Przywara #define KVM_PPC_MMUV3_RADIX	1	/* 1 = radix mode, 0 = HPT */
433764dfba1SAndre Przywara #define KVM_PPC_MMUV3_GTSE	2	/* global translation shootdown enb. */
434764dfba1SAndre Przywara 
435764dfba1SAndre Przywara /* For KVM_PPC_GET_RMMU_INFO */
436764dfba1SAndre Przywara struct kvm_ppc_rmmu_info {
437764dfba1SAndre Przywara 	struct kvm_ppc_radix_geom {
438764dfba1SAndre Przywara 		__u8	page_shift;
439764dfba1SAndre Przywara 		__u8	level_bits[4];
440764dfba1SAndre Przywara 		__u8	pad[3];
441764dfba1SAndre Przywara 	}	geometries[8];
442764dfba1SAndre Przywara 	__u32	ap_encodings[8];
443764dfba1SAndre Przywara };
444764dfba1SAndre Przywara 
4451bbe92f5SDave Martin /* For KVM_PPC_GET_CPU_CHAR */
4461bbe92f5SDave Martin struct kvm_ppc_cpu_char {
4471bbe92f5SDave Martin 	__u64	character;		/* characteristics of the CPU */
4481bbe92f5SDave Martin 	__u64	behaviour;		/* recommended software behaviour */
4491bbe92f5SDave Martin 	__u64	character_mask;		/* valid bits in character */
4501bbe92f5SDave Martin 	__u64	behaviour_mask;		/* valid bits in behaviour */
4511bbe92f5SDave Martin };
4521bbe92f5SDave Martin 
4531bbe92f5SDave Martin /*
4541bbe92f5SDave Martin  * Values for character and character_mask.
4551bbe92f5SDave Martin  * These are identical to the values used by H_GET_CPU_CHARACTERISTICS.
4561bbe92f5SDave Martin  */
4571bbe92f5SDave Martin #define KVM_PPC_CPU_CHAR_SPEC_BAR_ORI31		(1ULL << 63)
4581bbe92f5SDave Martin #define KVM_PPC_CPU_CHAR_BCCTRL_SERIALISED	(1ULL << 62)
4591bbe92f5SDave Martin #define KVM_PPC_CPU_CHAR_L1D_FLUSH_ORI30	(1ULL << 61)
4601bbe92f5SDave Martin #define KVM_PPC_CPU_CHAR_L1D_FLUSH_TRIG2	(1ULL << 60)
4611bbe92f5SDave Martin #define KVM_PPC_CPU_CHAR_L1D_THREAD_PRIV	(1ULL << 59)
4621bbe92f5SDave Martin #define KVM_PPC_CPU_CHAR_BR_HINT_HONOURED	(1ULL << 58)
4631bbe92f5SDave Martin #define KVM_PPC_CPU_CHAR_MTTRIG_THR_RECONF	(1ULL << 57)
4641bbe92f5SDave Martin #define KVM_PPC_CPU_CHAR_COUNT_CACHE_DIS	(1ULL << 56)
46566b24a33SWill Deacon #define KVM_PPC_CPU_CHAR_BCCTR_FLUSH_ASSIST	(1ull << 54)
4661bbe92f5SDave Martin 
4671bbe92f5SDave Martin #define KVM_PPC_CPU_BEHAV_FAVOUR_SECURITY	(1ULL << 63)
4681bbe92f5SDave Martin #define KVM_PPC_CPU_BEHAV_L1D_FLUSH_PR		(1ULL << 62)
4691bbe92f5SDave Martin #define KVM_PPC_CPU_BEHAV_BNDS_CHK_SPEC_BAR	(1ULL << 61)
47066b24a33SWill Deacon #define KVM_PPC_CPU_BEHAV_FLUSH_COUNT_CACHE	(1ull << 58)
4711bbe92f5SDave Martin 
47260021220SAndre Przywara /* Per-vcpu XICS interrupt controller state */
47360021220SAndre Przywara #define KVM_REG_PPC_ICP_STATE	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8c)
47460021220SAndre Przywara 
47560021220SAndre Przywara #define  KVM_REG_PPC_ICP_CPPR_SHIFT	56	/* current proc priority */
47660021220SAndre Przywara #define  KVM_REG_PPC_ICP_CPPR_MASK	0xff
47760021220SAndre Przywara #define  KVM_REG_PPC_ICP_XISR_SHIFT	32	/* interrupt status field */
47860021220SAndre Przywara #define  KVM_REG_PPC_ICP_XISR_MASK	0xffffff
47960021220SAndre Przywara #define  KVM_REG_PPC_ICP_MFRR_SHIFT	24	/* pending IPI priority */
48060021220SAndre Przywara #define  KVM_REG_PPC_ICP_MFRR_MASK	0xff
48160021220SAndre Przywara #define  KVM_REG_PPC_ICP_PPRI_SHIFT	16	/* pending irq priority */
48260021220SAndre Przywara #define  KVM_REG_PPC_ICP_PPRI_MASK	0xff
48360021220SAndre Przywara 
48466b24a33SWill Deacon #define KVM_REG_PPC_VP_STATE	(KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x8d)
48566b24a33SWill Deacon 
48660021220SAndre Przywara /* Device control API: PPC-specific devices */
48760021220SAndre Przywara #define KVM_DEV_MPIC_GRP_MISC		1
48860021220SAndre Przywara #define   KVM_DEV_MPIC_BASE_ADDR	0	/* 64-bit */
48960021220SAndre Przywara 
49060021220SAndre Przywara #define KVM_DEV_MPIC_GRP_REGISTER	2	/* 32-bit */
49160021220SAndre Przywara #define KVM_DEV_MPIC_GRP_IRQ_ACTIVE	3	/* 32-bit */
49260021220SAndre Przywara 
49360021220SAndre Przywara /* One-Reg API: PPC-specific registers */
49460021220SAndre Przywara #define KVM_REG_PPC_HIOR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x1)
49560021220SAndre Przywara #define KVM_REG_PPC_IAC1	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x2)
49660021220SAndre Przywara #define KVM_REG_PPC_IAC2	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x3)
49760021220SAndre Przywara #define KVM_REG_PPC_IAC3	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x4)
49860021220SAndre Przywara #define KVM_REG_PPC_IAC4	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x5)
49960021220SAndre Przywara #define KVM_REG_PPC_DAC1	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x6)
50060021220SAndre Przywara #define KVM_REG_PPC_DAC2	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x7)
50160021220SAndre Przywara #define KVM_REG_PPC_DABR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8)
50260021220SAndre Przywara #define KVM_REG_PPC_DSCR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x9)
50360021220SAndre Przywara #define KVM_REG_PPC_PURR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa)
50460021220SAndre Przywara #define KVM_REG_PPC_SPURR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb)
50560021220SAndre Przywara #define KVM_REG_PPC_DAR		(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc)
50660021220SAndre Przywara #define KVM_REG_PPC_DSISR	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xd)
50760021220SAndre Przywara #define KVM_REG_PPC_AMR		(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xe)
50860021220SAndre Przywara #define KVM_REG_PPC_UAMOR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xf)
50960021220SAndre Przywara 
51060021220SAndre Przywara #define KVM_REG_PPC_MMCR0	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x10)
51160021220SAndre Przywara #define KVM_REG_PPC_MMCR1	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x11)
51260021220SAndre Przywara #define KVM_REG_PPC_MMCRA	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x12)
51360021220SAndre Przywara #define KVM_REG_PPC_MMCR2	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x13)
51460021220SAndre Przywara #define KVM_REG_PPC_MMCRS	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x14)
51560021220SAndre Przywara #define KVM_REG_PPC_SIAR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x15)
51660021220SAndre Przywara #define KVM_REG_PPC_SDAR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x16)
51760021220SAndre Przywara #define KVM_REG_PPC_SIER	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x17)
51860021220SAndre Przywara 
51960021220SAndre Przywara #define KVM_REG_PPC_PMC1	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x18)
52060021220SAndre Przywara #define KVM_REG_PPC_PMC2	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x19)
52160021220SAndre Przywara #define KVM_REG_PPC_PMC3	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1a)
52260021220SAndre Przywara #define KVM_REG_PPC_PMC4	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1b)
52360021220SAndre Przywara #define KVM_REG_PPC_PMC5	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1c)
52460021220SAndre Przywara #define KVM_REG_PPC_PMC6	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1d)
52560021220SAndre Przywara #define KVM_REG_PPC_PMC7	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1e)
52660021220SAndre Przywara #define KVM_REG_PPC_PMC8	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1f)
52760021220SAndre Przywara 
52860021220SAndre Przywara /* 32 floating-point registers */
52960021220SAndre Przywara #define KVM_REG_PPC_FPR0	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x20)
53060021220SAndre Przywara #define KVM_REG_PPC_FPR(n)	(KVM_REG_PPC_FPR0 + (n))
53160021220SAndre Przywara #define KVM_REG_PPC_FPR31	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x3f)
53260021220SAndre Przywara 
53360021220SAndre Przywara /* 32 VMX/Altivec vector registers */
53460021220SAndre Przywara #define KVM_REG_PPC_VR0		(KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x40)
53560021220SAndre Przywara #define KVM_REG_PPC_VR(n)	(KVM_REG_PPC_VR0 + (n))
53660021220SAndre Przywara #define KVM_REG_PPC_VR31	(KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x5f)
53760021220SAndre Przywara 
53860021220SAndre Przywara /* 32 double-width FP registers for VSX */
53960021220SAndre Przywara /* High-order halves overlap with FP regs */
54060021220SAndre Przywara #define KVM_REG_PPC_VSR0	(KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x60)
54160021220SAndre Przywara #define KVM_REG_PPC_VSR(n)	(KVM_REG_PPC_VSR0 + (n))
54260021220SAndre Przywara #define KVM_REG_PPC_VSR31	(KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x7f)
54360021220SAndre Przywara 
54460021220SAndre Przywara /* FP and vector status/control registers */
54560021220SAndre Przywara #define KVM_REG_PPC_FPSCR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x80)
54660021220SAndre Przywara /*
54760021220SAndre Przywara  * VSCR register is documented as a 32-bit register in the ISA, but it can
54860021220SAndre Przywara  * only be accesses via a vector register. Expose VSCR as a 32-bit register
54960021220SAndre Przywara  * even though the kernel represents it as a 128-bit vector.
55060021220SAndre Przywara  */
55160021220SAndre Przywara #define KVM_REG_PPC_VSCR	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x81)
55260021220SAndre Przywara 
55360021220SAndre Przywara /* Virtual processor areas */
55460021220SAndre Przywara /* For SLB & DTL, address in high (first) half, length in low half */
55560021220SAndre Przywara #define KVM_REG_PPC_VPA_ADDR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x82)
55660021220SAndre Przywara #define KVM_REG_PPC_VPA_SLB	(KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x83)
55760021220SAndre Przywara #define KVM_REG_PPC_VPA_DTL	(KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x84)
55860021220SAndre Przywara 
55960021220SAndre Przywara #define KVM_REG_PPC_EPCR	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x85)
56060021220SAndre Przywara #define KVM_REG_PPC_EPR		(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x86)
56160021220SAndre Przywara 
56260021220SAndre Przywara /* Timer Status Register OR/CLEAR interface */
56360021220SAndre Przywara #define KVM_REG_PPC_OR_TSR	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x87)
56460021220SAndre Przywara #define KVM_REG_PPC_CLEAR_TSR	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x88)
56560021220SAndre Przywara #define KVM_REG_PPC_TCR		(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x89)
56660021220SAndre Przywara #define KVM_REG_PPC_TSR		(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8a)
56760021220SAndre Przywara 
56860021220SAndre Przywara /* Debugging: Special instruction for software breakpoint */
56960021220SAndre Przywara #define KVM_REG_PPC_DEBUG_INST	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8b)
57060021220SAndre Przywara 
57160021220SAndre Przywara /* MMU registers */
57260021220SAndre Przywara #define KVM_REG_PPC_MAS0	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8c)
57360021220SAndre Przywara #define KVM_REG_PPC_MAS1	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8d)
57460021220SAndre Przywara #define KVM_REG_PPC_MAS2	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8e)
57560021220SAndre Przywara #define KVM_REG_PPC_MAS7_3	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8f)
57660021220SAndre Przywara #define KVM_REG_PPC_MAS4	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x90)
57760021220SAndre Przywara #define KVM_REG_PPC_MAS6	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x91)
57860021220SAndre Przywara #define KVM_REG_PPC_MMUCFG	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x92)
57960021220SAndre Przywara /*
58060021220SAndre Przywara  * TLBnCFG fields TLBnCFG_N_ENTRY and TLBnCFG_ASSOC can be changed only using
58160021220SAndre Przywara  * KVM_CAP_SW_TLB ioctl
58260021220SAndre Przywara  */
58360021220SAndre Przywara #define KVM_REG_PPC_TLB0CFG	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x93)
58460021220SAndre Przywara #define KVM_REG_PPC_TLB1CFG	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x94)
58560021220SAndre Przywara #define KVM_REG_PPC_TLB2CFG	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x95)
58660021220SAndre Przywara #define KVM_REG_PPC_TLB3CFG	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x96)
58760021220SAndre Przywara #define KVM_REG_PPC_TLB0PS	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x97)
58860021220SAndre Przywara #define KVM_REG_PPC_TLB1PS	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x98)
58960021220SAndre Przywara #define KVM_REG_PPC_TLB2PS	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x99)
59060021220SAndre Przywara #define KVM_REG_PPC_TLB3PS	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x9a)
59160021220SAndre Przywara #define KVM_REG_PPC_EPTCFG	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x9b)
59260021220SAndre Przywara 
59360021220SAndre Przywara /* Timebase offset */
59460021220SAndre Przywara #define KVM_REG_PPC_TB_OFFSET	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x9c)
59560021220SAndre Przywara 
59660021220SAndre Przywara /* POWER8 registers */
59760021220SAndre Przywara #define KVM_REG_PPC_SPMC1	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x9d)
59860021220SAndre Przywara #define KVM_REG_PPC_SPMC2	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x9e)
59960021220SAndre Przywara #define KVM_REG_PPC_IAMR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x9f)
60060021220SAndre Przywara #define KVM_REG_PPC_TFHAR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa0)
60160021220SAndre Przywara #define KVM_REG_PPC_TFIAR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa1)
60260021220SAndre Przywara #define KVM_REG_PPC_TEXASR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa2)
60360021220SAndre Przywara #define KVM_REG_PPC_FSCR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa3)
60460021220SAndre Przywara #define KVM_REG_PPC_PSPB	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xa4)
60560021220SAndre Przywara #define KVM_REG_PPC_EBBHR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa5)
60660021220SAndre Przywara #define KVM_REG_PPC_EBBRR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa6)
60760021220SAndre Przywara #define KVM_REG_PPC_BESCR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa7)
60860021220SAndre Przywara #define KVM_REG_PPC_TAR		(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa8)
60960021220SAndre Przywara #define KVM_REG_PPC_DPDES	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa9)
61060021220SAndre Przywara #define KVM_REG_PPC_DAWR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xaa)
61160021220SAndre Przywara #define KVM_REG_PPC_DAWRX	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xab)
61260021220SAndre Przywara #define KVM_REG_PPC_CIABR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xac)
61360021220SAndre Przywara #define KVM_REG_PPC_IC		(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xad)
61460021220SAndre Przywara #define KVM_REG_PPC_VTB		(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xae)
61560021220SAndre Przywara #define KVM_REG_PPC_CSIGR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xaf)
61660021220SAndre Przywara #define KVM_REG_PPC_TACR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb0)
61760021220SAndre Przywara #define KVM_REG_PPC_TCSCR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb1)
61860021220SAndre Przywara #define KVM_REG_PPC_PID		(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb2)
61960021220SAndre Przywara #define KVM_REG_PPC_ACOP	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb3)
62060021220SAndre Przywara 
62160021220SAndre Przywara #define KVM_REG_PPC_VRSAVE	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb4)
62260021220SAndre Przywara #define KVM_REG_PPC_LPCR	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb5)
62360021220SAndre Przywara #define KVM_REG_PPC_LPCR_64	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb5)
62460021220SAndre Przywara #define KVM_REG_PPC_PPR		(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb6)
62560021220SAndre Przywara 
62660021220SAndre Przywara /* Architecture compatibility level */
62760021220SAndre Przywara #define KVM_REG_PPC_ARCH_COMPAT	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb7)
62860021220SAndre Przywara 
62960021220SAndre Przywara #define KVM_REG_PPC_DABRX	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb8)
63060021220SAndre Przywara #define KVM_REG_PPC_WORT	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb9)
63160021220SAndre Przywara #define KVM_REG_PPC_SPRG9	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xba)
63260021220SAndre Przywara #define KVM_REG_PPC_DBSR	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xbb)
63360021220SAndre Przywara 
634764dfba1SAndre Przywara /* POWER9 registers */
635764dfba1SAndre Przywara #define KVM_REG_PPC_TIDR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbc)
636764dfba1SAndre Przywara #define KVM_REG_PPC_PSSCR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbd)
637764dfba1SAndre Przywara 
6381bbe92f5SDave Martin #define KVM_REG_PPC_DEC_EXPIRY	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbe)
6391bbe92f5SDave Martin #define KVM_REG_PPC_ONLINE	(KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xbf)
6401bbe92f5SDave Martin #define KVM_REG_PPC_PTCR	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc0)
6411bbe92f5SDave Martin 
6425968b5ffSAnup Patel /* POWER10 registers */
6435968b5ffSAnup Patel #define KVM_REG_PPC_MMCR3	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc1)
6445968b5ffSAnup Patel #define KVM_REG_PPC_SIER2	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc2)
6455968b5ffSAnup Patel #define KVM_REG_PPC_SIER3	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc3)
6465968b5ffSAnup Patel #define KVM_REG_PPC_DAWR1	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc4)
6475968b5ffSAnup Patel #define KVM_REG_PPC_DAWRX1	(KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc5)
6485968b5ffSAnup Patel 
64960021220SAndre Przywara /* Transactional Memory checkpointed state:
65060021220SAndre Przywara  * This is all GPRs, all VSX regs and a subset of SPRs
65160021220SAndre Przywara  */
65260021220SAndre Przywara #define KVM_REG_PPC_TM		(KVM_REG_PPC | 0x80000000)
65360021220SAndre Przywara /* TM GPRs */
65460021220SAndre Przywara #define KVM_REG_PPC_TM_GPR0	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0)
65560021220SAndre Przywara #define KVM_REG_PPC_TM_GPR(n)	(KVM_REG_PPC_TM_GPR0 + (n))
65660021220SAndre Przywara #define KVM_REG_PPC_TM_GPR31	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x1f)
65760021220SAndre Przywara /* TM VSX */
65860021220SAndre Przywara #define KVM_REG_PPC_TM_VSR0	(KVM_REG_PPC_TM | KVM_REG_SIZE_U128 | 0x20)
65960021220SAndre Przywara #define KVM_REG_PPC_TM_VSR(n)	(KVM_REG_PPC_TM_VSR0 + (n))
66060021220SAndre Przywara #define KVM_REG_PPC_TM_VSR63	(KVM_REG_PPC_TM | KVM_REG_SIZE_U128 | 0x5f)
66160021220SAndre Przywara /* TM SPRS */
66260021220SAndre Przywara #define KVM_REG_PPC_TM_CR	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x60)
66360021220SAndre Przywara #define KVM_REG_PPC_TM_LR	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x61)
66460021220SAndre Przywara #define KVM_REG_PPC_TM_CTR	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x62)
66560021220SAndre Przywara #define KVM_REG_PPC_TM_FPSCR	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x63)
66660021220SAndre Przywara #define KVM_REG_PPC_TM_AMR	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x64)
66760021220SAndre Przywara #define KVM_REG_PPC_TM_PPR	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x65)
66860021220SAndre Przywara #define KVM_REG_PPC_TM_VRSAVE	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x66)
66960021220SAndre Przywara #define KVM_REG_PPC_TM_VSCR	(KVM_REG_PPC_TM | KVM_REG_SIZE_U32 | 0x67)
67060021220SAndre Przywara #define KVM_REG_PPC_TM_DSCR	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x68)
67160021220SAndre Przywara #define KVM_REG_PPC_TM_TAR	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x69)
672764dfba1SAndre Przywara #define KVM_REG_PPC_TM_XER	(KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x6a)
67360021220SAndre Przywara 
67460021220SAndre Przywara /* PPC64 eXternal Interrupt Controller Specification */
67560021220SAndre Przywara #define KVM_DEV_XICS_GRP_SOURCES	1	/* 64-bit source attributes */
6765968b5ffSAnup Patel #define KVM_DEV_XICS_GRP_CTRL		2
6775968b5ffSAnup Patel #define   KVM_DEV_XICS_NR_SERVERS	1
67860021220SAndre Przywara 
67960021220SAndre Przywara /* Layout of 64-bit source attribute values */
68060021220SAndre Przywara #define  KVM_XICS_DESTINATION_SHIFT	0
68160021220SAndre Przywara #define  KVM_XICS_DESTINATION_MASK	0xffffffffULL
68260021220SAndre Przywara #define  KVM_XICS_PRIORITY_SHIFT	32
68360021220SAndre Przywara #define  KVM_XICS_PRIORITY_MASK		0xff
68460021220SAndre Przywara #define  KVM_XICS_LEVEL_SENSITIVE	(1ULL << 40)
68560021220SAndre Przywara #define  KVM_XICS_MASKED		(1ULL << 41)
68660021220SAndre Przywara #define  KVM_XICS_PENDING		(1ULL << 42)
687764dfba1SAndre Przywara #define  KVM_XICS_PRESENTED		(1ULL << 43)
688764dfba1SAndre Przywara #define  KVM_XICS_QUEUED		(1ULL << 44)
68960021220SAndre Przywara 
69066b24a33SWill Deacon /* POWER9 XIVE Native Interrupt Controller */
69166b24a33SWill Deacon #define KVM_DEV_XIVE_GRP_CTRL		1
69266b24a33SWill Deacon #define   KVM_DEV_XIVE_RESET		1
69366b24a33SWill Deacon #define   KVM_DEV_XIVE_EQ_SYNC		2
6945968b5ffSAnup Patel #define   KVM_DEV_XIVE_NR_SERVERS	3
69566b24a33SWill Deacon #define KVM_DEV_XIVE_GRP_SOURCE		2	/* 64-bit source identifier */
69666b24a33SWill Deacon #define KVM_DEV_XIVE_GRP_SOURCE_CONFIG	3	/* 64-bit source identifier */
69766b24a33SWill Deacon #define KVM_DEV_XIVE_GRP_EQ_CONFIG	4	/* 64-bit EQ identifier */
69866b24a33SWill Deacon #define KVM_DEV_XIVE_GRP_SOURCE_SYNC	5       /* 64-bit source identifier */
69966b24a33SWill Deacon 
70066b24a33SWill Deacon /* Layout of 64-bit XIVE source attribute values */
70166b24a33SWill Deacon #define KVM_XIVE_LEVEL_SENSITIVE	(1ULL << 0)
70266b24a33SWill Deacon #define KVM_XIVE_LEVEL_ASSERTED		(1ULL << 1)
70366b24a33SWill Deacon 
70466b24a33SWill Deacon /* Layout of 64-bit XIVE source configuration attribute values */
70566b24a33SWill Deacon #define KVM_XIVE_SOURCE_PRIORITY_SHIFT	0
70666b24a33SWill Deacon #define KVM_XIVE_SOURCE_PRIORITY_MASK	0x7
70766b24a33SWill Deacon #define KVM_XIVE_SOURCE_SERVER_SHIFT	3
70866b24a33SWill Deacon #define KVM_XIVE_SOURCE_SERVER_MASK	0xfffffff8ULL
70966b24a33SWill Deacon #define KVM_XIVE_SOURCE_MASKED_SHIFT	32
71066b24a33SWill Deacon #define KVM_XIVE_SOURCE_MASKED_MASK	0x100000000ULL
71166b24a33SWill Deacon #define KVM_XIVE_SOURCE_EISN_SHIFT	33
71266b24a33SWill Deacon #define KVM_XIVE_SOURCE_EISN_MASK	0xfffffffe00000000ULL
71366b24a33SWill Deacon 
71466b24a33SWill Deacon /* Layout of 64-bit EQ identifier */
71566b24a33SWill Deacon #define KVM_XIVE_EQ_PRIORITY_SHIFT	0
71666b24a33SWill Deacon #define KVM_XIVE_EQ_PRIORITY_MASK	0x7
71766b24a33SWill Deacon #define KVM_XIVE_EQ_SERVER_SHIFT	3
71866b24a33SWill Deacon #define KVM_XIVE_EQ_SERVER_MASK		0xfffffff8ULL
71966b24a33SWill Deacon 
72066b24a33SWill Deacon /* Layout of EQ configuration values (64 bytes) */
72166b24a33SWill Deacon struct kvm_ppc_xive_eq {
72266b24a33SWill Deacon 	__u32 flags;
72366b24a33SWill Deacon 	__u32 qshift;
72466b24a33SWill Deacon 	__u64 qaddr;
72566b24a33SWill Deacon 	__u32 qtoggle;
72666b24a33SWill Deacon 	__u32 qindex;
72766b24a33SWill Deacon 	__u8  pad[40];
72866b24a33SWill Deacon };
72966b24a33SWill Deacon 
73066b24a33SWill Deacon #define KVM_XIVE_EQ_ALWAYS_NOTIFY	0x00000001
73166b24a33SWill Deacon 
73266b24a33SWill Deacon #define KVM_XIVE_TIMA_PAGE_OFFSET	0
73366b24a33SWill Deacon #define KVM_XIVE_ESB_PAGE_OFFSET	4
73466b24a33SWill Deacon 
735*85aaadf6SAnup Patel /* for KVM_PPC_GET_PVINFO */
736*85aaadf6SAnup Patel 
737*85aaadf6SAnup Patel #define KVM_PPC_PVINFO_FLAGS_EV_IDLE   (1<<0)
738*85aaadf6SAnup Patel 
739*85aaadf6SAnup Patel struct kvm_ppc_pvinfo {
740*85aaadf6SAnup Patel 	/* out */
741*85aaadf6SAnup Patel 	__u32 flags;
742*85aaadf6SAnup Patel 	__u32 hcall[4];
743*85aaadf6SAnup Patel 	__u8  pad[108];
744*85aaadf6SAnup Patel };
745*85aaadf6SAnup Patel 
746*85aaadf6SAnup Patel /* for KVM_PPC_GET_SMMU_INFO */
747*85aaadf6SAnup Patel #define KVM_PPC_PAGE_SIZES_MAX_SZ	8
748*85aaadf6SAnup Patel 
749*85aaadf6SAnup Patel struct kvm_ppc_one_page_size {
750*85aaadf6SAnup Patel 	__u32 page_shift;	/* Page shift (or 0) */
751*85aaadf6SAnup Patel 	__u32 pte_enc;		/* Encoding in the HPTE (>>12) */
752*85aaadf6SAnup Patel };
753*85aaadf6SAnup Patel 
754*85aaadf6SAnup Patel struct kvm_ppc_one_seg_page_size {
755*85aaadf6SAnup Patel 	__u32 page_shift;	/* Base page shift of segment (or 0) */
756*85aaadf6SAnup Patel 	__u32 slb_enc;		/* SLB encoding for BookS */
757*85aaadf6SAnup Patel 	struct kvm_ppc_one_page_size enc[KVM_PPC_PAGE_SIZES_MAX_SZ];
758*85aaadf6SAnup Patel };
759*85aaadf6SAnup Patel 
760*85aaadf6SAnup Patel #define KVM_PPC_PAGE_SIZES_REAL		0x00000001
761*85aaadf6SAnup Patel #define KVM_PPC_1T_SEGMENTS		0x00000002
762*85aaadf6SAnup Patel #define KVM_PPC_NO_HASH			0x00000004
763*85aaadf6SAnup Patel 
764*85aaadf6SAnup Patel struct kvm_ppc_smmu_info {
765*85aaadf6SAnup Patel 	__u64 flags;
766*85aaadf6SAnup Patel 	__u32 slb_size;
767*85aaadf6SAnup Patel 	__u16 data_keys;	/* # storage keys supported for data */
768*85aaadf6SAnup Patel 	__u16 instr_keys;	/* # storage keys supported for instructions */
769*85aaadf6SAnup Patel 	struct kvm_ppc_one_seg_page_size sps[KVM_PPC_PAGE_SIZES_MAX_SZ];
770*85aaadf6SAnup Patel };
771*85aaadf6SAnup Patel 
772*85aaadf6SAnup Patel /* for KVM_PPC_RESIZE_HPT_{PREPARE,COMMIT} */
773*85aaadf6SAnup Patel struct kvm_ppc_resize_hpt {
774*85aaadf6SAnup Patel 	__u64 flags;
775*85aaadf6SAnup Patel 	__u32 shift;
776*85aaadf6SAnup Patel 	__u32 pad;
777*85aaadf6SAnup Patel };
778*85aaadf6SAnup Patel 
77960021220SAndre Przywara #endif /* __LINUX_KVM_POWERPC_H */
780