Path: blob/master/tools/arch/powerpc/include/uapi/asm/kvm.h
26305 views
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */1/*2* Copyright IBM Corp. 20073*4* Authors: Hollis Blanchard <[email protected]>5*/67#ifndef __LINUX_KVM_POWERPC_H8#define __LINUX_KVM_POWERPC_H910#include <linux/types.h>1112/* Select powerpc specific features in <linux/kvm.h> */13#define __KVM_HAVE_SPAPR_TCE14#define __KVM_HAVE_PPC_SMT15#define __KVM_HAVE_IRQCHIP16#define __KVM_HAVE_IRQ_LINE1718/* Not always available, but if it is, this is the correct offset. */19#define KVM_COALESCED_MMIO_PAGE_OFFSET 12021struct kvm_regs {22__u64 pc;23__u64 cr;24__u64 ctr;25__u64 lr;26__u64 xer;27__u64 msr;28__u64 srr0;29__u64 srr1;30__u64 pid;3132__u64 sprg0;33__u64 sprg1;34__u64 sprg2;35__u64 sprg3;36__u64 sprg4;37__u64 sprg5;38__u64 sprg6;39__u64 sprg7;4041__u64 gpr[32];42};4344#define KVM_SREGS_E_IMPL_NONE 045#define KVM_SREGS_E_IMPL_FSL 14647#define KVM_SREGS_E_FSL_PIDn (1 << 0) /* PID1/PID2 */4849/* flags for kvm_run.flags */50#define KVM_RUN_PPC_NMI_DISP_MASK (3 << 0)51#define KVM_RUN_PPC_NMI_DISP_FULLY_RECOV (1 << 0)52#define KVM_RUN_PPC_NMI_DISP_LIMITED_RECOV (2 << 0)53#define KVM_RUN_PPC_NMI_DISP_NOT_RECOV (3 << 0)5455/*56* Feature bits indicate which sections of the sregs struct are valid,57* both in KVM_GET_SREGS and KVM_SET_SREGS. On KVM_SET_SREGS, registers58* corresponding to unset feature bits will not be modified. This allows59* restoring a checkpoint made without that feature, while keeping the60* default values of the new registers.61*62* KVM_SREGS_E_BASE contains:63* CSRR0/1 (refers to SRR2/3 on 40x)64* ESR65* DEAR66* MCSR67* TSR68* TCR69* DEC70* TB71* VRSAVE (USPRG0)72*/73#define KVM_SREGS_E_BASE (1 << 0)7475/*76* KVM_SREGS_E_ARCH206 contains:77*78* PIR79* MCSRR0/180* DECAR81* IVPR82*/83#define KVM_SREGS_E_ARCH206 (1 << 1)8485/*86* Contains EPCR, plus the upper half of 64-bit registers87* that are 32-bit on 32-bit implementations.88*/89#define KVM_SREGS_E_64 (1 << 2)9091#define KVM_SREGS_E_SPRG8 (1 << 3)92#define KVM_SREGS_E_MCIVPR (1 << 4)9394/*95* IVORs are used -- contains IVOR0-15, plus additional IVORs96* in combination with an appropriate feature bit.97*/98#define KVM_SREGS_E_IVOR (1 << 5)99100/*101* Contains MAS0-4, MAS6-7, TLBnCFG, MMUCFG.102* Also TLBnPS if MMUCFG[MAVN] = 1.103*/104#define KVM_SREGS_E_ARCH206_MMU (1 << 6)105106/* DBSR, DBCR, IAC, DAC, DVC */107#define KVM_SREGS_E_DEBUG (1 << 7)108109/* Enhanced debug -- DSRR0/1, SPRG9 */110#define KVM_SREGS_E_ED (1 << 8)111112/* Embedded Floating Point (SPE) -- IVOR32-34 if KVM_SREGS_E_IVOR */113#define KVM_SREGS_E_SPE (1 << 9)114115/*116* DEPRECATED! USE ONE_REG FOR THIS ONE!117* External Proxy (EXP) -- EPR118*/119#define KVM_SREGS_EXP (1 << 10)120121/* External PID (E.PD) -- EPSC/EPLC */122#define KVM_SREGS_E_PD (1 << 11)123124/* Processor Control (E.PC) -- IVOR36-37 if KVM_SREGS_E_IVOR */125#define KVM_SREGS_E_PC (1 << 12)126127/* Page table (E.PT) -- EPTCFG */128#define KVM_SREGS_E_PT (1 << 13)129130/* Embedded Performance Monitor (E.PM) -- IVOR35 if KVM_SREGS_E_IVOR */131#define KVM_SREGS_E_PM (1 << 14)132133/*134* Special updates:135*136* Some registers may change even while a vcpu is not running.137* To avoid losing these changes, by default these registers are138* not updated by KVM_SET_SREGS. To force an update, set the bit139* in u.e.update_special corresponding to the register to be updated.140*141* The update_special field is zero on return from KVM_GET_SREGS.142*143* When restoring a checkpoint, the caller can set update_special144* to 0xffffffff to ensure that everything is restored, even new features145* that the caller doesn't know about.146*/147#define KVM_SREGS_E_UPDATE_MCSR (1 << 0)148#define KVM_SREGS_E_UPDATE_TSR (1 << 1)149#define KVM_SREGS_E_UPDATE_DEC (1 << 2)150#define KVM_SREGS_E_UPDATE_DBSR (1 << 3)151152/*153* In KVM_SET_SREGS, reserved/pad fields must be left untouched from a154* previous KVM_GET_REGS.155*156* Unless otherwise indicated, setting any register with KVM_SET_SREGS157* directly sets its value. It does not trigger any special semantics such158* as write-one-to-clear. Calling KVM_SET_SREGS on an unmodified struct159* just received from KVM_GET_SREGS is always a no-op.160*/161struct kvm_sregs {162__u32 pvr;163union {164struct {165__u64 sdr1;166struct {167struct {168__u64 slbe;169__u64 slbv;170} slb[64];171} ppc64;172struct {173__u32 sr[16];174__u64 ibat[8];175__u64 dbat[8];176} ppc32;177} s;178struct {179union {180struct { /* KVM_SREGS_E_IMPL_FSL */181__u32 features; /* KVM_SREGS_E_FSL_ */182__u32 svr;183__u64 mcar;184__u32 hid0;185186/* KVM_SREGS_E_FSL_PIDn */187__u32 pid1, pid2;188} fsl;189__u8 pad[256];190} impl;191192__u32 features; /* KVM_SREGS_E_ */193__u32 impl_id; /* KVM_SREGS_E_IMPL_ */194__u32 update_special; /* KVM_SREGS_E_UPDATE_ */195__u32 pir; /* read-only */196__u64 sprg8;197__u64 sprg9; /* E.ED */198__u64 csrr0;199__u64 dsrr0; /* E.ED */200__u64 mcsrr0;201__u32 csrr1;202__u32 dsrr1; /* E.ED */203__u32 mcsrr1;204__u32 esr;205__u64 dear;206__u64 ivpr;207__u64 mcivpr;208__u64 mcsr; /* KVM_SREGS_E_UPDATE_MCSR */209210__u32 tsr; /* KVM_SREGS_E_UPDATE_TSR */211__u32 tcr;212__u32 decar;213__u32 dec; /* KVM_SREGS_E_UPDATE_DEC */214215/*216* Userspace can read TB directly, but the217* value reported here is consistent with "dec".218*219* Read-only.220*/221__u64 tb;222223__u32 dbsr; /* KVM_SREGS_E_UPDATE_DBSR */224__u32 dbcr[3];225/*226* iac/dac registers are 64bit wide, while this API227* interface provides only lower 32 bits on 64 bit228* processors. ONE_REG interface is added for 64bit229* iac/dac registers.230*/231__u32 iac[4];232__u32 dac[2];233__u32 dvc[2];234__u8 num_iac; /* read-only */235__u8 num_dac; /* read-only */236__u8 num_dvc; /* read-only */237__u8 pad;238239__u32 epr; /* EXP */240__u32 vrsave; /* a.k.a. USPRG0 */241__u32 epcr; /* KVM_SREGS_E_64 */242243__u32 mas0;244__u32 mas1;245__u64 mas2;246__u64 mas7_3;247__u32 mas4;248__u32 mas6;249250__u32 ivor_low[16]; /* IVOR0-15 */251__u32 ivor_high[18]; /* IVOR32+, plus room to expand */252253__u32 mmucfg; /* read-only */254__u32 eptcfg; /* E.PT, read-only */255__u32 tlbcfg[4];/* read-only */256__u32 tlbps[4]; /* read-only */257258__u32 eplc, epsc; /* E.PD */259} e;260__u8 pad[1020];261} u;262};263264struct kvm_fpu {265__u64 fpr[32];266};267268/*269* Defines for h/w breakpoint, watchpoint (read, write or both) and270* software breakpoint.271* These are used as "type" in KVM_SET_GUEST_DEBUG ioctl and "status"272* for KVM_DEBUG_EXIT.273*/274#define KVMPPC_DEBUG_NONE 0x0275#define KVMPPC_DEBUG_BREAKPOINT (1UL << 1)276#define KVMPPC_DEBUG_WATCH_WRITE (1UL << 2)277#define KVMPPC_DEBUG_WATCH_READ (1UL << 3)278struct kvm_debug_exit_arch {279__u64 address;280/*281* exiting to userspace because of h/w breakpoint, watchpoint282* (read, write or both) and software breakpoint.283*/284__u32 status;285__u32 reserved;286};287288/* for KVM_SET_GUEST_DEBUG */289struct kvm_guest_debug_arch {290struct {291/* H/W breakpoint/watchpoint address */292__u64 addr;293/*294* Type denotes h/w breakpoint, read watchpoint, write295* watchpoint or watchpoint (both read and write).296*/297__u32 type;298__u32 reserved;299} bp[16];300};301302/* Debug related defines */303/*304* kvm_guest_debug->control is a 32 bit field. The lower 16 bits are generic305* and upper 16 bits are architecture specific. Architecture specific defines306* that ioctl is for setting hardware breakpoint or software breakpoint.307*/308#define KVM_GUESTDBG_USE_SW_BP 0x00010000309#define KVM_GUESTDBG_USE_HW_BP 0x00020000310311/* definition of registers in kvm_run */312struct kvm_sync_regs {313};314315#define KVM_INTERRUPT_SET -1U316#define KVM_INTERRUPT_UNSET -2U317#define KVM_INTERRUPT_SET_LEVEL -3U318319#define KVM_CPU_440 1320#define KVM_CPU_E500V2 2321#define KVM_CPU_3S_32 3322#define KVM_CPU_3S_64 4323#define KVM_CPU_E500MC 5324325/* for KVM_CAP_SPAPR_TCE */326struct kvm_create_spapr_tce {327__u64 liobn;328__u32 window_size;329};330331/* for KVM_CAP_SPAPR_TCE_64 */332struct kvm_create_spapr_tce_64 {333__u64 liobn;334__u32 page_shift;335__u32 flags;336__u64 offset; /* in pages */337__u64 size; /* in pages */338};339340/* for KVM_ALLOCATE_RMA */341struct kvm_allocate_rma {342__u64 rma_size;343};344345/* for KVM_CAP_PPC_RTAS */346struct kvm_rtas_token_args {347char name[120];348__u64 token; /* Use a token of 0 to undefine a mapping */349};350351struct kvm_book3e_206_tlb_entry {352__u32 mas8;353__u32 mas1;354__u64 mas2;355__u64 mas7_3;356};357358struct kvm_book3e_206_tlb_params {359/*360* For mmu types KVM_MMU_FSL_BOOKE_NOHV and KVM_MMU_FSL_BOOKE_HV:361*362* - The number of ways of TLB0 must be a power of two between 2 and363* 16.364* - TLB1 must be fully associative.365* - The size of TLB0 must be a multiple of the number of ways, and366* the number of sets must be a power of two.367* - The size of TLB1 may not exceed 64 entries.368* - TLB0 supports 4 KiB pages.369* - The page sizes supported by TLB1 are as indicated by370* TLB1CFG (if MMUCFG[MAVN] = 0) or TLB1PS (if MMUCFG[MAVN] = 1)371* as returned by KVM_GET_SREGS.372* - TLB2 and TLB3 are reserved, and their entries in tlb_sizes[]373* and tlb_ways[] must be zero.374*375* tlb_ways[n] = tlb_sizes[n] means the array is fully associative.376*377* KVM will adjust TLBnCFG based on the sizes configured here,378* though arrays greater than 2048 entries will have TLBnCFG[NENTRY]379* set to zero.380*/381__u32 tlb_sizes[4];382__u32 tlb_ways[4];383__u32 reserved[8];384};385386/* For KVM_PPC_GET_HTAB_FD */387struct kvm_get_htab_fd {388__u64 flags;389__u64 start_index;390__u64 reserved[2];391};392393/* Values for kvm_get_htab_fd.flags */394#define KVM_GET_HTAB_BOLTED_ONLY ((__u64)0x1)395#define KVM_GET_HTAB_WRITE ((__u64)0x2)396397/*398* Data read on the file descriptor is formatted as a series of399* records, each consisting of a header followed by a series of400* `n_valid' HPTEs (16 bytes each), which are all valid. Following401* those valid HPTEs there are `n_invalid' invalid HPTEs, which402* are not represented explicitly in the stream. The same format403* is used for writing.404*/405struct kvm_get_htab_header {406__u32 index;407__u16 n_valid;408__u16 n_invalid;409};410411/* For KVM_PPC_CONFIGURE_V3_MMU */412struct kvm_ppc_mmuv3_cfg {413__u64 flags;414__u64 process_table; /* second doubleword of partition table entry */415};416417/* Flag values for KVM_PPC_CONFIGURE_V3_MMU */418#define KVM_PPC_MMUV3_RADIX 1 /* 1 = radix mode, 0 = HPT */419#define KVM_PPC_MMUV3_GTSE 2 /* global translation shootdown enb. */420421/* For KVM_PPC_GET_RMMU_INFO */422struct kvm_ppc_rmmu_info {423struct kvm_ppc_radix_geom {424__u8 page_shift;425__u8 level_bits[4];426__u8 pad[3];427} geometries[8];428__u32 ap_encodings[8];429};430431/* For KVM_PPC_GET_CPU_CHAR */432struct kvm_ppc_cpu_char {433__u64 character; /* characteristics of the CPU */434__u64 behaviour; /* recommended software behaviour */435__u64 character_mask; /* valid bits in character */436__u64 behaviour_mask; /* valid bits in behaviour */437};438439/*440* Values for character and character_mask.441* These are identical to the values used by H_GET_CPU_CHARACTERISTICS.442*/443#define KVM_PPC_CPU_CHAR_SPEC_BAR_ORI31 (1ULL << 63)444#define KVM_PPC_CPU_CHAR_BCCTRL_SERIALISED (1ULL << 62)445#define KVM_PPC_CPU_CHAR_L1D_FLUSH_ORI30 (1ULL << 61)446#define KVM_PPC_CPU_CHAR_L1D_FLUSH_TRIG2 (1ULL << 60)447#define KVM_PPC_CPU_CHAR_L1D_THREAD_PRIV (1ULL << 59)448#define KVM_PPC_CPU_CHAR_BR_HINT_HONOURED (1ULL << 58)449#define KVM_PPC_CPU_CHAR_MTTRIG_THR_RECONF (1ULL << 57)450#define KVM_PPC_CPU_CHAR_COUNT_CACHE_DIS (1ULL << 56)451#define KVM_PPC_CPU_CHAR_BCCTR_FLUSH_ASSIST (1ull << 54)452453#define KVM_PPC_CPU_BEHAV_FAVOUR_SECURITY (1ULL << 63)454#define KVM_PPC_CPU_BEHAV_L1D_FLUSH_PR (1ULL << 62)455#define KVM_PPC_CPU_BEHAV_BNDS_CHK_SPEC_BAR (1ULL << 61)456#define KVM_PPC_CPU_BEHAV_FLUSH_COUNT_CACHE (1ull << 58)457458/* Per-vcpu XICS interrupt controller state */459#define KVM_REG_PPC_ICP_STATE (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8c)460461#define KVM_REG_PPC_ICP_CPPR_SHIFT 56 /* current proc priority */462#define KVM_REG_PPC_ICP_CPPR_MASK 0xff463#define KVM_REG_PPC_ICP_XISR_SHIFT 32 /* interrupt status field */464#define KVM_REG_PPC_ICP_XISR_MASK 0xffffff465#define KVM_REG_PPC_ICP_MFRR_SHIFT 24 /* pending IPI priority */466#define KVM_REG_PPC_ICP_MFRR_MASK 0xff467#define KVM_REG_PPC_ICP_PPRI_SHIFT 16 /* pending irq priority */468#define KVM_REG_PPC_ICP_PPRI_MASK 0xff469470#define KVM_REG_PPC_VP_STATE (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x8d)471472/* Device control API: PPC-specific devices */473#define KVM_DEV_MPIC_GRP_MISC 1474#define KVM_DEV_MPIC_BASE_ADDR 0 /* 64-bit */475476#define KVM_DEV_MPIC_GRP_REGISTER 2 /* 32-bit */477#define KVM_DEV_MPIC_GRP_IRQ_ACTIVE 3 /* 32-bit */478479/* One-Reg API: PPC-specific registers */480#define KVM_REG_PPC_HIOR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x1)481#define KVM_REG_PPC_IAC1 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x2)482#define KVM_REG_PPC_IAC2 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x3)483#define KVM_REG_PPC_IAC3 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x4)484#define KVM_REG_PPC_IAC4 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x5)485#define KVM_REG_PPC_DAC1 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x6)486#define KVM_REG_PPC_DAC2 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x7)487#define KVM_REG_PPC_DABR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8)488#define KVM_REG_PPC_DSCR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x9)489#define KVM_REG_PPC_PURR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa)490#define KVM_REG_PPC_SPURR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb)491#define KVM_REG_PPC_DAR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc)492#define KVM_REG_PPC_DSISR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xd)493#define KVM_REG_PPC_AMR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xe)494#define KVM_REG_PPC_UAMOR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xf)495496#define KVM_REG_PPC_MMCR0 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x10)497#define KVM_REG_PPC_MMCR1 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x11)498#define KVM_REG_PPC_MMCRA (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x12)499#define KVM_REG_PPC_MMCR2 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x13)500#define KVM_REG_PPC_MMCRS (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x14)501#define KVM_REG_PPC_SIAR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x15)502#define KVM_REG_PPC_SDAR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x16)503#define KVM_REG_PPC_SIER (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x17)504505#define KVM_REG_PPC_PMC1 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x18)506#define KVM_REG_PPC_PMC2 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x19)507#define KVM_REG_PPC_PMC3 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1a)508#define KVM_REG_PPC_PMC4 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1b)509#define KVM_REG_PPC_PMC5 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1c)510#define KVM_REG_PPC_PMC6 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1d)511#define KVM_REG_PPC_PMC7 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1e)512#define KVM_REG_PPC_PMC8 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1f)513514/* 32 floating-point registers */515#define KVM_REG_PPC_FPR0 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x20)516#define KVM_REG_PPC_FPR(n) (KVM_REG_PPC_FPR0 + (n))517#define KVM_REG_PPC_FPR31 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x3f)518519/* 32 VMX/Altivec vector registers */520#define KVM_REG_PPC_VR0 (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x40)521#define KVM_REG_PPC_VR(n) (KVM_REG_PPC_VR0 + (n))522#define KVM_REG_PPC_VR31 (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x5f)523524/* 32 double-width FP registers for VSX */525/* High-order halves overlap with FP regs */526#define KVM_REG_PPC_VSR0 (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x60)527#define KVM_REG_PPC_VSR(n) (KVM_REG_PPC_VSR0 + (n))528#define KVM_REG_PPC_VSR31 (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x7f)529530/* FP and vector status/control registers */531#define KVM_REG_PPC_FPSCR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x80)532/*533* VSCR register is documented as a 32-bit register in the ISA, but it can534* only be accesses via a vector register. Expose VSCR as a 32-bit register535* even though the kernel represents it as a 128-bit vector.536*/537#define KVM_REG_PPC_VSCR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x81)538539/* Virtual processor areas */540/* For SLB & DTL, address in high (first) half, length in low half */541#define KVM_REG_PPC_VPA_ADDR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x82)542#define KVM_REG_PPC_VPA_SLB (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x83)543#define KVM_REG_PPC_VPA_DTL (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x84)544545#define KVM_REG_PPC_EPCR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x85)546#define KVM_REG_PPC_EPR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x86)547548/* Timer Status Register OR/CLEAR interface */549#define KVM_REG_PPC_OR_TSR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x87)550#define KVM_REG_PPC_CLEAR_TSR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x88)551#define KVM_REG_PPC_TCR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x89)552#define KVM_REG_PPC_TSR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8a)553554/* Debugging: Special instruction for software breakpoint */555#define KVM_REG_PPC_DEBUG_INST (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8b)556557/* MMU registers */558#define KVM_REG_PPC_MAS0 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8c)559#define KVM_REG_PPC_MAS1 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8d)560#define KVM_REG_PPC_MAS2 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8e)561#define KVM_REG_PPC_MAS7_3 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8f)562#define KVM_REG_PPC_MAS4 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x90)563#define KVM_REG_PPC_MAS6 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x91)564#define KVM_REG_PPC_MMUCFG (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x92)565/*566* TLBnCFG fields TLBnCFG_N_ENTRY and TLBnCFG_ASSOC can be changed only using567* KVM_CAP_SW_TLB ioctl568*/569#define KVM_REG_PPC_TLB0CFG (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x93)570#define KVM_REG_PPC_TLB1CFG (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x94)571#define KVM_REG_PPC_TLB2CFG (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x95)572#define KVM_REG_PPC_TLB3CFG (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x96)573#define KVM_REG_PPC_TLB0PS (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x97)574#define KVM_REG_PPC_TLB1PS (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x98)575#define KVM_REG_PPC_TLB2PS (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x99)576#define KVM_REG_PPC_TLB3PS (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x9a)577#define KVM_REG_PPC_EPTCFG (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x9b)578579/* Timebase offset */580#define KVM_REG_PPC_TB_OFFSET (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x9c)581582/* POWER8 registers */583#define KVM_REG_PPC_SPMC1 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x9d)584#define KVM_REG_PPC_SPMC2 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x9e)585#define KVM_REG_PPC_IAMR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x9f)586#define KVM_REG_PPC_TFHAR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa0)587#define KVM_REG_PPC_TFIAR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa1)588#define KVM_REG_PPC_TEXASR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa2)589#define KVM_REG_PPC_FSCR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa3)590#define KVM_REG_PPC_PSPB (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xa4)591#define KVM_REG_PPC_EBBHR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa5)592#define KVM_REG_PPC_EBBRR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa6)593#define KVM_REG_PPC_BESCR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa7)594#define KVM_REG_PPC_TAR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa8)595#define KVM_REG_PPC_DPDES (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa9)596#define KVM_REG_PPC_DAWR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xaa)597#define KVM_REG_PPC_DAWRX (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xab)598#define KVM_REG_PPC_CIABR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xac)599#define KVM_REG_PPC_IC (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xad)600#define KVM_REG_PPC_VTB (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xae)601#define KVM_REG_PPC_CSIGR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xaf)602#define KVM_REG_PPC_TACR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb0)603#define KVM_REG_PPC_TCSCR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb1)604#define KVM_REG_PPC_PID (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb2)605#define KVM_REG_PPC_ACOP (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb3)606607#define KVM_REG_PPC_VRSAVE (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb4)608#define KVM_REG_PPC_LPCR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb5)609#define KVM_REG_PPC_LPCR_64 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb5)610#define KVM_REG_PPC_PPR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb6)611612/* Architecture compatibility level */613#define KVM_REG_PPC_ARCH_COMPAT (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb7)614615#define KVM_REG_PPC_DABRX (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb8)616#define KVM_REG_PPC_WORT (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb9)617#define KVM_REG_PPC_SPRG9 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xba)618#define KVM_REG_PPC_DBSR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xbb)619620/* POWER9 registers */621#define KVM_REG_PPC_TIDR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbc)622#define KVM_REG_PPC_PSSCR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbd)623624#define KVM_REG_PPC_DEC_EXPIRY (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbe)625#define KVM_REG_PPC_ONLINE (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xbf)626#define KVM_REG_PPC_PTCR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc0)627628/* POWER10 registers */629#define KVM_REG_PPC_MMCR3 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc1)630#define KVM_REG_PPC_SIER2 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc2)631#define KVM_REG_PPC_SIER3 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc3)632#define KVM_REG_PPC_DAWR1 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc4)633#define KVM_REG_PPC_DAWRX1 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc5)634#define KVM_REG_PPC_DEXCR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc6)635#define KVM_REG_PPC_HASHKEYR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc7)636#define KVM_REG_PPC_HASHPKEYR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc8)637638/* Transactional Memory checkpointed state:639* This is all GPRs, all VSX regs and a subset of SPRs640*/641#define KVM_REG_PPC_TM (KVM_REG_PPC | 0x80000000)642/* TM GPRs */643#define KVM_REG_PPC_TM_GPR0 (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0)644#define KVM_REG_PPC_TM_GPR(n) (KVM_REG_PPC_TM_GPR0 + (n))645#define KVM_REG_PPC_TM_GPR31 (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x1f)646/* TM VSX */647#define KVM_REG_PPC_TM_VSR0 (KVM_REG_PPC_TM | KVM_REG_SIZE_U128 | 0x20)648#define KVM_REG_PPC_TM_VSR(n) (KVM_REG_PPC_TM_VSR0 + (n))649#define KVM_REG_PPC_TM_VSR63 (KVM_REG_PPC_TM | KVM_REG_SIZE_U128 | 0x5f)650/* TM SPRS */651#define KVM_REG_PPC_TM_CR (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x60)652#define KVM_REG_PPC_TM_LR (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x61)653#define KVM_REG_PPC_TM_CTR (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x62)654#define KVM_REG_PPC_TM_FPSCR (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x63)655#define KVM_REG_PPC_TM_AMR (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x64)656#define KVM_REG_PPC_TM_PPR (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x65)657#define KVM_REG_PPC_TM_VRSAVE (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x66)658#define KVM_REG_PPC_TM_VSCR (KVM_REG_PPC_TM | KVM_REG_SIZE_U32 | 0x67)659#define KVM_REG_PPC_TM_DSCR (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x68)660#define KVM_REG_PPC_TM_TAR (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x69)661#define KVM_REG_PPC_TM_XER (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x6a)662663/* PPC64 eXternal Interrupt Controller Specification */664#define KVM_DEV_XICS_GRP_SOURCES 1 /* 64-bit source attributes */665#define KVM_DEV_XICS_GRP_CTRL 2666#define KVM_DEV_XICS_NR_SERVERS 1667668/* Layout of 64-bit source attribute values */669#define KVM_XICS_DESTINATION_SHIFT 0670#define KVM_XICS_DESTINATION_MASK 0xffffffffULL671#define KVM_XICS_PRIORITY_SHIFT 32672#define KVM_XICS_PRIORITY_MASK 0xff673#define KVM_XICS_LEVEL_SENSITIVE (1ULL << 40)674#define KVM_XICS_MASKED (1ULL << 41)675#define KVM_XICS_PENDING (1ULL << 42)676#define KVM_XICS_PRESENTED (1ULL << 43)677#define KVM_XICS_QUEUED (1ULL << 44)678679/* POWER9 XIVE Native Interrupt Controller */680#define KVM_DEV_XIVE_GRP_CTRL 1681#define KVM_DEV_XIVE_RESET 1682#define KVM_DEV_XIVE_EQ_SYNC 2683#define KVM_DEV_XIVE_NR_SERVERS 3684#define KVM_DEV_XIVE_GRP_SOURCE 2 /* 64-bit source identifier */685#define KVM_DEV_XIVE_GRP_SOURCE_CONFIG 3 /* 64-bit source identifier */686#define KVM_DEV_XIVE_GRP_EQ_CONFIG 4 /* 64-bit EQ identifier */687#define KVM_DEV_XIVE_GRP_SOURCE_SYNC 5 /* 64-bit source identifier */688689/* Layout of 64-bit XIVE source attribute values */690#define KVM_XIVE_LEVEL_SENSITIVE (1ULL << 0)691#define KVM_XIVE_LEVEL_ASSERTED (1ULL << 1)692693/* Layout of 64-bit XIVE source configuration attribute values */694#define KVM_XIVE_SOURCE_PRIORITY_SHIFT 0695#define KVM_XIVE_SOURCE_PRIORITY_MASK 0x7696#define KVM_XIVE_SOURCE_SERVER_SHIFT 3697#define KVM_XIVE_SOURCE_SERVER_MASK 0xfffffff8ULL698#define KVM_XIVE_SOURCE_MASKED_SHIFT 32699#define KVM_XIVE_SOURCE_MASKED_MASK 0x100000000ULL700#define KVM_XIVE_SOURCE_EISN_SHIFT 33701#define KVM_XIVE_SOURCE_EISN_MASK 0xfffffffe00000000ULL702703/* Layout of 64-bit EQ identifier */704#define KVM_XIVE_EQ_PRIORITY_SHIFT 0705#define KVM_XIVE_EQ_PRIORITY_MASK 0x7706#define KVM_XIVE_EQ_SERVER_SHIFT 3707#define KVM_XIVE_EQ_SERVER_MASK 0xfffffff8ULL708709/* Layout of EQ configuration values (64 bytes) */710struct kvm_ppc_xive_eq {711__u32 flags;712__u32 qshift;713__u64 qaddr;714__u32 qtoggle;715__u32 qindex;716__u8 pad[40];717};718719#define KVM_XIVE_EQ_ALWAYS_NOTIFY 0x00000001720721#define KVM_XIVE_TIMA_PAGE_OFFSET 0722#define KVM_XIVE_ESB_PAGE_OFFSET 4723724/* for KVM_PPC_GET_PVINFO */725726#define KVM_PPC_PVINFO_FLAGS_EV_IDLE (1<<0)727728struct kvm_ppc_pvinfo {729/* out */730__u32 flags;731__u32 hcall[4];732__u8 pad[108];733};734735/* for KVM_PPC_GET_SMMU_INFO */736#define KVM_PPC_PAGE_SIZES_MAX_SZ 8737738struct kvm_ppc_one_page_size {739__u32 page_shift; /* Page shift (or 0) */740__u32 pte_enc; /* Encoding in the HPTE (>>12) */741};742743struct kvm_ppc_one_seg_page_size {744__u32 page_shift; /* Base page shift of segment (or 0) */745__u32 slb_enc; /* SLB encoding for BookS */746struct kvm_ppc_one_page_size enc[KVM_PPC_PAGE_SIZES_MAX_SZ];747};748749#define KVM_PPC_PAGE_SIZES_REAL 0x00000001750#define KVM_PPC_1T_SEGMENTS 0x00000002751#define KVM_PPC_NO_HASH 0x00000004752753struct kvm_ppc_smmu_info {754__u64 flags;755__u32 slb_size;756__u16 data_keys; /* # storage keys supported for data */757__u16 instr_keys; /* # storage keys supported for instructions */758struct kvm_ppc_one_seg_page_size sps[KVM_PPC_PAGE_SIZES_MAX_SZ];759};760761/* for KVM_PPC_RESIZE_HPT_{PREPARE,COMMIT} */762struct kvm_ppc_resize_hpt {763__u64 flags;764__u32 shift;765__u32 pad;766};767768#endif /* __LINUX_KVM_POWERPC_H */769770771