Esempio n. 1
0
File: vm.c Progetto: ibara/retrobsd
/* Create a new VM instance */
vm_instance_t *vm_create (const char *name, int machine_type)
{
    vm_instance_t *vm;
    int i;

    vm = malloc (sizeof (*vm));
    if (!vm) {
        fprintf (stderr, "VM %s: unable to create new instance!\n", name);
        return NULL;
    }

    memset (vm, 0, sizeof (*vm));
    vm->type = machine_type;
    vm->status = VM_STATUS_HALTED;
    vm->jit_use = 0;
    vm->vtty_type[0] = VTTY_TYPE_TERM;
    for (i=1; i<NVTTY; i++)
        vm->vtty_type[i] = VTTY_TYPE_NONE;
    //vm->timer_irq_check_itv = VM_TIMER_IRQ_CHECK_ITV;
    //vm->log_file_enabled = TRUE;

    vm->name = strdup (name);
    if (!name) {
        fprintf (stderr, "VM %s: unable to store instance name!\n", name);
        goto err_name;
    }

    /* create log file */
    if (vm_create_log (vm) == -1) {
        free (vm->name);
      err_name:
        free (vm);
        return NULL;
    }
    return vm;
}
Esempio n. 2
0
/* Create a new VM instance */
static vm_instance_t *vm_create(char *name,int instance_id,
                                vm_platform_t *platform)
{
   vm_instance_t *vm;

   if (!(vm = malloc(sizeof(*vm)))) {
      fprintf(stderr,"VM %s: unable to create new instance!\n",name);
      return NULL;
   }
   
   memset(vm,0,sizeof(*vm));

   if (!(vm->name = strdup(name))) {
      fprintf(stderr,"VM %s: unable to store instance name!\n",name);
      goto err_name;
   }

   vm->instance_id          = instance_id;
   vm->platform             = platform;
   vm->status               = VM_STATUS_HALTED;
   vm->jit_use              = JIT_SUPPORT;
   vm->exec_blk_direct_jump = TRUE;
   vm->vtty_con_type        = VTTY_TYPE_TERM;
   vm->vtty_aux_type        = VTTY_TYPE_NONE;
   vm->timer_irq_check_itv  = VM_TIMER_IRQ_CHECK_ITV;
   vm->log_file_enabled     = TRUE;
   vm->rommon_vars.filename = vm_build_filename(vm,"rommon_vars");

   if (!vm->rommon_vars.filename)
      goto err_rommon;

   /* XXX */
   rommon_load_file(&vm->rommon_vars);

   /* create lock file */
   if (vm_get_lock(vm) == -1)
      goto err_lock;
   
   /* create log file */
   if (vm_create_log(vm) == -1)
      goto err_log;

   if (registry_add(vm->name,OBJ_TYPE_VM,vm) == -1) {
      fprintf(stderr,"VM: Unable to store instance '%s' in registry!\n",
              vm->name);
      goto err_reg_add;
   }

   m_log("VM","VM %s created.\n",vm->name);
   return vm;

 err_reg_add:
   vm_close_log(vm);
 err_log:
   free(vm->lock_file);
 err_lock:
   free(vm->rommon_vars.filename);
 err_rommon:
   free(vm->name);
 err_name:
   free(vm);
   return NULL;
}