X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmcs.h;h=11309bfbc941225dca075eea571508e0fdc5662a;hb=73f7dfbeb661474a53ed5b3c73898a431e5e737e;hp=79efe4e6e081e078452329cf5c168ae0126b2130;hpb=cfcceed5890430afedcc544bd7dbb69e29dfd65a;p=palacios.git diff --git a/palacios/include/palacios/vmcs.h b/palacios/include/palacios/vmcs.h index 79efe4e..11309bf 100644 --- a/palacios/include/palacios/vmcs.h +++ b/palacios/include/palacios/vmcs.h @@ -37,10 +37,7 @@ /* Control register exit masks */ #define CR4_VMXE 0x00002000 -int v3_load_vmcs_guest_state(struct guest_info * info); -int v3_update_vmcs_guest_state(struct guest_info * info); -int v3_update_vmcs_host_state(struct guest_info * info); -int v3_update_vmcs_ctrl_fields(struct guest_info * info); + typedef enum { @@ -243,9 +240,13 @@ struct vmx_exception_bitmap { /* Segment Selector Access Rights (32 bits) */ /* INTEL Manual: 20-4 vol 3B */ -struct vmcs_segment_access { +struct vmcs_segment { + uint16_t selector; + uint32_t limit; + uint64_t base; + union { - uint32_t value; + uint32_t val; struct { uint32_t type : 4; uint32_t desc_type : 1; @@ -259,20 +260,26 @@ struct vmcs_segment_access { uint32_t unusable : 1; uint32_t rsvd2 : 15; } __attribute__((packed)); - } __attribute__((packed)); -}__attribute__((packed)); + } __attribute__((packed)) access; +}; struct vmcs_interrupt_state { - uint32_t sti_blocking : 1; - uint32_t mov_ss_blocking : 1; - uint32_t smi_blocking : 1; - uint32_t nmi_blocking : 1; - uint32_t rsvd1 : 28; + union { + uint32_t val; + struct { + uint32_t sti_blocking : 1; + uint32_t mov_ss_blocking : 1; + uint32_t smi_blocking : 1; + uint32_t nmi_blocking : 1; + uint32_t rsvd1 : 28; + } __attribute__((packed)); + } __attribute__((packed)); } __attribute__((packed)); + struct vmcs_data { uint32_t revision ; uint32_t abort ; @@ -287,6 +294,19 @@ const char * v3_vmcs_field_to_str(vmcs_field_t field); void v3_print_vmcs(); +int v3_vmx_save_vmcs(struct guest_info * info); +int v3_vmx_restore_vmcs(struct guest_info * info); + + +int v3_update_vmcs_host_state(struct guest_info * info); +int v3_update_vmcs_ctrl_fields(struct guest_info * info); + + +int v3_read_vmcs_segments(struct v3_segments * segs); +int v3_write_vmcs_segments(struct v3_segments * segs); +void v3_vmxseg_to_seg(struct vmcs_segment * vmcs_seg, struct v3_segment * seg); +void v3_seg_to_vmxseg(struct v3_segment * seg, struct vmcs_segment * vmcs_seg); + #endif // ! __V3VEE__