root / qemu-config.c @ 64e58fe5
History | View | Annotate | Download (6.1 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 | 5989020b | Kusanagi Kouichi | },{ |
138 | 5989020b | Kusanagi Kouichi | .name = "signal",
|
139 | 5989020b | Kusanagi Kouichi | .type = QEMU_OPT_BOOL, |
140 | 7d31544f | Gerd Hoffmann | }, |
141 | 191bc01b | Gerd Hoffmann | { /* end if list */ }
|
142 | 191bc01b | Gerd Hoffmann | }, |
143 | 191bc01b | Gerd Hoffmann | }; |
144 | 191bc01b | Gerd Hoffmann | |
145 | f31d07d1 | Gerd Hoffmann | QemuOptsList qemu_device_opts = { |
146 | f31d07d1 | Gerd Hoffmann | .name = "device",
|
147 | 72cf2d4f | Blue Swirl | .head = QTAILQ_HEAD_INITIALIZER(qemu_device_opts.head), |
148 | f31d07d1 | Gerd Hoffmann | .desc = { |
149 | f31d07d1 | Gerd Hoffmann | /*
|
150 | f31d07d1 | Gerd Hoffmann | * no elements => accept any
|
151 | f31d07d1 | Gerd Hoffmann | * sanity checking will happen later
|
152 | f31d07d1 | Gerd Hoffmann | * when setting device properties
|
153 | f31d07d1 | Gerd Hoffmann | */
|
154 | f31d07d1 | Gerd Hoffmann | { /* end if list */ }
|
155 | f31d07d1 | Gerd Hoffmann | }, |
156 | f31d07d1 | Gerd Hoffmann | }; |
157 | f31d07d1 | Gerd Hoffmann | |
158 | a1ea458f | Mark McLoughlin | QemuOptsList qemu_netdev_opts = { |
159 | a1ea458f | Mark McLoughlin | .name = "netdev",
|
160 | a1ea458f | Mark McLoughlin | .head = QTAILQ_HEAD_INITIALIZER(qemu_netdev_opts.head), |
161 | a1ea458f | Mark McLoughlin | .desc = { |
162 | a1ea458f | Mark McLoughlin | /*
|
163 | a1ea458f | Mark McLoughlin | * no elements => accept any params
|
164 | a1ea458f | Mark McLoughlin | * validation will happen later
|
165 | a1ea458f | Mark McLoughlin | */
|
166 | a1ea458f | Mark McLoughlin | { /* end of list */ }
|
167 | a1ea458f | Mark McLoughlin | }, |
168 | a1ea458f | Mark McLoughlin | }; |
169 | a1ea458f | Mark McLoughlin | |
170 | 8119b33d | Mark McLoughlin | QemuOptsList qemu_net_opts = { |
171 | 8119b33d | Mark McLoughlin | .name = "net",
|
172 | 8119b33d | Mark McLoughlin | .head = QTAILQ_HEAD_INITIALIZER(qemu_net_opts.head), |
173 | 8119b33d | Mark McLoughlin | .desc = { |
174 | 8119b33d | Mark McLoughlin | /*
|
175 | 8119b33d | Mark McLoughlin | * no elements => accept any params
|
176 | 8119b33d | Mark McLoughlin | * validation will happen later
|
177 | 8119b33d | Mark McLoughlin | */
|
178 | 8119b33d | Mark McLoughlin | { /* end of list */ }
|
179 | 8119b33d | Mark McLoughlin | }, |
180 | 8119b33d | Mark McLoughlin | }; |
181 | 8119b33d | Mark McLoughlin | |
182 | 1ed2fc1f | Jan Kiszka | QemuOptsList qemu_rtc_opts = { |
183 | 1ed2fc1f | Jan Kiszka | .name = "rtc",
|
184 | 1ed2fc1f | Jan Kiszka | .head = QTAILQ_HEAD_INITIALIZER(qemu_rtc_opts.head), |
185 | 1ed2fc1f | Jan Kiszka | .desc = { |
186 | 1ed2fc1f | Jan Kiszka | { |
187 | 1ed2fc1f | Jan Kiszka | .name = "base",
|
188 | 1ed2fc1f | Jan Kiszka | .type = QEMU_OPT_STRING, |
189 | 6875204c | Jan Kiszka | },{ |
190 | 6875204c | Jan Kiszka | .name = "clock",
|
191 | 6875204c | Jan Kiszka | .type = QEMU_OPT_STRING, |
192 | 1ed2fc1f | Jan Kiszka | #ifdef TARGET_I386
|
193 | 1ed2fc1f | Jan Kiszka | },{ |
194 | 1ed2fc1f | Jan Kiszka | .name = "driftfix",
|
195 | 1ed2fc1f | Jan Kiszka | .type = QEMU_OPT_STRING, |
196 | 1ed2fc1f | Jan Kiszka | #endif
|
197 | 1ed2fc1f | Jan Kiszka | }, |
198 | 1ed2fc1f | Jan Kiszka | { /* end if list */ }
|
199 | 1ed2fc1f | Jan Kiszka | }, |
200 | 1ed2fc1f | Jan Kiszka | }; |
201 | 1ed2fc1f | Jan Kiszka | |
202 | d058fe03 | Gerd Hoffmann | static QemuOptsList *lists[] = {
|
203 | d058fe03 | Gerd Hoffmann | &qemu_drive_opts, |
204 | 191bc01b | Gerd Hoffmann | &qemu_chardev_opts, |
205 | f31d07d1 | Gerd Hoffmann | &qemu_device_opts, |
206 | a1ea458f | Mark McLoughlin | &qemu_netdev_opts, |
207 | 8119b33d | Mark McLoughlin | &qemu_net_opts, |
208 | 5fdfbf7e | Jan Kiszka | &qemu_rtc_opts, |
209 | d058fe03 | Gerd Hoffmann | NULL,
|
210 | d058fe03 | Gerd Hoffmann | }; |
211 | d058fe03 | Gerd Hoffmann | |
212 | d058fe03 | Gerd Hoffmann | int qemu_set_option(const char *str) |
213 | d058fe03 | Gerd Hoffmann | { |
214 | d058fe03 | Gerd Hoffmann | char group[64], id[64], arg[64]; |
215 | d058fe03 | Gerd Hoffmann | QemuOpts *opts; |
216 | d058fe03 | Gerd Hoffmann | int i, rc, offset;
|
217 | d058fe03 | Gerd Hoffmann | |
218 | d058fe03 | Gerd Hoffmann | rc = sscanf(str, "%63[^.].%63[^.].%63[^=]%n", group, id, arg, &offset);
|
219 | d058fe03 | Gerd Hoffmann | if (rc < 3 || str[offset] != '=') { |
220 | a861c453 | Gerd Hoffmann | qemu_error("can't parse: \"%s\"\n", str);
|
221 | d058fe03 | Gerd Hoffmann | return -1; |
222 | d058fe03 | Gerd Hoffmann | } |
223 | d058fe03 | Gerd Hoffmann | |
224 | d058fe03 | Gerd Hoffmann | for (i = 0; lists[i] != NULL; i++) { |
225 | d058fe03 | Gerd Hoffmann | if (strcmp(lists[i]->name, group) == 0) |
226 | d058fe03 | Gerd Hoffmann | break;
|
227 | d058fe03 | Gerd Hoffmann | } |
228 | d058fe03 | Gerd Hoffmann | if (lists[i] == NULL) { |
229 | a861c453 | Gerd Hoffmann | qemu_error("there is no option group \"%s\"\n", group);
|
230 | d058fe03 | Gerd Hoffmann | return -1; |
231 | d058fe03 | Gerd Hoffmann | } |
232 | d058fe03 | Gerd Hoffmann | |
233 | d058fe03 | Gerd Hoffmann | opts = qemu_opts_find(lists[i], id); |
234 | d058fe03 | Gerd Hoffmann | if (!opts) {
|
235 | a861c453 | Gerd Hoffmann | qemu_error("there is no %s \"%s\" defined\n",
|
236 | d058fe03 | Gerd Hoffmann | lists[i]->name, id); |
237 | d058fe03 | Gerd Hoffmann | return -1; |
238 | d058fe03 | Gerd Hoffmann | } |
239 | d058fe03 | Gerd Hoffmann | |
240 | 3df04ac3 | Mark McLoughlin | if (qemu_opt_set(opts, arg, str+offset+1) == -1) { |
241 | d058fe03 | Gerd Hoffmann | return -1; |
242 | d058fe03 | Gerd Hoffmann | } |
243 | d058fe03 | Gerd Hoffmann | return 0; |
244 | d058fe03 | Gerd Hoffmann | } |