/[dynamips]/trunk/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

Annotation of /trunk/dev_ram.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7 - (hide annotations)
Sat Oct 6 16:23:47 2007 UTC (16 years, 5 months ago) by dpavlin
Original Path: upstream/dynamips-0.2.7-RC1/dev_ram.c
File MIME type: text/plain
File size: 3048 byte(s)
dynamips-0.2.7-RC1

1 dpavlin 1 /*
2 dpavlin 7 * Cisco router simulation platform.
3 dpavlin 1 * Copyright (c) 2006 Christophe Fillot. All rights reserved.
4 dpavlin 7 *
5     * RAM emulation.
6 dpavlin 1 */
7    
8     #include <stdio.h>
9     #include <stdlib.h>
10     #include <string.h>
11     #include <time.h>
12     #include <errno.h>
13     #include <unistd.h>
14    
15 dpavlin 7 #include "cpu.h"
16     #include "vm.h"
17 dpavlin 1 #include "dynamips.h"
18     #include "memory.h"
19     #include "device.h"
20    
21     /* RAM private data */
22     struct ram_data {
23     vm_obj_t vm_obj;
24     struct vdevice *dev;
25     char *filename;
26 dpavlin 4 int delete_file;
27 dpavlin 1 };
28    
29     /* Shutdown a RAM device */
30     void dev_ram_shutdown(vm_instance_t *vm,struct ram_data *d)
31     {
32     if (d != NULL) {
33     /* Remove the device */
34     dev_remove(vm,d->dev);
35     free(d->dev);
36    
37     /* Remove filename used to virtualize RAM */
38 dpavlin 4 if (d->filename && d->delete_file) {
39 dpavlin 1 unlink(d->filename);
40     free(d->filename);
41     }
42    
43     /* Free the structure itself */
44     free(d);
45     }
46     }
47    
48     /* Initialize a RAM zone */
49 dpavlin 4 int dev_ram_init(vm_instance_t *vm,char *name,int use_mmap,int delete_file,
50 dpavlin 7 char *alternate_name,int sparse,
51     m_uint64_t paddr,m_uint32_t len)
52 dpavlin 1 {
53     struct ram_data *d;
54    
55     /* allocate the private data structure */
56     if (!(d = malloc(sizeof(*d)))) {
57     fprintf(stderr,"RAM: unable to create device.\n");
58     return(-1);
59     }
60    
61     memset(d,0,sizeof(*d));
62 dpavlin 4 d->delete_file = delete_file;
63 dpavlin 1
64     vm_object_init(&d->vm_obj);
65     d->vm_obj.name = name;
66     d->vm_obj.data = d;
67     d->vm_obj.shutdown = (vm_shutdown_t)dev_ram_shutdown;
68    
69 dpavlin 4 if (use_mmap) {
70     if (!alternate_name)
71     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 dpavlin 1 }
80    
81 dpavlin 7 if (!(d->dev = dev_create_ram(vm,name,sparse,d->filename,paddr,len))) {
82 dpavlin 1 fprintf(stderr,"RAM: unable to create device.\n");
83     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 dpavlin 4
96     /* Initialize a ghosted RAM zone */
97 dpavlin 7 int dev_ram_ghost_init(vm_instance_t *vm,char *name,int sparse,char *filename,
98 dpavlin 4 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 dpavlin 7 if (!(d->dev = dev_create_ghost_ram(vm,name,sparse,d->filename,
120     paddr,len)))
121     {
122 dpavlin 4 fprintf(stderr,"RAM_ghost: unable to create device.\n");
123     goto err_dev_create;
124     }
125    
126     vm_object_add(vm,&d->vm_obj);
127     return(0);
128    
129     err_dev_create:
130     free(d->filename);
131     err_filename:
132     free(d);
133     return(-1);
134     }

  ViewVC Help
Powered by ViewVC 1.1.26