Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
0002 /*
0003  * This program is free software; you can redistribute it and/or modify
0004  * it under the terms of the GNU General Public License, version 2, as
0005  * published by the Free Software Foundation.
0006  *
0007  * This program is distributed in the hope that it will be useful,
0008  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0009  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0010  * GNU General Public License for more details.
0011  *
0012  * You should have received a copy of the GNU General Public License
0013  * along with this program; if not, write to the Free Software
0014  * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
0015  *
0016  * Copyright IBM Corp. 2007
0017  *
0018  * Authors: Hollis Blanchard <hollisb@us.ibm.com>
0019  */
0020 
0021 #ifndef __LINUX_KVM_POWERPC_H
0022 #define __LINUX_KVM_POWERPC_H
0023 
0024 #include <linux/types.h>
0025 
0026 /* Select powerpc specific features in <linux/kvm.h> */
0027 #define __KVM_HAVE_SPAPR_TCE
0028 #define __KVM_HAVE_PPC_SMT
0029 #define __KVM_HAVE_IRQCHIP
0030 #define __KVM_HAVE_IRQ_LINE
0031 #define __KVM_HAVE_GUEST_DEBUG
0032 
0033 /* Not always available, but if it is, this is the correct offset.  */
0034 #define KVM_COALESCED_MMIO_PAGE_OFFSET 1
0035 
0036 struct kvm_regs {
0037     __u64 pc;
0038     __u64 cr;
0039     __u64 ctr;
0040     __u64 lr;
0041     __u64 xer;
0042     __u64 msr;
0043     __u64 srr0;
0044     __u64 srr1;
0045     __u64 pid;
0046 
0047     __u64 sprg0;
0048     __u64 sprg1;
0049     __u64 sprg2;
0050     __u64 sprg3;
0051     __u64 sprg4;
0052     __u64 sprg5;
0053     __u64 sprg6;
0054     __u64 sprg7;
0055 
0056     __u64 gpr[32];
0057 };
0058 
0059 #define KVM_SREGS_E_IMPL_NONE   0
0060 #define KVM_SREGS_E_IMPL_FSL    1
0061 
0062 #define KVM_SREGS_E_FSL_PIDn    (1 << 0) /* PID1/PID2 */
0063 
0064 /* flags for kvm_run.flags */
0065 #define KVM_RUN_PPC_NMI_DISP_MASK       (3 << 0)
0066 #define   KVM_RUN_PPC_NMI_DISP_FULLY_RECOV  (1 << 0)
0067 #define   KVM_RUN_PPC_NMI_DISP_LIMITED_RECOV    (2 << 0)
0068 #define   KVM_RUN_PPC_NMI_DISP_NOT_RECOV    (3 << 0)
0069 
0070 /*
0071  * Feature bits indicate which sections of the sregs struct are valid,
0072  * both in KVM_GET_SREGS and KVM_SET_SREGS.  On KVM_SET_SREGS, registers
0073  * corresponding to unset feature bits will not be modified.  This allows
0074  * restoring a checkpoint made without that feature, while keeping the
0075  * default values of the new registers.
0076  *
0077  * KVM_SREGS_E_BASE contains:
0078  * CSRR0/1 (refers to SRR2/3 on 40x)
0079  * ESR
0080  * DEAR
0081  * MCSR
0082  * TSR
0083  * TCR
0084  * DEC
0085  * TB
0086  * VRSAVE (USPRG0)
0087  */
0088 #define KVM_SREGS_E_BASE        (1 << 0)
0089 
0090 /*
0091  * KVM_SREGS_E_ARCH206 contains:
0092  *
0093  * PIR
0094  * MCSRR0/1
0095  * DECAR
0096  * IVPR
0097  */
0098 #define KVM_SREGS_E_ARCH206     (1 << 1)
0099 
0100 /*
0101  * Contains EPCR, plus the upper half of 64-bit registers
0102  * that are 32-bit on 32-bit implementations.
0103  */
0104 #define KVM_SREGS_E_64          (1 << 2)
0105 
0106 #define KVM_SREGS_E_SPRG8       (1 << 3)
0107 #define KVM_SREGS_E_MCIVPR      (1 << 4)
0108 
0109 /*
0110  * IVORs are used -- contains IVOR0-15, plus additional IVORs
0111  * in combination with an appropriate feature bit.
0112  */
0113 #define KVM_SREGS_E_IVOR        (1 << 5)
0114 
0115 /*
0116  * Contains MAS0-4, MAS6-7, TLBnCFG, MMUCFG.
0117  * Also TLBnPS if MMUCFG[MAVN] = 1.
0118  */
0119 #define KVM_SREGS_E_ARCH206_MMU     (1 << 6)
0120 
0121 /* DBSR, DBCR, IAC, DAC, DVC */
0122 #define KVM_SREGS_E_DEBUG       (1 << 7)
0123 
0124 /* Enhanced debug -- DSRR0/1, SPRG9 */
0125 #define KVM_SREGS_E_ED          (1 << 8)
0126 
0127 /* Embedded Floating Point (SPE) -- IVOR32-34 if KVM_SREGS_E_IVOR */
0128 #define KVM_SREGS_E_SPE         (1 << 9)
0129 
0130 /*
0131  * DEPRECATED! USE ONE_REG FOR THIS ONE!
0132  * External Proxy (EXP) -- EPR
0133  */
0134 #define KVM_SREGS_EXP           (1 << 10)
0135 
0136 /* External PID (E.PD) -- EPSC/EPLC */
0137 #define KVM_SREGS_E_PD          (1 << 11)
0138 
0139 /* Processor Control (E.PC) -- IVOR36-37 if KVM_SREGS_E_IVOR */
0140 #define KVM_SREGS_E_PC          (1 << 12)
0141 
0142 /* Page table (E.PT) -- EPTCFG */
0143 #define KVM_SREGS_E_PT          (1 << 13)
0144 
0145 /* Embedded Performance Monitor (E.PM) -- IVOR35 if KVM_SREGS_E_IVOR */
0146 #define KVM_SREGS_E_PM          (1 << 14)
0147 
0148 /*
0149  * Special updates:
0150  *
0151  * Some registers may change even while a vcpu is not running.
0152  * To avoid losing these changes, by default these registers are
0153  * not updated by KVM_SET_SREGS.  To force an update, set the bit
0154  * in u.e.update_special corresponding to the register to be updated.
0155  *
0156  * The update_special field is zero on return from KVM_GET_SREGS.
0157  *
0158  * When restoring a checkpoint, the caller can set update_special
0159  * to 0xffffffff to ensure that everything is restored, even new features
0160  * that the caller doesn't know about.
0161  */
0162 #define KVM_SREGS_E_UPDATE_MCSR     (1 << 0)
0163 #define KVM_SREGS_E_UPDATE_TSR      (1 << 1)
0164 #define KVM_SREGS_E_UPDATE_DEC      (1 << 2)
0165 #define KVM_SREGS_E_UPDATE_DBSR     (1 << 3)
0166 
0167 /*
0168  * In KVM_SET_SREGS, reserved/pad fields must be left untouched from a
0169  * previous KVM_GET_REGS.
0170  *
0171  * Unless otherwise indicated, setting any register with KVM_SET_SREGS
0172  * directly sets its value.  It does not trigger any special semantics such
0173  * as write-one-to-clear.  Calling KVM_SET_SREGS on an unmodified struct
0174  * just received from KVM_GET_SREGS is always a no-op.
0175  */
0176 struct kvm_sregs {
0177     __u32 pvr;
0178     union {
0179         struct {
0180             __u64 sdr1;
0181             struct {
0182                 struct {
0183                     __u64 slbe;
0184                     __u64 slbv;
0185                 } slb[64];
0186             } ppc64;
0187             struct {
0188                 __u32 sr[16];
0189                 __u64 ibat[8];
0190                 __u64 dbat[8];
0191             } ppc32;
0192         } s;
0193         struct {
0194             union {
0195                 struct { /* KVM_SREGS_E_IMPL_FSL */
0196                     __u32 features; /* KVM_SREGS_E_FSL_ */
0197                     __u32 svr;
0198                     __u64 mcar;
0199                     __u32 hid0;
0200 
0201                     /* KVM_SREGS_E_FSL_PIDn */
0202                     __u32 pid1, pid2;
0203                 } fsl;
0204                 __u8 pad[256];
0205             } impl;
0206 
0207             __u32 features; /* KVM_SREGS_E_ */
0208             __u32 impl_id;  /* KVM_SREGS_E_IMPL_ */
0209             __u32 update_special; /* KVM_SREGS_E_UPDATE_ */
0210             __u32 pir;  /* read-only */
0211             __u64 sprg8;
0212             __u64 sprg9;    /* E.ED */
0213             __u64 csrr0;
0214             __u64 dsrr0;    /* E.ED */
0215             __u64 mcsrr0;
0216             __u32 csrr1;
0217             __u32 dsrr1;    /* E.ED */
0218             __u32 mcsrr1;
0219             __u32 esr;
0220             __u64 dear;
0221             __u64 ivpr;
0222             __u64 mcivpr;
0223             __u64 mcsr; /* KVM_SREGS_E_UPDATE_MCSR */
0224 
0225             __u32 tsr;  /* KVM_SREGS_E_UPDATE_TSR */
0226             __u32 tcr;
0227             __u32 decar;
0228             __u32 dec;  /* KVM_SREGS_E_UPDATE_DEC */
0229 
0230             /*
0231              * Userspace can read TB directly, but the
0232              * value reported here is consistent with "dec".
0233              *
0234              * Read-only.
0235              */
0236             __u64 tb;
0237 
0238             __u32 dbsr; /* KVM_SREGS_E_UPDATE_DBSR */
0239             __u32 dbcr[3];
0240             /*
0241              * iac/dac registers are 64bit wide, while this API
0242              * interface provides only lower 32 bits on 64 bit
0243              * processors. ONE_REG interface is added for 64bit
0244              * iac/dac registers.
0245              */
0246             __u32 iac[4];
0247             __u32 dac[2];
0248             __u32 dvc[2];
0249             __u8 num_iac;   /* read-only */
0250             __u8 num_dac;   /* read-only */
0251             __u8 num_dvc;   /* read-only */
0252             __u8 pad;
0253 
0254             __u32 epr;  /* EXP */
0255             __u32 vrsave;   /* a.k.a. USPRG0 */
0256             __u32 epcr; /* KVM_SREGS_E_64 */
0257 
0258             __u32 mas0;
0259             __u32 mas1;
0260             __u64 mas2;
0261             __u64 mas7_3;
0262             __u32 mas4;
0263             __u32 mas6;
0264 
0265             __u32 ivor_low[16]; /* IVOR0-15 */
0266             __u32 ivor_high[18]; /* IVOR32+, plus room to expand */
0267 
0268             __u32 mmucfg;   /* read-only */
0269             __u32 eptcfg;   /* E.PT, read-only */
0270             __u32 tlbcfg[4];/* read-only */
0271             __u32 tlbps[4]; /* read-only */
0272 
0273             __u32 eplc, epsc; /* E.PD */
0274         } e;
0275         __u8 pad[1020];
0276     } u;
0277 };
0278 
0279 struct kvm_fpu {
0280     __u64 fpr[32];
0281 };
0282 
0283 /*
0284  * Defines for h/w breakpoint, watchpoint (read, write or both) and
0285  * software breakpoint.
0286  * These are used as "type" in KVM_SET_GUEST_DEBUG ioctl and "status"
0287  * for KVM_DEBUG_EXIT.
0288  */
0289 #define KVMPPC_DEBUG_NONE       0x0
0290 #define KVMPPC_DEBUG_BREAKPOINT     (1UL << 1)
0291 #define KVMPPC_DEBUG_WATCH_WRITE    (1UL << 2)
0292 #define KVMPPC_DEBUG_WATCH_READ     (1UL << 3)
0293 struct kvm_debug_exit_arch {
0294     __u64 address;
0295     /*
0296      * exiting to userspace because of h/w breakpoint, watchpoint
0297      * (read, write or both) and software breakpoint.
0298      */
0299     __u32 status;
0300     __u32 reserved;
0301 };
0302 
0303 /* for KVM_SET_GUEST_DEBUG */
0304 struct kvm_guest_debug_arch {
0305     struct {
0306         /* H/W breakpoint/watchpoint address */
0307         __u64 addr;
0308         /*
0309          * Type denotes h/w breakpoint, read watchpoint, write
0310          * watchpoint or watchpoint (both read and write).
0311          */
0312         __u32 type;
0313         __u32 reserved;
0314     } bp[16];
0315 };
0316 
0317 /* Debug related defines */
0318 /*
0319  * kvm_guest_debug->control is a 32 bit field. The lower 16 bits are generic
0320  * and upper 16 bits are architecture specific. Architecture specific defines
0321  * that ioctl is for setting hardware breakpoint or software breakpoint.
0322  */
0323 #define KVM_GUESTDBG_USE_SW_BP      0x00010000
0324 #define KVM_GUESTDBG_USE_HW_BP      0x00020000
0325 
0326 /* definition of registers in kvm_run */
0327 struct kvm_sync_regs {
0328 };
0329 
0330 #define KVM_INTERRUPT_SET   -1U
0331 #define KVM_INTERRUPT_UNSET -2U
0332 #define KVM_INTERRUPT_SET_LEVEL -3U
0333 
0334 #define KVM_CPU_440     1
0335 #define KVM_CPU_E500V2      2
0336 #define KVM_CPU_3S_32       3
0337 #define KVM_CPU_3S_64       4
0338 #define KVM_CPU_E500MC      5
0339 
0340 /* for KVM_CAP_SPAPR_TCE */
0341 struct kvm_create_spapr_tce {
0342     __u64 liobn;
0343     __u32 window_size;
0344 };
0345 
0346 /* for KVM_CAP_SPAPR_TCE_64 */
0347 struct kvm_create_spapr_tce_64 {
0348     __u64 liobn;
0349     __u32 page_shift;
0350     __u32 flags;
0351     __u64 offset;   /* in pages */
0352     __u64 size; /* in pages */
0353 };
0354 
0355 /* for KVM_ALLOCATE_RMA */
0356 struct kvm_allocate_rma {
0357     __u64 rma_size;
0358 };
0359 
0360 /* for KVM_CAP_PPC_RTAS */
0361 struct kvm_rtas_token_args {
0362     char name[120];
0363     __u64 token;    /* Use a token of 0 to undefine a mapping */
0364 };
0365 
0366 struct kvm_book3e_206_tlb_entry {
0367     __u32 mas8;
0368     __u32 mas1;
0369     __u64 mas2;
0370     __u64 mas7_3;
0371 };
0372 
0373 struct kvm_book3e_206_tlb_params {
0374     /*
0375      * For mmu types KVM_MMU_FSL_BOOKE_NOHV and KVM_MMU_FSL_BOOKE_HV:
0376      *
0377      * - The number of ways of TLB0 must be a power of two between 2 and
0378      *   16.
0379      * - TLB1 must be fully associative.
0380      * - The size of TLB0 must be a multiple of the number of ways, and
0381      *   the number of sets must be a power of two.
0382      * - The size of TLB1 may not exceed 64 entries.
0383      * - TLB0 supports 4 KiB pages.
0384      * - The page sizes supported by TLB1 are as indicated by
0385      *   TLB1CFG (if MMUCFG[MAVN] = 0) or TLB1PS (if MMUCFG[MAVN] = 1)
0386      *   as returned by KVM_GET_SREGS.
0387      * - TLB2 and TLB3 are reserved, and their entries in tlb_sizes[]
0388      *   and tlb_ways[] must be zero.
0389      *
0390      * tlb_ways[n] = tlb_sizes[n] means the array is fully associative.
0391      *
0392      * KVM will adjust TLBnCFG based on the sizes configured here,
0393      * though arrays greater than 2048 entries will have TLBnCFG[NENTRY]
0394      * set to zero.
0395      */
0396     __u32 tlb_sizes[4];
0397     __u32 tlb_ways[4];
0398     __u32 reserved[8];
0399 };
0400 
0401 /* For KVM_PPC_GET_HTAB_FD */
0402 struct kvm_get_htab_fd {
0403     __u64   flags;
0404     __u64   start_index;
0405     __u64   reserved[2];
0406 };
0407 
0408 /* Values for kvm_get_htab_fd.flags */
0409 #define KVM_GET_HTAB_BOLTED_ONLY    ((__u64)0x1)
0410 #define KVM_GET_HTAB_WRITE      ((__u64)0x2)
0411 
0412 /*
0413  * Data read on the file descriptor is formatted as a series of
0414  * records, each consisting of a header followed by a series of
0415  * `n_valid' HPTEs (16 bytes each), which are all valid.  Following
0416  * those valid HPTEs there are `n_invalid' invalid HPTEs, which
0417  * are not represented explicitly in the stream.  The same format
0418  * is used for writing.
0419  */
0420 struct kvm_get_htab_header {
0421     __u32   index;
0422     __u16   n_valid;
0423     __u16   n_invalid;
0424 };
0425 
0426 /* For KVM_PPC_CONFIGURE_V3_MMU */
0427 struct kvm_ppc_mmuv3_cfg {
0428     __u64   flags;
0429     __u64   process_table;  /* second doubleword of partition table entry */
0430 };
0431 
0432 /* Flag values for KVM_PPC_CONFIGURE_V3_MMU */
0433 #define KVM_PPC_MMUV3_RADIX 1   /* 1 = radix mode, 0 = HPT */
0434 #define KVM_PPC_MMUV3_GTSE  2   /* global translation shootdown enb. */
0435 
0436 /* For KVM_PPC_GET_RMMU_INFO */
0437 struct kvm_ppc_rmmu_info {
0438     struct kvm_ppc_radix_geom {
0439         __u8    page_shift;
0440         __u8    level_bits[4];
0441         __u8    pad[3];
0442     }   geometries[8];
0443     __u32   ap_encodings[8];
0444 };
0445 
0446 /* For KVM_PPC_GET_CPU_CHAR */
0447 struct kvm_ppc_cpu_char {
0448     __u64   character;      /* characteristics of the CPU */
0449     __u64   behaviour;      /* recommended software behaviour */
0450     __u64   character_mask;     /* valid bits in character */
0451     __u64   behaviour_mask;     /* valid bits in behaviour */
0452 };
0453 
0454 /*
0455  * Values for character and character_mask.
0456  * These are identical to the values used by H_GET_CPU_CHARACTERISTICS.
0457  */
0458 #define KVM_PPC_CPU_CHAR_SPEC_BAR_ORI31     (1ULL << 63)
0459 #define KVM_PPC_CPU_CHAR_BCCTRL_SERIALISED  (1ULL << 62)
0460 #define KVM_PPC_CPU_CHAR_L1D_FLUSH_ORI30    (1ULL << 61)
0461 #define KVM_PPC_CPU_CHAR_L1D_FLUSH_TRIG2    (1ULL << 60)
0462 #define KVM_PPC_CPU_CHAR_L1D_THREAD_PRIV    (1ULL << 59)
0463 #define KVM_PPC_CPU_CHAR_BR_HINT_HONOURED   (1ULL << 58)
0464 #define KVM_PPC_CPU_CHAR_MTTRIG_THR_RECONF  (1ULL << 57)
0465 #define KVM_PPC_CPU_CHAR_COUNT_CACHE_DIS    (1ULL << 56)
0466 #define KVM_PPC_CPU_CHAR_BCCTR_FLUSH_ASSIST (1ull << 54)
0467 
0468 #define KVM_PPC_CPU_BEHAV_FAVOUR_SECURITY   (1ULL << 63)
0469 #define KVM_PPC_CPU_BEHAV_L1D_FLUSH_PR      (1ULL << 62)
0470 #define KVM_PPC_CPU_BEHAV_BNDS_CHK_SPEC_BAR (1ULL << 61)
0471 #define KVM_PPC_CPU_BEHAV_FLUSH_COUNT_CACHE (1ull << 58)
0472 
0473 /* Per-vcpu XICS interrupt controller state */
0474 #define KVM_REG_PPC_ICP_STATE   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8c)
0475 
0476 #define  KVM_REG_PPC_ICP_CPPR_SHIFT 56  /* current proc priority */
0477 #define  KVM_REG_PPC_ICP_CPPR_MASK  0xff
0478 #define  KVM_REG_PPC_ICP_XISR_SHIFT 32  /* interrupt status field */
0479 #define  KVM_REG_PPC_ICP_XISR_MASK  0xffffff
0480 #define  KVM_REG_PPC_ICP_MFRR_SHIFT 24  /* pending IPI priority */
0481 #define  KVM_REG_PPC_ICP_MFRR_MASK  0xff
0482 #define  KVM_REG_PPC_ICP_PPRI_SHIFT 16  /* pending irq priority */
0483 #define  KVM_REG_PPC_ICP_PPRI_MASK  0xff
0484 
0485 #define KVM_REG_PPC_VP_STATE    (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x8d)
0486 
0487 /* Device control API: PPC-specific devices */
0488 #define KVM_DEV_MPIC_GRP_MISC       1
0489 #define   KVM_DEV_MPIC_BASE_ADDR    0   /* 64-bit */
0490 
0491 #define KVM_DEV_MPIC_GRP_REGISTER   2   /* 32-bit */
0492 #define KVM_DEV_MPIC_GRP_IRQ_ACTIVE 3   /* 32-bit */
0493 
0494 /* One-Reg API: PPC-specific registers */
0495 #define KVM_REG_PPC_HIOR    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x1)
0496 #define KVM_REG_PPC_IAC1    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x2)
0497 #define KVM_REG_PPC_IAC2    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x3)
0498 #define KVM_REG_PPC_IAC3    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x4)
0499 #define KVM_REG_PPC_IAC4    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x5)
0500 #define KVM_REG_PPC_DAC1    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x6)
0501 #define KVM_REG_PPC_DAC2    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x7)
0502 #define KVM_REG_PPC_DABR    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8)
0503 #define KVM_REG_PPC_DSCR    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x9)
0504 #define KVM_REG_PPC_PURR    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa)
0505 #define KVM_REG_PPC_SPURR   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb)
0506 #define KVM_REG_PPC_DAR     (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc)
0507 #define KVM_REG_PPC_DSISR   (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xd)
0508 #define KVM_REG_PPC_AMR     (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xe)
0509 #define KVM_REG_PPC_UAMOR   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xf)
0510 
0511 #define KVM_REG_PPC_MMCR0   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x10)
0512 #define KVM_REG_PPC_MMCR1   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x11)
0513 #define KVM_REG_PPC_MMCRA   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x12)
0514 #define KVM_REG_PPC_MMCR2   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x13)
0515 #define KVM_REG_PPC_MMCRS   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x14)
0516 #define KVM_REG_PPC_SIAR    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x15)
0517 #define KVM_REG_PPC_SDAR    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x16)
0518 #define KVM_REG_PPC_SIER    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x17)
0519 
0520 #define KVM_REG_PPC_PMC1    (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x18)
0521 #define KVM_REG_PPC_PMC2    (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x19)
0522 #define KVM_REG_PPC_PMC3    (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1a)
0523 #define KVM_REG_PPC_PMC4    (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1b)
0524 #define KVM_REG_PPC_PMC5    (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1c)
0525 #define KVM_REG_PPC_PMC6    (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1d)
0526 #define KVM_REG_PPC_PMC7    (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1e)
0527 #define KVM_REG_PPC_PMC8    (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1f)
0528 
0529 /* 32 floating-point registers */
0530 #define KVM_REG_PPC_FPR0    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x20)
0531 #define KVM_REG_PPC_FPR(n)  (KVM_REG_PPC_FPR0 + (n))
0532 #define KVM_REG_PPC_FPR31   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x3f)
0533 
0534 /* 32 VMX/Altivec vector registers */
0535 #define KVM_REG_PPC_VR0     (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x40)
0536 #define KVM_REG_PPC_VR(n)   (KVM_REG_PPC_VR0 + (n))
0537 #define KVM_REG_PPC_VR31    (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x5f)
0538 
0539 /* 32 double-width FP registers for VSX */
0540 /* High-order halves overlap with FP regs */
0541 #define KVM_REG_PPC_VSR0    (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x60)
0542 #define KVM_REG_PPC_VSR(n)  (KVM_REG_PPC_VSR0 + (n))
0543 #define KVM_REG_PPC_VSR31   (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x7f)
0544 
0545 /* FP and vector status/control registers */
0546 #define KVM_REG_PPC_FPSCR   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x80)
0547 /*
0548  * VSCR register is documented as a 32-bit register in the ISA, but it can
0549  * only be accesses via a vector register. Expose VSCR as a 32-bit register
0550  * even though the kernel represents it as a 128-bit vector.
0551  */
0552 #define KVM_REG_PPC_VSCR    (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x81)
0553 
0554 /* Virtual processor areas */
0555 /* For SLB & DTL, address in high (first) half, length in low half */
0556 #define KVM_REG_PPC_VPA_ADDR    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x82)
0557 #define KVM_REG_PPC_VPA_SLB (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x83)
0558 #define KVM_REG_PPC_VPA_DTL (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x84)
0559 
0560 #define KVM_REG_PPC_EPCR    (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x85)
0561 #define KVM_REG_PPC_EPR     (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x86)
0562 
0563 /* Timer Status Register OR/CLEAR interface */
0564 #define KVM_REG_PPC_OR_TSR  (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x87)
0565 #define KVM_REG_PPC_CLEAR_TSR   (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x88)
0566 #define KVM_REG_PPC_TCR     (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x89)
0567 #define KVM_REG_PPC_TSR     (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8a)
0568 
0569 /* Debugging: Special instruction for software breakpoint */
0570 #define KVM_REG_PPC_DEBUG_INST  (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8b)
0571 
0572 /* MMU registers */
0573 #define KVM_REG_PPC_MAS0    (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8c)
0574 #define KVM_REG_PPC_MAS1    (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8d)
0575 #define KVM_REG_PPC_MAS2    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8e)
0576 #define KVM_REG_PPC_MAS7_3  (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8f)
0577 #define KVM_REG_PPC_MAS4    (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x90)
0578 #define KVM_REG_PPC_MAS6    (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x91)
0579 #define KVM_REG_PPC_MMUCFG  (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x92)
0580 /*
0581  * TLBnCFG fields TLBnCFG_N_ENTRY and TLBnCFG_ASSOC can be changed only using
0582  * KVM_CAP_SW_TLB ioctl
0583  */
0584 #define KVM_REG_PPC_TLB0CFG (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x93)
0585 #define KVM_REG_PPC_TLB1CFG (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x94)
0586 #define KVM_REG_PPC_TLB2CFG (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x95)
0587 #define KVM_REG_PPC_TLB3CFG (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x96)
0588 #define KVM_REG_PPC_TLB0PS  (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x97)
0589 #define KVM_REG_PPC_TLB1PS  (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x98)
0590 #define KVM_REG_PPC_TLB2PS  (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x99)
0591 #define KVM_REG_PPC_TLB3PS  (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x9a)
0592 #define KVM_REG_PPC_EPTCFG  (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x9b)
0593 
0594 /* Timebase offset */
0595 #define KVM_REG_PPC_TB_OFFSET   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x9c)
0596 
0597 /* POWER8 registers */
0598 #define KVM_REG_PPC_SPMC1   (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x9d)
0599 #define KVM_REG_PPC_SPMC2   (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x9e)
0600 #define KVM_REG_PPC_IAMR    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x9f)
0601 #define KVM_REG_PPC_TFHAR   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa0)
0602 #define KVM_REG_PPC_TFIAR   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa1)
0603 #define KVM_REG_PPC_TEXASR  (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa2)
0604 #define KVM_REG_PPC_FSCR    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa3)
0605 #define KVM_REG_PPC_PSPB    (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xa4)
0606 #define KVM_REG_PPC_EBBHR   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa5)
0607 #define KVM_REG_PPC_EBBRR   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa6)
0608 #define KVM_REG_PPC_BESCR   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa7)
0609 #define KVM_REG_PPC_TAR     (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa8)
0610 #define KVM_REG_PPC_DPDES   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa9)
0611 #define KVM_REG_PPC_DAWR    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xaa)
0612 #define KVM_REG_PPC_DAWRX   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xab)
0613 #define KVM_REG_PPC_CIABR   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xac)
0614 #define KVM_REG_PPC_IC      (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xad)
0615 #define KVM_REG_PPC_VTB     (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xae)
0616 #define KVM_REG_PPC_CSIGR   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xaf)
0617 #define KVM_REG_PPC_TACR    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb0)
0618 #define KVM_REG_PPC_TCSCR   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb1)
0619 #define KVM_REG_PPC_PID     (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb2)
0620 #define KVM_REG_PPC_ACOP    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb3)
0621 
0622 #define KVM_REG_PPC_VRSAVE  (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb4)
0623 #define KVM_REG_PPC_LPCR    (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb5)
0624 #define KVM_REG_PPC_LPCR_64 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb5)
0625 #define KVM_REG_PPC_PPR     (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb6)
0626 
0627 /* Architecture compatibility level */
0628 #define KVM_REG_PPC_ARCH_COMPAT (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb7)
0629 
0630 #define KVM_REG_PPC_DABRX   (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xb8)
0631 #define KVM_REG_PPC_WORT    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb9)
0632 #define KVM_REG_PPC_SPRG9   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xba)
0633 #define KVM_REG_PPC_DBSR    (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xbb)
0634 
0635 /* POWER9 registers */
0636 #define KVM_REG_PPC_TIDR    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbc)
0637 #define KVM_REG_PPC_PSSCR   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbd)
0638 
0639 #define KVM_REG_PPC_DEC_EXPIRY  (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xbe)
0640 #define KVM_REG_PPC_ONLINE  (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xbf)
0641 #define KVM_REG_PPC_PTCR    (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc0)
0642 
0643 /* POWER10 registers */
0644 #define KVM_REG_PPC_MMCR3   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc1)
0645 #define KVM_REG_PPC_SIER2   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc2)
0646 #define KVM_REG_PPC_SIER3   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc3)
0647 #define KVM_REG_PPC_DAWR1   (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc4)
0648 #define KVM_REG_PPC_DAWRX1  (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc5)
0649 
0650 /* Transactional Memory checkpointed state:
0651  * This is all GPRs, all VSX regs and a subset of SPRs
0652  */
0653 #define KVM_REG_PPC_TM      (KVM_REG_PPC | 0x80000000)
0654 /* TM GPRs */
0655 #define KVM_REG_PPC_TM_GPR0 (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0)
0656 #define KVM_REG_PPC_TM_GPR(n)   (KVM_REG_PPC_TM_GPR0 + (n))
0657 #define KVM_REG_PPC_TM_GPR31    (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x1f)
0658 /* TM VSX */
0659 #define KVM_REG_PPC_TM_VSR0 (KVM_REG_PPC_TM | KVM_REG_SIZE_U128 | 0x20)
0660 #define KVM_REG_PPC_TM_VSR(n)   (KVM_REG_PPC_TM_VSR0 + (n))
0661 #define KVM_REG_PPC_TM_VSR63    (KVM_REG_PPC_TM | KVM_REG_SIZE_U128 | 0x5f)
0662 /* TM SPRS */
0663 #define KVM_REG_PPC_TM_CR   (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x60)
0664 #define KVM_REG_PPC_TM_LR   (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x61)
0665 #define KVM_REG_PPC_TM_CTR  (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x62)
0666 #define KVM_REG_PPC_TM_FPSCR    (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x63)
0667 #define KVM_REG_PPC_TM_AMR  (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x64)
0668 #define KVM_REG_PPC_TM_PPR  (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x65)
0669 #define KVM_REG_PPC_TM_VRSAVE   (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x66)
0670 #define KVM_REG_PPC_TM_VSCR (KVM_REG_PPC_TM | KVM_REG_SIZE_U32 | 0x67)
0671 #define KVM_REG_PPC_TM_DSCR (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x68)
0672 #define KVM_REG_PPC_TM_TAR  (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x69)
0673 #define KVM_REG_PPC_TM_XER  (KVM_REG_PPC_TM | KVM_REG_SIZE_U64 | 0x6a)
0674 
0675 /* PPC64 eXternal Interrupt Controller Specification */
0676 #define KVM_DEV_XICS_GRP_SOURCES    1   /* 64-bit source attributes */
0677 #define KVM_DEV_XICS_GRP_CTRL       2
0678 #define   KVM_DEV_XICS_NR_SERVERS   1
0679 
0680 /* Layout of 64-bit source attribute values */
0681 #define  KVM_XICS_DESTINATION_SHIFT 0
0682 #define  KVM_XICS_DESTINATION_MASK  0xffffffffULL
0683 #define  KVM_XICS_PRIORITY_SHIFT    32
0684 #define  KVM_XICS_PRIORITY_MASK     0xff
0685 #define  KVM_XICS_LEVEL_SENSITIVE   (1ULL << 40)
0686 #define  KVM_XICS_MASKED        (1ULL << 41)
0687 #define  KVM_XICS_PENDING       (1ULL << 42)
0688 #define  KVM_XICS_PRESENTED     (1ULL << 43)
0689 #define  KVM_XICS_QUEUED        (1ULL << 44)
0690 
0691 /* POWER9 XIVE Native Interrupt Controller */
0692 #define KVM_DEV_XIVE_GRP_CTRL       1
0693 #define   KVM_DEV_XIVE_RESET        1
0694 #define   KVM_DEV_XIVE_EQ_SYNC      2
0695 #define   KVM_DEV_XIVE_NR_SERVERS   3
0696 #define KVM_DEV_XIVE_GRP_SOURCE     2   /* 64-bit source identifier */
0697 #define KVM_DEV_XIVE_GRP_SOURCE_CONFIG  3   /* 64-bit source identifier */
0698 #define KVM_DEV_XIVE_GRP_EQ_CONFIG  4   /* 64-bit EQ identifier */
0699 #define KVM_DEV_XIVE_GRP_SOURCE_SYNC    5       /* 64-bit source identifier */
0700 
0701 /* Layout of 64-bit XIVE source attribute values */
0702 #define KVM_XIVE_LEVEL_SENSITIVE    (1ULL << 0)
0703 #define KVM_XIVE_LEVEL_ASSERTED     (1ULL << 1)
0704 
0705 /* Layout of 64-bit XIVE source configuration attribute values */
0706 #define KVM_XIVE_SOURCE_PRIORITY_SHIFT  0
0707 #define KVM_XIVE_SOURCE_PRIORITY_MASK   0x7
0708 #define KVM_XIVE_SOURCE_SERVER_SHIFT    3
0709 #define KVM_XIVE_SOURCE_SERVER_MASK 0xfffffff8ULL
0710 #define KVM_XIVE_SOURCE_MASKED_SHIFT    32
0711 #define KVM_XIVE_SOURCE_MASKED_MASK 0x100000000ULL
0712 #define KVM_XIVE_SOURCE_EISN_SHIFT  33
0713 #define KVM_XIVE_SOURCE_EISN_MASK   0xfffffffe00000000ULL
0714 
0715 /* Layout of 64-bit EQ identifier */
0716 #define KVM_XIVE_EQ_PRIORITY_SHIFT  0
0717 #define KVM_XIVE_EQ_PRIORITY_MASK   0x7
0718 #define KVM_XIVE_EQ_SERVER_SHIFT    3
0719 #define KVM_XIVE_EQ_SERVER_MASK     0xfffffff8ULL
0720 
0721 /* Layout of EQ configuration values (64 bytes) */
0722 struct kvm_ppc_xive_eq {
0723     __u32 flags;
0724     __u32 qshift;
0725     __u64 qaddr;
0726     __u32 qtoggle;
0727     __u32 qindex;
0728     __u8  pad[40];
0729 };
0730 
0731 #define KVM_XIVE_EQ_ALWAYS_NOTIFY   0x00000001
0732 
0733 #define KVM_XIVE_TIMA_PAGE_OFFSET   0
0734 #define KVM_XIVE_ESB_PAGE_OFFSET    4
0735 
0736 #endif /* __LINUX_KVM_POWERPC_H */