symbian-qemu-0.9.1-12/qemu-symbian-svp/target-i386/svm.h
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 #ifndef __SVM_H
       
     2 #define __SVM_H
       
     3 
       
     4 #define TLB_CONTROL_DO_NOTHING 0
       
     5 #define TLB_CONTROL_FLUSH_ALL_ASID 1
       
     6 
       
     7 #define V_TPR_MASK 0x0f
       
     8 
       
     9 #define V_IRQ_SHIFT 8
       
    10 #define V_IRQ_MASK (1 << V_IRQ_SHIFT)
       
    11 
       
    12 #define V_INTR_PRIO_SHIFT 16
       
    13 #define V_INTR_PRIO_MASK (0x0f << V_INTR_PRIO_SHIFT)
       
    14 
       
    15 #define V_IGN_TPR_SHIFT 20
       
    16 #define V_IGN_TPR_MASK (1 << V_IGN_TPR_SHIFT)
       
    17 
       
    18 #define V_INTR_MASKING_SHIFT 24
       
    19 #define V_INTR_MASKING_MASK (1 << V_INTR_MASKING_SHIFT)
       
    20 
       
    21 #define SVM_INTERRUPT_SHADOW_MASK 1
       
    22 
       
    23 #define SVM_IOIO_STR_SHIFT 2
       
    24 #define SVM_IOIO_REP_SHIFT 3
       
    25 #define SVM_IOIO_SIZE_SHIFT 4
       
    26 #define SVM_IOIO_ASIZE_SHIFT 7
       
    27 
       
    28 #define SVM_IOIO_TYPE_MASK 1
       
    29 #define SVM_IOIO_STR_MASK (1 << SVM_IOIO_STR_SHIFT)
       
    30 #define SVM_IOIO_REP_MASK (1 << SVM_IOIO_REP_SHIFT)
       
    31 #define SVM_IOIO_SIZE_MASK (7 << SVM_IOIO_SIZE_SHIFT)
       
    32 #define SVM_IOIO_ASIZE_MASK (7 << SVM_IOIO_ASIZE_SHIFT)
       
    33 
       
    34 #define SVM_EVTINJ_VEC_MASK 0xff
       
    35 
       
    36 #define SVM_EVTINJ_TYPE_SHIFT 8
       
    37 #define SVM_EVTINJ_TYPE_MASK (7 << SVM_EVTINJ_TYPE_SHIFT)
       
    38 
       
    39 #define SVM_EVTINJ_TYPE_INTR (0 << SVM_EVTINJ_TYPE_SHIFT)
       
    40 #define SVM_EVTINJ_TYPE_NMI (2 << SVM_EVTINJ_TYPE_SHIFT)
       
    41 #define SVM_EVTINJ_TYPE_EXEPT (3 << SVM_EVTINJ_TYPE_SHIFT)
       
    42 #define SVM_EVTINJ_TYPE_SOFT (4 << SVM_EVTINJ_TYPE_SHIFT)
       
    43 
       
    44 #define SVM_EVTINJ_VALID (1 << 31)
       
    45 #define SVM_EVTINJ_VALID_ERR (1 << 11)
       
    46 
       
    47 #define SVM_EXITINTINFO_VEC_MASK SVM_EVTINJ_VEC_MASK
       
    48 
       
    49 #define	SVM_EXITINTINFO_TYPE_INTR SVM_EVTINJ_TYPE_INTR
       
    50 #define	SVM_EXITINTINFO_TYPE_NMI SVM_EVTINJ_TYPE_NMI
       
    51 #define	SVM_EXITINTINFO_TYPE_EXEPT SVM_EVTINJ_TYPE_EXEPT
       
    52 #define	SVM_EXITINTINFO_TYPE_SOFT SVM_EVTINJ_TYPE_SOFT
       
    53 
       
    54 #define SVM_EXITINTINFO_VALID SVM_EVTINJ_VALID
       
    55 #define SVM_EXITINTINFO_VALID_ERR SVM_EVTINJ_VALID_ERR
       
    56 
       
    57 #define	SVM_EXIT_READ_CR0 	0x000
       
    58 #define	SVM_EXIT_READ_CR3 	0x003
       
    59 #define	SVM_EXIT_READ_CR4 	0x004
       
    60 #define	SVM_EXIT_READ_CR8 	0x008
       
    61 #define	SVM_EXIT_WRITE_CR0 	0x010
       
    62 #define	SVM_EXIT_WRITE_CR3 	0x013
       
    63 #define	SVM_EXIT_WRITE_CR4 	0x014
       
    64 #define	SVM_EXIT_WRITE_CR8 	0x018
       
    65 #define	SVM_EXIT_READ_DR0 	0x020
       
    66 #define	SVM_EXIT_READ_DR1 	0x021
       
    67 #define	SVM_EXIT_READ_DR2 	0x022
       
    68 #define	SVM_EXIT_READ_DR3 	0x023
       
    69 #define	SVM_EXIT_READ_DR4 	0x024
       
    70 #define	SVM_EXIT_READ_DR5 	0x025
       
    71 #define	SVM_EXIT_READ_DR6 	0x026
       
    72 #define	SVM_EXIT_READ_DR7 	0x027
       
    73 #define	SVM_EXIT_WRITE_DR0 	0x030
       
    74 #define	SVM_EXIT_WRITE_DR1 	0x031
       
    75 #define	SVM_EXIT_WRITE_DR2 	0x032
       
    76 #define	SVM_EXIT_WRITE_DR3 	0x033
       
    77 #define	SVM_EXIT_WRITE_DR4 	0x034
       
    78 #define	SVM_EXIT_WRITE_DR5 	0x035
       
    79 #define	SVM_EXIT_WRITE_DR6 	0x036
       
    80 #define	SVM_EXIT_WRITE_DR7 	0x037
       
    81 #define SVM_EXIT_EXCP_BASE      0x040
       
    82 #define SVM_EXIT_INTR		0x060
       
    83 #define SVM_EXIT_NMI		0x061
       
    84 #define SVM_EXIT_SMI		0x062
       
    85 #define SVM_EXIT_INIT		0x063
       
    86 #define SVM_EXIT_VINTR		0x064
       
    87 #define SVM_EXIT_CR0_SEL_WRITE	0x065
       
    88 #define SVM_EXIT_IDTR_READ	0x066
       
    89 #define SVM_EXIT_GDTR_READ	0x067
       
    90 #define SVM_EXIT_LDTR_READ	0x068
       
    91 #define SVM_EXIT_TR_READ	0x069
       
    92 #define SVM_EXIT_IDTR_WRITE	0x06a
       
    93 #define SVM_EXIT_GDTR_WRITE	0x06b
       
    94 #define SVM_EXIT_LDTR_WRITE	0x06c
       
    95 #define SVM_EXIT_TR_WRITE	0x06d
       
    96 #define SVM_EXIT_RDTSC		0x06e
       
    97 #define SVM_EXIT_RDPMC		0x06f
       
    98 #define SVM_EXIT_PUSHF		0x070
       
    99 #define SVM_EXIT_POPF		0x071
       
   100 #define SVM_EXIT_CPUID		0x072
       
   101 #define SVM_EXIT_RSM		0x073
       
   102 #define SVM_EXIT_IRET		0x074
       
   103 #define SVM_EXIT_SWINT		0x075
       
   104 #define SVM_EXIT_INVD		0x076
       
   105 #define SVM_EXIT_PAUSE		0x077
       
   106 #define SVM_EXIT_HLT		0x078
       
   107 #define SVM_EXIT_INVLPG		0x079
       
   108 #define SVM_EXIT_INVLPGA	0x07a
       
   109 #define SVM_EXIT_IOIO		0x07b
       
   110 #define SVM_EXIT_MSR		0x07c
       
   111 #define SVM_EXIT_TASK_SWITCH	0x07d
       
   112 #define SVM_EXIT_FERR_FREEZE	0x07e
       
   113 #define SVM_EXIT_SHUTDOWN	0x07f
       
   114 #define SVM_EXIT_VMRUN		0x080
       
   115 #define SVM_EXIT_VMMCALL	0x081
       
   116 #define SVM_EXIT_VMLOAD		0x082
       
   117 #define SVM_EXIT_VMSAVE		0x083
       
   118 #define SVM_EXIT_STGI		0x084
       
   119 #define SVM_EXIT_CLGI		0x085
       
   120 #define SVM_EXIT_SKINIT		0x086
       
   121 #define SVM_EXIT_RDTSCP		0x087
       
   122 #define SVM_EXIT_ICEBP		0x088
       
   123 #define SVM_EXIT_WBINVD		0x089
       
   124 /* only included in documentation, maybe wrong */
       
   125 #define SVM_EXIT_MONITOR	0x08a
       
   126 #define SVM_EXIT_MWAIT		0x08b
       
   127 #define SVM_EXIT_NPF  		0x400
       
   128 
       
   129 #define SVM_EXIT_ERR		-1
       
   130 
       
   131 #define SVM_CR0_SELECTIVE_MASK (1 << 3 | 1) /* TS and MP */
       
   132 
       
   133 struct __attribute__ ((__packed__)) vmcb_control_area {
       
   134 	uint16_t intercept_cr_read;
       
   135 	uint16_t intercept_cr_write;
       
   136 	uint16_t intercept_dr_read;
       
   137 	uint16_t intercept_dr_write;
       
   138 	uint32_t intercept_exceptions;
       
   139 	uint64_t intercept;
       
   140 	uint8_t reserved_1[44];
       
   141 	uint64_t iopm_base_pa;
       
   142 	uint64_t msrpm_base_pa;
       
   143 	uint64_t tsc_offset;
       
   144 	uint32_t asid;
       
   145 	uint8_t tlb_ctl;
       
   146 	uint8_t reserved_2[3];
       
   147 	uint32_t int_ctl;
       
   148 	uint32_t int_vector;
       
   149 	uint32_t int_state;
       
   150 	uint8_t reserved_3[4];
       
   151 	uint64_t exit_code;
       
   152 	uint64_t exit_info_1;
       
   153 	uint64_t exit_info_2;
       
   154 	uint32_t exit_int_info;
       
   155 	uint32_t exit_int_info_err;
       
   156 	uint64_t nested_ctl;
       
   157 	uint8_t reserved_4[16];
       
   158 	uint32_t event_inj;
       
   159 	uint32_t event_inj_err;
       
   160 	uint64_t nested_cr3;
       
   161 	uint64_t lbr_ctl;
       
   162 	uint8_t reserved_5[832];
       
   163 };
       
   164 
       
   165 struct __attribute__ ((__packed__)) vmcb_seg {
       
   166 	uint16_t selector;
       
   167 	uint16_t attrib;
       
   168 	uint32_t limit;
       
   169 	uint64_t base;
       
   170 };
       
   171 
       
   172 struct __attribute__ ((__packed__)) vmcb_save_area {
       
   173 	struct vmcb_seg es;
       
   174 	struct vmcb_seg cs;
       
   175 	struct vmcb_seg ss;
       
   176 	struct vmcb_seg ds;
       
   177 	struct vmcb_seg fs;
       
   178 	struct vmcb_seg gs;
       
   179 	struct vmcb_seg gdtr;
       
   180 	struct vmcb_seg ldtr;
       
   181 	struct vmcb_seg idtr;
       
   182 	struct vmcb_seg tr;
       
   183 	uint8_t reserved_1[43];
       
   184 	uint8_t cpl;
       
   185 	uint8_t reserved_2[4];
       
   186 	uint64_t efer;
       
   187 	uint8_t reserved_3[112];
       
   188 	uint64_t cr4;
       
   189 	uint64_t cr3;
       
   190 	uint64_t cr0;
       
   191 	uint64_t dr7;
       
   192 	uint64_t dr6;
       
   193 	uint64_t rflags;
       
   194 	uint64_t rip;
       
   195 	uint8_t reserved_4[88];
       
   196 	uint64_t rsp;
       
   197 	uint8_t reserved_5[24];
       
   198 	uint64_t rax;
       
   199 	uint64_t star;
       
   200 	uint64_t lstar;
       
   201 	uint64_t cstar;
       
   202 	uint64_t sfmask;
       
   203 	uint64_t kernel_gs_base;
       
   204 	uint64_t sysenter_cs;
       
   205 	uint64_t sysenter_esp;
       
   206 	uint64_t sysenter_eip;
       
   207 	uint64_t cr2;
       
   208 	uint8_t reserved_6[32];
       
   209 	uint64_t g_pat;
       
   210 	uint64_t dbgctl;
       
   211 	uint64_t br_from;
       
   212 	uint64_t br_to;
       
   213 	uint64_t last_excp_from;
       
   214 	uint64_t last_excp_to;
       
   215 };
       
   216 
       
   217 struct __attribute__ ((__packed__)) vmcb {
       
   218 	struct vmcb_control_area control;
       
   219 	struct vmcb_save_area save;
       
   220 };
       
   221 
       
   222 #endif