Example #1
0
/* Initialize a RAM zone */
int dev_ram_init (vm_instance_t * vm, char *name, m_pa_t paddr,
    m_uint32_t len)
{
    struct ram_data *d;

    /* allocate the private data structure */
    if (!(d = malloc (sizeof (*d)))) {
        fprintf (stderr, "RAM: unable to create device.\n");
        return (-1);
    }

    memset (d, 0, sizeof (*d));

    if (!(d->dev = dev_create_ram (vm, name, paddr, len))) {
        fprintf (stderr, "RAM: unable to create device.\n");
        goto err_dev_create;
    }
    d->dev->priv_data = d;
    d->dev->reset_handler = dev_ram_reset;
    return (0);

err_dev_create:
    free (d);
    return (-1);
}
/* Initialize a RAM zone */
int dev_ram_init(vm_instance_t *vm,char *name,int use_mmap,int delete_file,
                 char *alternate_name,int sparse,
                 m_uint64_t paddr,m_uint32_t len)
{
   struct ram_data *d;

   /* allocate the private data structure */
   if (!(d = malloc(sizeof(*d)))) {
      fprintf(stderr,"RAM: unable to create device.\n");
      return(-1);
   }

   memset(d,0,sizeof(*d));
   d->delete_file = delete_file;

   vm_object_init(&d->vm_obj);
   d->vm_obj.name = name;
   d->vm_obj.data = d;
   d->vm_obj.shutdown = (vm_shutdown_t)dev_ram_shutdown;

   if (use_mmap) {
      if (!alternate_name)
         d->filename = vm_build_filename(vm,name);
      else
         d->filename = strdup(alternate_name);

      if (!d->filename) {
         fprintf(stderr,"RAM: unable to create filename.\n");
         goto err_filename;
      }
   }

   if (!(d->dev = dev_create_ram(vm,name,sparse,d->filename,paddr,len))) {
      fprintf(stderr,"RAM: unable to create device.\n");
      goto err_dev_create;
   }

   vm_object_add(vm,&d->vm_obj);
   return(0);

 err_dev_create:
   free(d->filename);
 err_filename:
   free(d);
   return(-1);
}
Example #3
0
/* Initialize an SRAM device */
int dev_c7200_sram_init(vm_instance_t *vm,char *name,
                        m_uint64_t paddr,m_uint32_t len,
                        struct pci_bus *pci_bus,int pci_device)
{
   m_uint64_t alias_paddr;
   struct sram_data *d;

   /* Allocate the private data structure for SRAM */
   if (!(d = malloc(sizeof(*d)))) {
      fprintf(stderr,"dev_c7200_sram_init (%s): out of memory\n",name);
      return(-1);
   }

   memset(d,0,sizeof(*d));

   vm_object_init(&d->vm_obj);
   d->vm_obj.name = name;
   d->vm_obj.data = d;
   d->vm_obj.shutdown = (vm_shutdown_t)dev_c7200_sram_shutdown;

   if (!(d->filename = vm_build_filename(vm,name)))
      return(-1);

   /* add as a pci device */
   d->pci_dev = pci_dev_add_basic(pci_bus,name,
                                  PCI_VENDOR_SRAM,PCI_PRODUCT_SRAM,
                                  pci_device,0);

   alias_paddr = 0x100000000ULL + paddr;
   
   /* create the standard RAM zone */
   if (!(d->dev = dev_create_ram(vm,name,FALSE,d->filename,paddr,len))) {
      fprintf(stderr,"dev_c7200_sram_init: unable to create '%s' file.\n",
              d->filename);
      return(-1);
   }

   /* create the RAM alias */
   if (!(d->alias_dev_name = dyn_sprintf("%s_alias",name))) {
      fprintf(stderr,"dev_c7200_sram_init: unable to create alias name.\n");
      return(-1);
   }

   d->alias_dev = dev_create_ram_alias(vm,d->alias_dev_name,name,
                                       alias_paddr,len);

   if (!d->alias_dev) {
      fprintf(stderr,"dev_c7200_sram_init: unable to create alias device.\n");
      return(-1);
   }

   /* create the byte-swapped zone (used with Galileo DMA) */
   if (!(d->bs_dev_name = dyn_sprintf("%s_bswap",name))) {
      fprintf(stderr,"dev_c7200_sram_init: unable to create BS name.\n");
      return(-1);
   }

   if (dev_bswap_init(vm,d->bs_dev_name,paddr+0x800000,len,paddr) == -1) {
      fprintf(stderr,"dev_c7200_sram_init: unable to create BS device.\n");
      return(-1);
   }
   
   d->bs_obj = vm_object_find(vm,d->bs_dev_name);
   return(0);
}