/* 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);
+
#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);
-typedef enum {NONE, HARDDRIVE, CDROM} v3_disk_type_t;
+typedef enum {NONE, HARDDRIVE, CDROM, VIRTIO} v3_disk_type_t;
typedef enum {RAM, NETWORK} v3_disk_connection_t;
union v3_disk_info {
};
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
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;