/* 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); }
/* 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); }