/[dynamips]/upstream/dynamips-0.2.7-RC1/dev_ram.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /upstream/dynamips-0.2.7-RC1/dev_ram.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

upstream/dynamips-0.2.6-RC2/dev_ram.c revision 3 by dpavlin, Sat Oct 6 16:05:34 2007 UTC upstream/dynamips-0.2.7-RC1/dev_ram.c revision 7 by dpavlin, Sat Oct 6 16:23:47 2007 UTC
# Line 1  Line 1 
1  /*  /*
2   * Cisco C7200 (Predator) RAM emulation   * Cisco router simulation platform.
3   * Copyright (c) 2006 Christophe Fillot.  All rights reserved.   * Copyright (c) 2006 Christophe Fillot.  All rights reserved.
4     *
5     * RAM emulation.
6   */   */
7    
8  #include <stdio.h>  #include <stdio.h>
# Line 10  Line 12 
12  #include <errno.h>  #include <errno.h>
13  #include <unistd.h>  #include <unistd.h>
14    
15  #include "mips64.h"  #include "cpu.h"
16    #include "vm.h"
17  #include "dynamips.h"  #include "dynamips.h"
18  #include "memory.h"  #include "memory.h"
19  #include "device.h"  #include "device.h"
# Line 20  struct ram_data { Line 23  struct ram_data {
23     vm_obj_t vm_obj;     vm_obj_t vm_obj;
24     struct vdevice *dev;     struct vdevice *dev;
25     char *filename;     char *filename;
26       int delete_file;
27  };  };
28    
29  /* Shutdown a RAM device */  /* Shutdown a RAM device */
# Line 31  void dev_ram_shutdown(vm_instance_t *vm, Line 35  void dev_ram_shutdown(vm_instance_t *vm,
35        free(d->dev);        free(d->dev);
36    
37        /* Remove filename used to virtualize RAM */        /* Remove filename used to virtualize RAM */
38        if (d->filename) {        if (d->filename && d->delete_file) {
39           unlink(d->filename);           unlink(d->filename);
40           free(d->filename);           free(d->filename);
41        }        }
# Line 42  void dev_ram_shutdown(vm_instance_t *vm, Line 46  void dev_ram_shutdown(vm_instance_t *vm,
46  }  }
47    
48  /* Initialize a RAM zone */  /* Initialize a RAM zone */
49  int dev_ram_init(vm_instance_t *vm,char *name,int use_mmap,  int dev_ram_init(vm_instance_t *vm,char *name,int use_mmap,int delete_file,
50                     char *alternate_name,int sparse,
51                   m_uint64_t paddr,m_uint32_t len)                   m_uint64_t paddr,m_uint32_t len)
52  {  {
53     struct ram_data *d;     struct ram_data *d;
# Line 54  int dev_ram_init(vm_instance_t *vm,char Line 59  int dev_ram_init(vm_instance_t *vm,char
59     }     }
60    
61     memset(d,0,sizeof(*d));     memset(d,0,sizeof(*d));
62       d->delete_file = delete_file;
63    
64     vm_object_init(&d->vm_obj);     vm_object_init(&d->vm_obj);
65     d->vm_obj.name = name;     d->vm_obj.name = name;
66     d->vm_obj.data = d;     d->vm_obj.data = d;
67     d->vm_obj.shutdown = (vm_shutdown_t)dev_ram_shutdown;     d->vm_obj.shutdown = (vm_shutdown_t)dev_ram_shutdown;
68    
69     if (use_mmap && !(d->filename = vm_build_filename(vm,name))) {     if (use_mmap) {
70        fprintf(stderr,"RAM: unable to create filename.\n");        if (!alternate_name)
71        goto err_filename;           d->filename = vm_build_filename(vm,name);
72          else
73             d->filename = strdup(alternate_name);
74    
75          if (!d->filename) {
76             fprintf(stderr,"RAM: unable to create filename.\n");
77             goto err_filename;
78          }
79     }     }
80    
81     if (!(d->dev = dev_create_ram(vm,name,d->filename,paddr,len))) {     if (!(d->dev = dev_create_ram(vm,name,sparse,d->filename,paddr,len))) {
82        fprintf(stderr,"RAM: unable to create device.\n");        fprintf(stderr,"RAM: unable to create device.\n");
83        goto err_dev_create;        goto err_dev_create;
84     }     }
85    
86       vm_object_add(vm,&d->vm_obj);
87       return(0);
88    
89     err_dev_create:
90       free(d->filename);
91     err_filename:
92       free(d);
93       return(-1);
94    }
95    
96    /* Initialize a ghosted RAM zone */
97    int dev_ram_ghost_init(vm_instance_t *vm,char *name,int sparse,char *filename,
98                           m_uint64_t paddr,m_uint32_t len)
99    {
100       struct ram_data *d;
101    
102       /* allocate the private data structure */
103       if (!filename || !(d = malloc(sizeof(*d)))) {
104          fprintf(stderr,"RAM_ghost: unable to create device.\n");
105          return(-1);
106       }
107    
108       memset(d,0,sizeof(*d));
109       d->delete_file = FALSE;
110    
111       if (!(d->filename = strdup(filename)))
112          goto err_filename;
113    
114       vm_object_init(&d->vm_obj);
115       d->vm_obj.name = name;
116       d->vm_obj.data = d;
117       d->vm_obj.shutdown = (vm_shutdown_t)dev_ram_shutdown;
118    
119       if (!(d->dev = dev_create_ghost_ram(vm,name,sparse,d->filename,
120                                           paddr,len)))
121       {
122          fprintf(stderr,"RAM_ghost: unable to create device.\n");
123          goto err_dev_create;
124       }
125    
126     vm_object_add(vm,&d->vm_obj);     vm_object_add(vm,&d->vm_obj);
127     return(0);     return(0);
128    

Legend:
Removed from v.3  
changed lines
  Added in v.7

  ViewVC Help
Powered by ViewVC 1.1.26