root / qemu-config.c @ 5a2d0e57
History | View | Annotate | Download (5.5 kB)
1 | 7282a033 | Gerd Hoffmann | #include "qemu-common.h" |
---|---|---|---|
2 | 7282a033 | Gerd Hoffmann | #include "qemu-option.h" |
3 | 7282a033 | Gerd Hoffmann | #include "qemu-config.h" |
4 | a861c453 | Gerd Hoffmann | #include "sysemu.h" |
5 | 7282a033 | Gerd Hoffmann | |
6 | 7282a033 | Gerd Hoffmann | QemuOptsList qemu_drive_opts = { |
7 | 7282a033 | Gerd Hoffmann | .name = "drive",
|
8 | 72cf2d4f | Blue Swirl | .head = QTAILQ_HEAD_INITIALIZER(qemu_drive_opts.head), |
9 | 7282a033 | Gerd Hoffmann | .desc = { |
10 | 7282a033 | Gerd Hoffmann | { |
11 | 7282a033 | Gerd Hoffmann | .name = "bus",
|
12 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
13 | 7282a033 | Gerd Hoffmann | .help = "bus number",
|
14 | 7282a033 | Gerd Hoffmann | },{ |
15 | 7282a033 | Gerd Hoffmann | .name = "unit",
|
16 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
17 | 7282a033 | Gerd Hoffmann | .help = "unit number (i.e. lun for scsi)",
|
18 | 7282a033 | Gerd Hoffmann | },{ |
19 | 7282a033 | Gerd Hoffmann | .name = "if",
|
20 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
21 | 7282a033 | Gerd Hoffmann | .help = "interface (ide, scsi, sd, mtd, floppy, pflash, virtio)",
|
22 | 7282a033 | Gerd Hoffmann | },{ |
23 | 7282a033 | Gerd Hoffmann | .name = "index",
|
24 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
25 | 7282a033 | Gerd Hoffmann | },{ |
26 | 7282a033 | Gerd Hoffmann | .name = "cyls",
|
27 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
28 | 7282a033 | Gerd Hoffmann | .help = "number of cylinders (ide disk geometry)",
|
29 | 7282a033 | Gerd Hoffmann | },{ |
30 | 7282a033 | Gerd Hoffmann | .name = "heads",
|
31 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
32 | 7282a033 | Gerd Hoffmann | .help = "number of heads (ide disk geometry)",
|
33 | 7282a033 | Gerd Hoffmann | },{ |
34 | 7282a033 | Gerd Hoffmann | .name = "secs",
|
35 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
36 | 7282a033 | Gerd Hoffmann | .help = "number of sectors (ide disk geometry)",
|
37 | 7282a033 | Gerd Hoffmann | },{ |
38 | 7282a033 | Gerd Hoffmann | .name = "trans",
|
39 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
40 | 7282a033 | Gerd Hoffmann | .help = "chs translation (auto, lba. none)",
|
41 | 7282a033 | Gerd Hoffmann | },{ |
42 | 7282a033 | Gerd Hoffmann | .name = "media",
|
43 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
44 | 7282a033 | Gerd Hoffmann | .help = "media type (disk, cdrom)",
|
45 | 7282a033 | Gerd Hoffmann | },{ |
46 | 7282a033 | Gerd Hoffmann | .name = "snapshot",
|
47 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
48 | 7282a033 | Gerd Hoffmann | },{ |
49 | 7282a033 | Gerd Hoffmann | .name = "file",
|
50 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
51 | 7282a033 | Gerd Hoffmann | .help = "disk image",
|
52 | 7282a033 | Gerd Hoffmann | },{ |
53 | 7282a033 | Gerd Hoffmann | .name = "cache",
|
54 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
55 | 7282a033 | Gerd Hoffmann | .help = "host cache usage (none, writeback, writethrough)",
|
56 | 7282a033 | Gerd Hoffmann | },{ |
57 | 5c6c3a6c | Christoph Hellwig | .name = "aio",
|
58 | 5c6c3a6c | Christoph Hellwig | .type = QEMU_OPT_STRING, |
59 | 5c6c3a6c | Christoph Hellwig | .help = "host AIO implementation (threads, native)",
|
60 | 5c6c3a6c | Christoph Hellwig | },{ |
61 | 7282a033 | Gerd Hoffmann | .name = "format",
|
62 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
63 | 7282a033 | Gerd Hoffmann | .help = "disk format (raw, qcow2, ...)",
|
64 | 7282a033 | Gerd Hoffmann | },{ |
65 | 7282a033 | Gerd Hoffmann | .name = "serial",
|
66 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
67 | 7282a033 | Gerd Hoffmann | },{ |
68 | 7282a033 | Gerd Hoffmann | .name = "werror",
|
69 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
70 | 7282a033 | Gerd Hoffmann | },{ |
71 | 7282a033 | Gerd Hoffmann | .name = "addr",
|
72 | 7282a033 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
73 | 7282a033 | Gerd Hoffmann | .help = "pci address (virtio only)",
|
74 | 7282a033 | Gerd Hoffmann | }, |
75 | 7282a033 | Gerd Hoffmann | { /* end if list */ }
|
76 | 7282a033 | Gerd Hoffmann | }, |
77 | 7282a033 | Gerd Hoffmann | }; |
78 | 7282a033 | Gerd Hoffmann | |
79 | 191bc01b | Gerd Hoffmann | QemuOptsList qemu_chardev_opts = { |
80 | 191bc01b | Gerd Hoffmann | .name = "chardev",
|
81 | 72cf2d4f | Blue Swirl | .head = QTAILQ_HEAD_INITIALIZER(qemu_chardev_opts.head), |
82 | 191bc01b | Gerd Hoffmann | .desc = { |
83 | 7d31544f | Gerd Hoffmann | { |
84 | 7d31544f | Gerd Hoffmann | .name = "backend",
|
85 | 7d31544f | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
86 | 7d31544f | Gerd Hoffmann | },{ |
87 | 7d31544f | Gerd Hoffmann | .name = "path",
|
88 | 7d31544f | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
89 | aeb2c47a | Gerd Hoffmann | },{ |
90 | aeb2c47a | Gerd Hoffmann | .name = "host",
|
91 | aeb2c47a | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
92 | aeb2c47a | Gerd Hoffmann | },{ |
93 | aeb2c47a | Gerd Hoffmann | .name = "port",
|
94 | aeb2c47a | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
95 | aeb2c47a | Gerd Hoffmann | },{ |
96 | 7e1b35b4 | Gerd Hoffmann | .name = "localaddr",
|
97 | 7e1b35b4 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
98 | 7e1b35b4 | Gerd Hoffmann | },{ |
99 | 7e1b35b4 | Gerd Hoffmann | .name = "localport",
|
100 | 7e1b35b4 | Gerd Hoffmann | .type = QEMU_OPT_STRING, |
101 | 7e1b35b4 | Gerd Hoffmann | },{ |
102 | aeb2c47a | Gerd Hoffmann | .name = "to",
|
103 | aeb2c47a | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
104 | aeb2c47a | Gerd Hoffmann | },{ |
105 | aeb2c47a | Gerd Hoffmann | .name = "ipv4",
|
106 | aeb2c47a | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
107 | aeb2c47a | Gerd Hoffmann | },{ |
108 | aeb2c47a | Gerd Hoffmann | .name = "ipv6",
|
109 | aeb2c47a | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
110 | aeb2c47a | Gerd Hoffmann | },{ |
111 | aeb2c47a | Gerd Hoffmann | .name = "wait",
|
112 | aeb2c47a | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
113 | aeb2c47a | Gerd Hoffmann | },{ |
114 | aeb2c47a | Gerd Hoffmann | .name = "server",
|
115 | aeb2c47a | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
116 | aeb2c47a | Gerd Hoffmann | },{ |
117 | aeb2c47a | Gerd Hoffmann | .name = "delay",
|
118 | aeb2c47a | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
119 | aeb2c47a | Gerd Hoffmann | },{ |
120 | aeb2c47a | Gerd Hoffmann | .name = "telnet",
|
121 | aeb2c47a | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
122 | 6ea314d9 | Gerd Hoffmann | },{ |
123 | 6ea314d9 | Gerd Hoffmann | .name = "width",
|
124 | 6ea314d9 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
125 | 6ea314d9 | Gerd Hoffmann | },{ |
126 | 6ea314d9 | Gerd Hoffmann | .name = "height",
|
127 | 6ea314d9 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
128 | 6ea314d9 | Gerd Hoffmann | },{ |
129 | 6ea314d9 | Gerd Hoffmann | .name = "cols",
|
130 | 6ea314d9 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
131 | 6ea314d9 | Gerd Hoffmann | },{ |
132 | 6ea314d9 | Gerd Hoffmann | .name = "rows",
|
133 | 6ea314d9 | Gerd Hoffmann | .type = QEMU_OPT_NUMBER, |
134 | c845f401 | Gerd Hoffmann | },{ |
135 | c845f401 | Gerd Hoffmann | .name = "mux",
|
136 | c845f401 | Gerd Hoffmann | .type = QEMU_OPT_BOOL, |
137 | 7d31544f | Gerd Hoffmann | }, |
138 | 191bc01b | Gerd Hoffmann | { /* end if list */ }
|
139 | 191bc01b | Gerd Hoffmann | }, |
140 | 191bc01b | Gerd Hoffmann | }; |
141 | 191bc01b | Gerd Hoffmann | |
142 | f31d07d1 | Gerd Hoffmann | QemuOptsList qemu_device_opts = { |
143 | f31d07d1 | Gerd Hoffmann | .name = "device",
|
144 | 72cf2d4f | Blue Swirl | .head = QTAILQ_HEAD_INITIALIZER(qemu_device_opts.head), |
145 | f31d07d1 | Gerd Hoffmann | .desc = { |
146 | f31d07d1 | Gerd Hoffmann | /*
|
147 | f31d07d1 | Gerd Hoffmann | * no elements => accept any
|
148 | f31d07d1 | Gerd Hoffmann | * sanity checking will happen later
|
149 | f31d07d1 | Gerd Hoffmann | * when setting device properties
|
150 | f31d07d1 | Gerd Hoffmann | */
|
151 | f31d07d1 | Gerd Hoffmann | { /* end if list */ }
|
152 | f31d07d1 | Gerd Hoffmann | }, |
153 | f31d07d1 | Gerd Hoffmann | }; |
154 | f31d07d1 | Gerd Hoffmann | |
155 | 1ed2fc1f | Jan Kiszka | QemuOptsList qemu_rtc_opts = { |
156 | 1ed2fc1f | Jan Kiszka | .name = "rtc",
|
157 | 1ed2fc1f | Jan Kiszka | .head = QTAILQ_HEAD_INITIALIZER(qemu_rtc_opts.head), |
158 | 1ed2fc1f | Jan Kiszka | .desc = { |
159 | 1ed2fc1f | Jan Kiszka | { |
160 | 1ed2fc1f | Jan Kiszka | .name = "base",
|
161 | 1ed2fc1f | Jan Kiszka | .type = QEMU_OPT_STRING, |
162 | 6875204c | Jan Kiszka | },{ |
163 | 6875204c | Jan Kiszka | .name = "clock",
|
164 | 6875204c | Jan Kiszka | .type = QEMU_OPT_STRING, |
165 | 1ed2fc1f | Jan Kiszka | #ifdef TARGET_I386
|
166 | 1ed2fc1f | Jan Kiszka | },{ |
167 | 1ed2fc1f | Jan Kiszka | .name = "driftfix",
|
168 | 1ed2fc1f | Jan Kiszka | .type = QEMU_OPT_STRING, |
169 | 1ed2fc1f | Jan Kiszka | #endif
|
170 | 1ed2fc1f | Jan Kiszka | }, |
171 | 1ed2fc1f | Jan Kiszka | { /* end if list */ }
|
172 | 1ed2fc1f | Jan Kiszka | }, |
173 | 1ed2fc1f | Jan Kiszka | }; |
174 | 1ed2fc1f | Jan Kiszka | |
175 | d058fe03 | Gerd Hoffmann | static QemuOptsList *lists[] = {
|
176 | d058fe03 | Gerd Hoffmann | &qemu_drive_opts, |
177 | 191bc01b | Gerd Hoffmann | &qemu_chardev_opts, |
178 | f31d07d1 | Gerd Hoffmann | &qemu_device_opts, |
179 | d058fe03 | Gerd Hoffmann | NULL,
|
180 | d058fe03 | Gerd Hoffmann | }; |
181 | d058fe03 | Gerd Hoffmann | |
182 | d058fe03 | Gerd Hoffmann | int qemu_set_option(const char *str) |
183 | d058fe03 | Gerd Hoffmann | { |
184 | d058fe03 | Gerd Hoffmann | char group[64], id[64], arg[64]; |
185 | d058fe03 | Gerd Hoffmann | QemuOpts *opts; |
186 | d058fe03 | Gerd Hoffmann | int i, rc, offset;
|
187 | d058fe03 | Gerd Hoffmann | |
188 | d058fe03 | Gerd Hoffmann | rc = sscanf(str, "%63[^.].%63[^.].%63[^=]%n", group, id, arg, &offset);
|
189 | d058fe03 | Gerd Hoffmann | if (rc < 3 || str[offset] != '=') { |
190 | a861c453 | Gerd Hoffmann | qemu_error("can't parse: \"%s\"\n", str);
|
191 | d058fe03 | Gerd Hoffmann | return -1; |
192 | d058fe03 | Gerd Hoffmann | } |
193 | d058fe03 | Gerd Hoffmann | |
194 | d058fe03 | Gerd Hoffmann | for (i = 0; lists[i] != NULL; i++) { |
195 | d058fe03 | Gerd Hoffmann | if (strcmp(lists[i]->name, group) == 0) |
196 | d058fe03 | Gerd Hoffmann | break;
|
197 | d058fe03 | Gerd Hoffmann | } |
198 | d058fe03 | Gerd Hoffmann | if (lists[i] == NULL) { |
199 | a861c453 | Gerd Hoffmann | qemu_error("there is no option group \"%s\"\n", group);
|
200 | d058fe03 | Gerd Hoffmann | return -1; |
201 | d058fe03 | Gerd Hoffmann | } |
202 | d058fe03 | Gerd Hoffmann | |
203 | d058fe03 | Gerd Hoffmann | opts = qemu_opts_find(lists[i], id); |
204 | d058fe03 | Gerd Hoffmann | if (!opts) {
|
205 | a861c453 | Gerd Hoffmann | qemu_error("there is no %s \"%s\" defined\n",
|
206 | d058fe03 | Gerd Hoffmann | lists[i]->name, id); |
207 | d058fe03 | Gerd Hoffmann | return -1; |
208 | d058fe03 | Gerd Hoffmann | } |
209 | d058fe03 | Gerd Hoffmann | |
210 | 3df04ac3 | Mark McLoughlin | if (qemu_opt_set(opts, arg, str+offset+1) == -1) { |
211 | a861c453 | Gerd Hoffmann | qemu_error("failed to set \"%s\" for %s \"%s\"\n",
|
212 | d058fe03 | Gerd Hoffmann | arg, lists[i]->name, id); |
213 | d058fe03 | Gerd Hoffmann | return -1; |
214 | d058fe03 | Gerd Hoffmann | } |
215 | d058fe03 | Gerd Hoffmann | return 0; |
216 | d058fe03 | Gerd Hoffmann | } |