#include <palacios/vm_guest.h>
+#define EFER_MSR 0xc0000080
+
struct cr0_real {
uint_t pe : 1;
uint_t mp : 1;
uint_t mce : 1;
uint_t pge : 1;
uint_t pce : 1;
- uint_t osf_xsr : 1;
- uint_t osx : 1;
- uint_t rsvd1 : 21;
+ uint_t os_fxsr : 1;
+ uint_t osxmmexcpt : 1;
+ uint_t rsvd0 : 5;
+ uint_t fsgsbase : 1;
+ uint_t rsvd1 : 1;
+ uint_t osxsave : 1;
+ uint_t rsvd2 : 13;
} __attribute__((packed));
struct cr4_64 {
uint_t mce : 1;
uint_t pge : 1;
uint_t pce : 1;
- uint_t osf_xsr : 1;
- uint_t osx : 1;
- uint_t rsvd1 : 21;
- uint_t rsvd2 : 32;
+ uint_t os_fxsr : 1;
+ uint_t osxmmexcpt : 1;
+ uint_t rsvd0 : 5;
+ uint_t fsgsbase : 1;
+ uint_t rsvd1 : 1;
+ uint_t osxsave : 1;
+ uint_t rsvd2 : 13;
+ uint_t rsvd3 : 32;
} __attribute__((packed));
-
/*
// First opcode byte
static const uchar_t cr_access_byte = 0x0f;
int v3_handle_cr4_write(struct guest_info * info);
int v3_handle_cr4_read(struct guest_info * info);
+int v3_handle_cr8_write(struct guest_info * info);
+int v3_handle_cr8_read(struct guest_info * info);
+
+
+int v3_handle_efer_write(struct guest_info * core, uint_t msr, struct v3_msr src, void * priv_data);
+int v3_handle_efer_read(struct guest_info * core, uint_t msr, struct v3_msr * dst, void * priv_data);
-int v3_handle_efer_write(uint_t msr, struct v3_msr src, void * priv_data);
-int v3_handle_efer_read(uint_t msr, struct v3_msr * dst, void * priv_data);
+int v3_handle_vm_cr_write(struct guest_info * core, uint_t msr, struct v3_msr src, void * priv_data);
+int v3_handle_vm_cr_read(struct guest_info * core, uint_t msr, struct v3_msr * dst, void * priv_data);
#endif // ! __V3VEE__