|
25 | 25 | #include <linux/types.h> |
26 | 26 | #include <linux/kvm_types.h> |
27 | 27 | #include <asm/kvm.h> |
28 | | -#include <asm/kvm_asm.h> |
29 | 28 | #include <asm/kvm_mmio.h> |
30 | 29 |
|
31 | 30 | #define __KVM_HAVE_ARCH_INTC_INITIALIZED |
@@ -85,6 +84,86 @@ struct kvm_vcpu_fault_info { |
85 | 84 | u64 hpfar_el2; /* Hyp IPA Fault Address Register */ |
86 | 85 | }; |
87 | 86 |
|
| 87 | +/* |
| 88 | + * 0 is reserved as an invalid value. |
| 89 | + * Order should be kept in sync with the save/restore code. |
| 90 | + */ |
| 91 | +enum vcpu_sysreg { |
| 92 | + __INVALID_SYSREG__, |
| 93 | + MPIDR_EL1, /* MultiProcessor Affinity Register */ |
| 94 | + CSSELR_EL1, /* Cache Size Selection Register */ |
| 95 | + SCTLR_EL1, /* System Control Register */ |
| 96 | + ACTLR_EL1, /* Auxiliary Control Register */ |
| 97 | + CPACR_EL1, /* Coprocessor Access Control */ |
| 98 | + TTBR0_EL1, /* Translation Table Base Register 0 */ |
| 99 | + TTBR1_EL1, /* Translation Table Base Register 1 */ |
| 100 | + TCR_EL1, /* Translation Control Register */ |
| 101 | + ESR_EL1, /* Exception Syndrome Register */ |
| 102 | + AFSR0_EL1, /* Auxilary Fault Status Register 0 */ |
| 103 | + AFSR1_EL1, /* Auxilary Fault Status Register 1 */ |
| 104 | + FAR_EL1, /* Fault Address Register */ |
| 105 | + MAIR_EL1, /* Memory Attribute Indirection Register */ |
| 106 | + VBAR_EL1, /* Vector Base Address Register */ |
| 107 | + CONTEXTIDR_EL1, /* Context ID Register */ |
| 108 | + TPIDR_EL0, /* Thread ID, User R/W */ |
| 109 | + TPIDRRO_EL0, /* Thread ID, User R/O */ |
| 110 | + TPIDR_EL1, /* Thread ID, Privileged */ |
| 111 | + AMAIR_EL1, /* Aux Memory Attribute Indirection Register */ |
| 112 | + CNTKCTL_EL1, /* Timer Control Register (EL1) */ |
| 113 | + PAR_EL1, /* Physical Address Register */ |
| 114 | + MDSCR_EL1, /* Monitor Debug System Control Register */ |
| 115 | + MDCCINT_EL1, /* Monitor Debug Comms Channel Interrupt Enable Reg */ |
| 116 | + |
| 117 | + /* 32bit specific registers. Keep them at the end of the range */ |
| 118 | + DACR32_EL2, /* Domain Access Control Register */ |
| 119 | + IFSR32_EL2, /* Instruction Fault Status Register */ |
| 120 | + FPEXC32_EL2, /* Floating-Point Exception Control Register */ |
| 121 | + DBGVCR32_EL2, /* Debug Vector Catch Register */ |
| 122 | + |
| 123 | + NR_SYS_REGS /* Nothing after this line! */ |
| 124 | +}; |
| 125 | + |
| 126 | +/* 32bit mapping */ |
| 127 | +#define c0_MPIDR (MPIDR_EL1 * 2) /* MultiProcessor ID Register */ |
| 128 | +#define c0_CSSELR (CSSELR_EL1 * 2)/* Cache Size Selection Register */ |
| 129 | +#define c1_SCTLR (SCTLR_EL1 * 2) /* System Control Register */ |
| 130 | +#define c1_ACTLR (ACTLR_EL1 * 2) /* Auxiliary Control Register */ |
| 131 | +#define c1_CPACR (CPACR_EL1 * 2) /* Coprocessor Access Control */ |
| 132 | +#define c2_TTBR0 (TTBR0_EL1 * 2) /* Translation Table Base Register 0 */ |
| 133 | +#define c2_TTBR0_high (c2_TTBR0 + 1) /* TTBR0 top 32 bits */ |
| 134 | +#define c2_TTBR1 (TTBR1_EL1 * 2) /* Translation Table Base Register 1 */ |
| 135 | +#define c2_TTBR1_high (c2_TTBR1 + 1) /* TTBR1 top 32 bits */ |
| 136 | +#define c2_TTBCR (TCR_EL1 * 2) /* Translation Table Base Control R. */ |
| 137 | +#define c3_DACR (DACR32_EL2 * 2)/* Domain Access Control Register */ |
| 138 | +#define c5_DFSR (ESR_EL1 * 2) /* Data Fault Status Register */ |
| 139 | +#define c5_IFSR (IFSR32_EL2 * 2)/* Instruction Fault Status Register */ |
| 140 | +#define c5_ADFSR (AFSR0_EL1 * 2) /* Auxiliary Data Fault Status R */ |
| 141 | +#define c5_AIFSR (AFSR1_EL1 * 2) /* Auxiliary Instr Fault Status R */ |
| 142 | +#define c6_DFAR (FAR_EL1 * 2) /* Data Fault Address Register */ |
| 143 | +#define c6_IFAR (c6_DFAR + 1) /* Instruction Fault Address Register */ |
| 144 | +#define c7_PAR (PAR_EL1 * 2) /* Physical Address Register */ |
| 145 | +#define c7_PAR_high (c7_PAR + 1) /* PAR top 32 bits */ |
| 146 | +#define c10_PRRR (MAIR_EL1 * 2) /* Primary Region Remap Register */ |
| 147 | +#define c10_NMRR (c10_PRRR + 1) /* Normal Memory Remap Register */ |
| 148 | +#define c12_VBAR (VBAR_EL1 * 2) /* Vector Base Address Register */ |
| 149 | +#define c13_CID (CONTEXTIDR_EL1 * 2) /* Context ID Register */ |
| 150 | +#define c13_TID_URW (TPIDR_EL0 * 2) /* Thread ID, User R/W */ |
| 151 | +#define c13_TID_URO (TPIDRRO_EL0 * 2)/* Thread ID, User R/O */ |
| 152 | +#define c13_TID_PRIV (TPIDR_EL1 * 2) /* Thread ID, Privileged */ |
| 153 | +#define c10_AMAIR0 (AMAIR_EL1 * 2) /* Aux Memory Attr Indirection Reg */ |
| 154 | +#define c10_AMAIR1 (c10_AMAIR0 + 1)/* Aux Memory Attr Indirection Reg */ |
| 155 | +#define c14_CNTKCTL (CNTKCTL_EL1 * 2) /* Timer Control Register (PL1) */ |
| 156 | + |
| 157 | +#define cp14_DBGDSCRext (MDSCR_EL1 * 2) |
| 158 | +#define cp14_DBGBCR0 (DBGBCR0_EL1 * 2) |
| 159 | +#define cp14_DBGBVR0 (DBGBVR0_EL1 * 2) |
| 160 | +#define cp14_DBGBXVR0 (cp14_DBGBVR0 + 1) |
| 161 | +#define cp14_DBGWCR0 (DBGWCR0_EL1 * 2) |
| 162 | +#define cp14_DBGWVR0 (DBGWVR0_EL1 * 2) |
| 163 | +#define cp14_DBGDCCINT (MDCCINT_EL1 * 2) |
| 164 | + |
| 165 | +#define NR_COPRO_REGS (NR_SYS_REGS * 2) |
| 166 | + |
88 | 167 | struct kvm_cpu_context { |
89 | 168 | struct kvm_regs gp_regs; |
90 | 169 | union { |
|
0 commit comments