0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 #ifndef __LINUX_KVM_POWERPC_H
0022 #define __LINUX_KVM_POWERPC_H
0023
0024 #include <linux/types.h>
0025
0026
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
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)
0063
0064
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
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088 #define KVM_SREGS_E_BASE (1 << 0)
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098 #define KVM_SREGS_E_ARCH206 (1 << 1)
0099
0100
0101
0102
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
0111
0112
0113 #define KVM_SREGS_E_IVOR (1 << 5)
0114
0115
0116
0117
0118
0119 #define KVM_SREGS_E_ARCH206_MMU (1 << 6)
0120
0121
0122 #define KVM_SREGS_E_DEBUG (1 << 7)
0123
0124
0125 #define KVM_SREGS_E_ED (1 << 8)
0126
0127
0128 #define KVM_SREGS_E_SPE (1 << 9)
0129
0130
0131
0132
0133
0134 #define KVM_SREGS_EXP (1 << 10)
0135
0136
0137 #define KVM_SREGS_E_PD (1 << 11)
0138
0139
0140 #define KVM_SREGS_E_PC (1 << 12)
0141
0142
0143 #define KVM_SREGS_E_PT (1 << 13)
0144
0145
0146 #define KVM_SREGS_E_PM (1 << 14)
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
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
0169
0170
0171
0172
0173
0174
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 {
0196 __u32 features;
0197 __u32 svr;
0198 __u64 mcar;
0199 __u32 hid0;
0200
0201
0202 __u32 pid1, pid2;
0203 } fsl;
0204 __u8 pad[256];
0205 } impl;
0206
0207 __u32 features;
0208 __u32 impl_id;
0209 __u32 update_special;
0210 __u32 pir;
0211 __u64 sprg8;
0212 __u64 sprg9;
0213 __u64 csrr0;
0214 __u64 dsrr0;
0215 __u64 mcsrr0;
0216 __u32 csrr1;
0217 __u32 dsrr1;
0218 __u32 mcsrr1;
0219 __u32 esr;
0220 __u64 dear;
0221 __u64 ivpr;
0222 __u64 mcivpr;
0223 __u64 mcsr;
0224
0225 __u32 tsr;
0226 __u32 tcr;
0227 __u32 decar;
0228 __u32 dec;
0229
0230
0231
0232
0233
0234
0235
0236 __u64 tb;
0237
0238 __u32 dbsr;
0239 __u32 dbcr[3];
0240
0241
0242
0243
0244
0245
0246 __u32 iac[4];
0247 __u32 dac[2];
0248 __u32 dvc[2];
0249 __u8 num_iac;
0250 __u8 num_dac;
0251 __u8 num_dvc;
0252 __u8 pad;
0253
0254 __u32 epr;
0255 __u32 vrsave;
0256 __u32 epcr;
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];
0266 __u32 ivor_high[18];
0267
0268 __u32 mmucfg;
0269 __u32 eptcfg;
0270 __u32 tlbcfg[4];
0271 __u32 tlbps[4];
0272
0273 __u32 eplc, epsc;
0274 } e;
0275 __u8 pad[1020];
0276 } u;
0277 };
0278
0279 struct kvm_fpu {
0280 __u64 fpr[32];
0281 };
0282
0283
0284
0285
0286
0287
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
0297
0298
0299 __u32 status;
0300 __u32 reserved;
0301 };
0302
0303
0304 struct kvm_guest_debug_arch {
0305 struct {
0306
0307 __u64 addr;
0308
0309
0310
0311
0312 __u32 type;
0313 __u32 reserved;
0314 } bp[16];
0315 };
0316
0317
0318
0319
0320
0321
0322
0323 #define KVM_GUESTDBG_USE_SW_BP 0x00010000
0324 #define KVM_GUESTDBG_USE_HW_BP 0x00020000
0325
0326
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
0341 struct kvm_create_spapr_tce {
0342 __u64 liobn;
0343 __u32 window_size;
0344 };
0345
0346
0347 struct kvm_create_spapr_tce_64 {
0348 __u64 liobn;
0349 __u32 page_shift;
0350 __u32 flags;
0351 __u64 offset;
0352 __u64 size;
0353 };
0354
0355
0356 struct kvm_allocate_rma {
0357 __u64 rma_size;
0358 };
0359
0360
0361 struct kvm_rtas_token_args {
0362 char name[120];
0363 __u64 token;
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
0376
0377
0378
0379
0380
0381
0382
0383
0384
0385
0386
0387
0388
0389
0390
0391
0392
0393
0394
0395
0396 __u32 tlb_sizes[4];
0397 __u32 tlb_ways[4];
0398 __u32 reserved[8];
0399 };
0400
0401
0402 struct kvm_get_htab_fd {
0403 __u64 flags;
0404 __u64 start_index;
0405 __u64 reserved[2];
0406 };
0407
0408
0409 #define KVM_GET_HTAB_BOLTED_ONLY ((__u64)0x1)
0410 #define KVM_GET_HTAB_WRITE ((__u64)0x2)
0411
0412
0413
0414
0415
0416
0417
0418
0419
0420 struct kvm_get_htab_header {
0421 __u32 index;
0422 __u16 n_valid;
0423 __u16 n_invalid;
0424 };
0425
0426
0427 struct kvm_ppc_mmuv3_cfg {
0428 __u64 flags;
0429 __u64 process_table;
0430 };
0431
0432
0433 #define KVM_PPC_MMUV3_RADIX 1
0434 #define KVM_PPC_MMUV3_GTSE 2
0435
0436
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
0447 struct kvm_ppc_cpu_char {
0448 __u64 character;
0449 __u64 behaviour;
0450 __u64 character_mask;
0451 __u64 behaviour_mask;
0452 };
0453
0454
0455
0456
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
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
0477 #define KVM_REG_PPC_ICP_CPPR_MASK 0xff
0478 #define KVM_REG_PPC_ICP_XISR_SHIFT 32
0479 #define KVM_REG_PPC_ICP_XISR_MASK 0xffffff
0480 #define KVM_REG_PPC_ICP_MFRR_SHIFT 24
0481 #define KVM_REG_PPC_ICP_MFRR_MASK 0xff
0482 #define KVM_REG_PPC_ICP_PPRI_SHIFT 16
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
0488 #define KVM_DEV_MPIC_GRP_MISC 1
0489 #define KVM_DEV_MPIC_BASE_ADDR 0
0490
0491 #define KVM_DEV_MPIC_GRP_REGISTER 2
0492 #define KVM_DEV_MPIC_GRP_IRQ_ACTIVE 3
0493
0494
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
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
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
0540
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
0546 #define KVM_REG_PPC_FPSCR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x80)
0547
0548
0549
0550
0551
0552 #define KVM_REG_PPC_VSCR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x81)
0553
0554
0555
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
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
0570 #define KVM_REG_PPC_DEBUG_INST (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x8b)
0571
0572
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
0582
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
0595 #define KVM_REG_PPC_TB_OFFSET (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x9c)
0596
0597
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
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
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
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
0651
0652
0653 #define KVM_REG_PPC_TM (KVM_REG_PPC | 0x80000000)
0654
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
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
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
0676 #define KVM_DEV_XICS_GRP_SOURCES 1
0677 #define KVM_DEV_XICS_GRP_CTRL 2
0678 #define KVM_DEV_XICS_NR_SERVERS 1
0679
0680
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
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
0697 #define KVM_DEV_XIVE_GRP_SOURCE_CONFIG 3
0698 #define KVM_DEV_XIVE_GRP_EQ_CONFIG 4
0699 #define KVM_DEV_XIVE_GRP_SOURCE_SYNC 5
0700
0701
0702 #define KVM_XIVE_LEVEL_SENSITIVE (1ULL << 0)
0703 #define KVM_XIVE_LEVEL_ASSERTED (1ULL << 1)
0704
0705
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
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
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