+/* (c) 2008, Jack Lange <jarusl@cs.northwestern.edu> */
+/* (c) 2008, The V3VEE Project <http://www.v3vee.org> */
+
#ifndef __VMM_H
#define __VMM_H
-#define PrintError(fmt, args...) \
- do { \
- extern struct vmm_os_hooks * os_hooks; \
- if ((os_hooks) && (os_hooks)->print_debug) { \
- (os_hooks)->print_debug((fmt), ##args); \
- } \
+#define PrintError(fmt, args...) \
+ do { \
+ extern struct vmm_os_hooks * os_hooks; \
+ if ((os_hooks) && (os_hooks)->print_debug) { \
+ (os_hooks)->print_debug("%s(%d): " fmt, __FILE__, __LINE__, ##args); \
+ } \
} while (0)
#if VMM_TRACE
-#define PrintTrace(fmt, args...) \
- do { \
- extern struct vmm_os_hooks * os_hooks; \
- if ((os_hooks) && (os_hooks)->print_trace) { \
- (os_hooks)->print_trace((fmt), ##args); \
- } \
+#define PrintTrace(fmt, args...) \
+ do { \
+ extern struct vmm_os_hooks * os_hooks; \
+ if ((os_hooks) && (os_hooks)->print_trace) { \
+ (os_hooks)->print_trace(fmt, ##args); \
+ } \
} while (0)
#else
#define PrintTrace(fmt, args...)
#define V3_Hook_Interrupt(irq, opaque) \
({ \
- int ret = 0; \
+ int ret = 0; \
extern struct vmm_os_hooks * os_hooks; \
if ((os_hooks) && (os_hooks)->hook_interrupt) { \
ret = (os_hooks)->hook_interrupt(irq, opaque); \
#define VMM_VMX_CPU 1
#define VMM_SVM_CPU 2
+
+// Maybe make this a define....
+typedef enum v3_cpu_arch {V3_INVALID_CPU, V3_SVM_CPU, V3_SVM_REV3_CPU, V3_VMX_CPU} v3_cpu_arch_t;
+
+
#endif //!__V3VEE__
+
//
//
// This is the interrupt state that the VMM's interrupt handlers need to see
//
struct vmm_intr_state {
- uint_t irq;
- uint_t error;
+ unsigned int irq;
+ unsigned int error;
- uint_t should_ack; // Should the vmm ack this interrupt, or will
+ unsigned int should_ack; // Should the vmm ack this interrupt, or will
// the host OS do it?
// This is the value given when the interrupt is hooked.
// int (*hook_interrupt)(struct guest_info *s, int irq);
- int (*hook_interrupt)(uint_t irq, void *opaque);
+ int (*hook_interrupt)(unsigned int irq, void *opaque);
int (*ack_irq)(int irq);
void (*start_kernel_thread)(); // include pointer to function
-};
+};
+
+
/* This will contain Function pointers that control the VMs */
struct vmm_ctrl_ops {
- int (*init_guest)(struct guest_info* info);
+ struct guest_info *(*allocate_guest)();
+
+ int (*config_guest)(struct guest_info * info, void * config_ptr);
+ int (*init_guest)(struct guest_info * info);
int (*start_guest)(struct guest_info * info);
// int (*stop_vm)(uint_t vm_id);
int (*has_nested_paging)();
+
+ // v3_cpu_arch_t (*get_cpu_arch)();
};