X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm_lowlevel.h;fp=palacios%2Finclude%2Fpalacios%2Fvmm_lowlevel.h;h=4719cce1e77caebe2754b4dcdf42996beec92187;hb=773e6e7d212b3ece194cd0e75a383db7d2b9a2b1;hp=0000000000000000000000000000000000000000;hpb=f01a143a28b1c4d350ce714559c7751786761bf2;p=palacios.git diff --git a/palacios/include/palacios/vmm_lowlevel.h b/palacios/include/palacios/vmm_lowlevel.h new file mode 100644 index 0000000..4719cce --- /dev/null +++ b/palacios/include/palacios/vmm_lowlevel.h @@ -0,0 +1,70 @@ +/* + * This file is part of the Palacios Virtual Machine Monitor developed + * by the V3VEE Project with funding from the United States National + * Science Foundation and the Department of Energy. + * + * The V3VEE Project is a joint project between Northwestern University + * and the University of New Mexico. You can find out more at + * http://www.v3vee.org + * + * Copyright (c) 2008, Jack Lange + * Copyright (c) 2008, The V3VEE Project + * All rights reserved. + * + * Author: Jack Lange + * + * This is free software. You are permitted to use, + * redistribute, and modify it as specified in the file "V3VEE_LICENSE". + */ + +#include + + +#ifdef __V3_32BIT__ + +void __inline__ v3_cpuid(uint_t target, uint_t * eax, uint_t * ebx, uint_t * ecx, uint_t * edx) { + __asm__ __volatile__ ( + "pushl %%ebx\n\t" + "cpuid\n\t" + "movl %%ebx, %%esi\n\t" + "popl %%ebx\n\t" + : "=a" (*eax), "=S" (*ebx), "=c" (*ecx), "=d" (*edx) + : "a" (target) + ); + return; +} + + + + +void __inline__ v3_set_msr(uint_t msr, uint_t high_byte, uint_t low_byte) { + __asm__ __volatile__ ( + "wrmsr" + : + : "c" (msr), "d" (high_byte), "a" (low_byte) + ); + + +} + + + +void __inline__ v3_get_msr(uint_t msr, uint_t * high_byte, uint_t * low_byte) { + __asm__ __volatile__ ( + "rdmsr" + : "=d" (*high_byte), "=a" (*low_byte) + : "c" (msr) + ); +} + + + +void __inline__ v3_enable_ints() { + __asm__ __volatile__ ("sti"); +} + +void __inline__ v3_disable_ints() { + __asm__ __volatile__ ("cli"); +} + +#endif