/* utility definitions */
+#define V3_Print(fmt, args...) \
+ do { \
+ extern struct v3_os_hooks * os_hooks; \
+ if ((os_hooks) && (os_hooks)->print) { \
+ (os_hooks)->print((fmt), ##args); \
+ } \
+ } while (0)
+
+
#define PrintDebug(fmt, args...) \
do { \
extern struct v3_os_hooks * os_hooks; \
- if ((os_hooks) && (os_hooks)->print_debug) { \
- (os_hooks)->print_debug((fmt), ##args); \
+ if ((os_hooks) && (os_hooks)->print) { \
+ (os_hooks)->print((fmt), ##args); \
} \
} while (0)
-#if 1
-#else
-#define PrintDebug(fmt,args ...)
-#endif
-
-
#define PrintError(fmt, args...) \
do { \
extern struct v3_os_hooks * os_hooks; \
- if ((os_hooks) && (os_hooks)->print_debug) { \
- (os_hooks)->print_debug("%s(%d): " fmt, __FILE__, __LINE__, ##args); \
+ if ((os_hooks) && (os_hooks)->print) { \
+ (os_hooks)->print("%s(%d): " fmt, __FILE__, __LINE__, ##args); \
} \
} while (0)
-#ifdef VMM_INFO
-#define PrintInfo(fmt, args...) \
- do { \
- extern struct v3_os_hooks * os_hooks; \
- if ((os_hooks) && (os_hooks)->print_info) { \
- (os_hooks)->print_info((fmt), ##args); \
- } \
- } while (0)
-#else
-#define PrintInfo(fmt, args...)
-#endif
-
-
-#ifdef VMM_TRACE
-#define PrintTrace(fmt, args...) \
- do { \
- extern struct v3_os_hooks * os_hooks; \
- if ((os_hooks) && (os_hooks)->print_trace) { \
- (os_hooks)->print_trace(fmt, ##args); \
- } \
- } while (0)
-#else
-#define PrintTrace(fmt, args...)
-#endif
-
-
#define V3_AllocPages(num_pages) \
({ \
extern struct v3_os_hooks * os_hooks; \
} while (0)
-#define V3_Yield(addr) \
- do { \
- extern struct v3_os_hooks * os_hooks; \
- if ((os_hooks) && (os_hooks)->yield_cpu) { \
- (os_hooks)->yield_cpu(); \
- } \
- } while (0) \
- \
- \
- \
- \
- \
+
+
+
/* ** */
#define V3_ASSERT(x) \
v3_cpu_mode_t v3_get_host_cpu_mode();
+void v3_yield(struct guest_info * info);
+void v3_yield_cond(struct guest_info * info);
+
+
+void v3_interrupt_cpu(struct guest_info * vm, int logical_cpu);
+
#endif //!__V3VEE__
/* This will contain function pointers that provide OS services */
struct v3_os_hooks {
- void (*print_info)(const char * format, ...)
- __attribute__ ((format (printf, 1, 2)));
- void (*print_debug)(const char * format, ...)
- __attribute__ ((format (printf, 1, 2)));
- void (*print_trace)(const char * format, ...)
+ void (*print)(const char * format, ...)
__attribute__ ((format (printf, 1, 2)));
void *(*allocate_pages)(int numPages);
void *(*paddr_to_vaddr)(void *addr);
void *(*vaddr_to_paddr)(void *addr);
+ void (*interrupt_cpu)(struct guest_info * vm, int logical_cpu);
+
int (*hook_interrupt)(struct guest_info * vm, unsigned int irq);
int (*ack_irq)(int irq);
};
struct v3_vm_config {
- void * rombios;
- int rombios_size;
-
- void * vgabios;
- int vgabios_size;
unsigned long mem_size; // in bytes, var should be natural size of cpu
// so we can specify maximum physical address size
// (We're screwed if we want to do 32 bit host/64 bit guest)
- int enable_profiling;
+ int enable_telemetry;
int enable_nested_paging;
int enable_pci;
int enable_swap;
+ unsigned long schedule_freq; // in HZ
+
v3_disk_type_t pri_disk_type;
v3_disk_connection_t pri_disk_con;
union v3_disk_info pri_disk_info;