Zookeeper/Mac/HVMac.hpp
2016-05-17 12:39:52 -06:00

36 lines
797 B
C++

#include "Zookeeper.hpp"
#include <Hypervisor/hv.h>
#include <Hypervisor/hv_vmx.h>
class HVMac : public HV {
public:
HVMac();
~HVMac();
void map_phys(void *memory, uint32_t base, uint32_t size);
void invalidate_tlb();
uint32_t reg(HVReg reg);
void reg(HVReg reg, uint32_t val);
exit_t enter();
private:
uint32_t rreg(hv_x86_reg_t reg) {
uint64_t v;
bailout(hv_vcpu_read_register(vcpu, reg, &v));
return (uint32_t) v;
}
void wreg(hv_x86_reg_t reg, uint32_t v) {
bailout(hv_vcpu_write_register(vcpu, reg, (uint32_t) v));
}
uint64_t rvmcs(uint32_t field) {
uint64_t v;
bailout(hv_vmx_vcpu_read_vmcs(vcpu, field, &v));
return v;
}
void wvmcs(uint32_t field, uint64_t v) {
bailout(hv_vmx_vcpu_write_vmcs(vcpu, field, v));
}
hv_vcpuid_t vcpu;
};
#define HVImpl HVMac