V3_init_vnet();
#endif
+
+#ifdef CONFIG_MULTITHREAD_OS
if ((hooks) && (hooks->call_on_cpu)) {
for (i = 0; i < num_cpus; i++) {
hooks->call_on_cpu(i, &init_cpu, (void *)(addr_t)i);
}
}
+#else
+ init_cpu(0);
+#endif
+
}
return 0;
}
-
+#ifdef CONFIG_MULTITHREAD_OS
// For the moment very ugly. Eventually we will shift the cpu_mask to an arbitrary sized type...
#define MAX_CORES 32
-int v3_start_vm(struct v3_vm_info * vm, unsigned int cpu_mask) {
+
+static int start_vm_multicore(struct v3_vm_info * vm, unsigned int cpu_mask) {
uint32_t i;
char tname[16];
int vcore_id = 0;
return 0;
}
+#endif
+
+
+int v3_start_vm(struct v3_vm_info * vm, unsigned int cpu_mask) {
+#ifdef CONFIG_MULTITHREAD_OS
+ return start_vm_multicore(vm, cpu_mask);
+#else
+ return start_core(&(vm->cores[0]));
+#endif
+}
+
+
+int v3_stop_vm(struct v3_vm_info * vm) {
+
+ vm->run_state = VM_STOPPED;
+
+
+ // force exit all cores via a cross call/IPI
+
+ // Wait for all cores to enter CORE_STOPPED state
+
+ // deinitialize guest (free memory, etc...)
+
+ return 0;
+}
#ifdef __V3_32BIT__
}
-
+#ifdef CONFIG_MULTITHREAD_OS
void v3_interrupt_cpu(struct v3_vm_info * vm, int logical_cpu, int vector) {
extern struct v3_os_hooks * os_hooks;
(os_hooks)->interrupt_cpu(vm, logical_cpu, vector);
}
}
-
-
-
-unsigned int v3_get_cpu_id() {
- extern struct v3_os_hooks * os_hooks;
- unsigned int ret = (unsigned int)-1;
-
- if ((os_hooks) && (os_hooks)->get_cpu) {
- ret = os_hooks->get_cpu();
- }
-
- return ret;
-}
+#endif