4 * Copyright (C) 2014 Red Hat Inc
9 * This work is licensed under the terms of the GNU GPL, version 2 or later.
10 * See the COPYING file in the top-level directory.
13 #include "hw/boards.h"
14 #include "qapi/visitor.h"
16 static char *machine_get_accel(Object *obj, Error **errp)
18 MachineState *ms = MACHINE(obj);
20 return g_strdup(ms->accel);
23 static void machine_set_accel(Object *obj, const char *value, Error **errp)
25 MachineState *ms = MACHINE(obj);
27 ms->accel = g_strdup(value);
30 static bool machine_get_kernel_irqchip(Object *obj, Error **errp)
32 MachineState *ms = MACHINE(obj);
34 return ms->kernel_irqchip;
37 static void machine_set_kernel_irqchip(Object *obj, bool value, Error **errp)
39 MachineState *ms = MACHINE(obj);
41 ms->kernel_irqchip = value;
44 static void machine_get_kvm_shadow_mem(Object *obj, Visitor *v,
45 void *opaque, const char *name,
48 MachineState *ms = MACHINE(obj);
49 int64_t value = ms->kvm_shadow_mem;
51 visit_type_int(v, &value, name, errp);
54 static void machine_set_kvm_shadow_mem(Object *obj, Visitor *v,
55 void *opaque, const char *name,
58 MachineState *ms = MACHINE(obj);
62 visit_type_int(v, &value, name, &error);
64 error_propagate(errp, error);
68 ms->kvm_shadow_mem = value;
71 static char *machine_get_kernel(Object *obj, Error **errp)
73 MachineState *ms = MACHINE(obj);
75 return g_strdup(ms->kernel_filename);
78 static void machine_set_kernel(Object *obj, const char *value, Error **errp)
80 MachineState *ms = MACHINE(obj);
82 ms->kernel_filename = g_strdup(value);
85 static char *machine_get_initrd(Object *obj, Error **errp)
87 MachineState *ms = MACHINE(obj);
89 return g_strdup(ms->initrd_filename);
92 static void machine_set_initrd(Object *obj, const char *value, Error **errp)
94 MachineState *ms = MACHINE(obj);
96 ms->initrd_filename = g_strdup(value);
99 static char *machine_get_append(Object *obj, Error **errp)
101 MachineState *ms = MACHINE(obj);
103 return g_strdup(ms->kernel_cmdline);
106 static void machine_set_append(Object *obj, const char *value, Error **errp)
108 MachineState *ms = MACHINE(obj);
110 ms->kernel_cmdline = g_strdup(value);
113 static char *machine_get_dtb(Object *obj, Error **errp)
115 MachineState *ms = MACHINE(obj);
117 return g_strdup(ms->dtb);
120 static void machine_set_dtb(Object *obj, const char *value, Error **errp)
122 MachineState *ms = MACHINE(obj);
124 ms->dtb = g_strdup(value);
127 static char *machine_get_dumpdtb(Object *obj, Error **errp)
129 MachineState *ms = MACHINE(obj);
131 return g_strdup(ms->dumpdtb);
134 static void machine_set_dumpdtb(Object *obj, const char *value, Error **errp)
136 MachineState *ms = MACHINE(obj);
138 ms->dumpdtb = g_strdup(value);
141 static void machine_get_phandle_start(Object *obj, Visitor *v,
142 void *opaque, const char *name,
145 MachineState *ms = MACHINE(obj);
146 int64_t value = ms->phandle_start;
148 visit_type_int(v, &value, name, errp);
151 static void machine_set_phandle_start(Object *obj, Visitor *v,
152 void *opaque, const char *name,
155 MachineState *ms = MACHINE(obj);
159 visit_type_int(v, &value, name, &error);
161 error_propagate(errp, error);
165 ms->phandle_start = value;
168 static char *machine_get_dt_compatible(Object *obj, Error **errp)
170 MachineState *ms = MACHINE(obj);
172 return g_strdup(ms->dt_compatible);
175 static void machine_set_dt_compatible(Object *obj, const char *value, Error **errp)
177 MachineState *ms = MACHINE(obj);
179 ms->dt_compatible = g_strdup(value);
182 static bool machine_get_dump_guest_core(Object *obj, Error **errp)
184 MachineState *ms = MACHINE(obj);
186 return ms->dump_guest_core;
189 static void machine_set_dump_guest_core(Object *obj, bool value, Error **errp)
191 MachineState *ms = MACHINE(obj);
193 ms->dump_guest_core = value;
196 static bool machine_get_mem_merge(Object *obj, Error **errp)
198 MachineState *ms = MACHINE(obj);
200 return ms->mem_merge;
203 static void machine_set_mem_merge(Object *obj, bool value, Error **errp)
205 MachineState *ms = MACHINE(obj);
207 ms->mem_merge = value;
210 static bool machine_get_usb(Object *obj, Error **errp)
212 MachineState *ms = MACHINE(obj);
217 static void machine_set_usb(Object *obj, bool value, Error **errp)
219 MachineState *ms = MACHINE(obj);
224 static char *machine_get_firmware(Object *obj, Error **errp)
226 MachineState *ms = MACHINE(obj);
228 return g_strdup(ms->firmware);
231 static void machine_set_firmware(Object *obj, const char *value, Error **errp)
233 MachineState *ms = MACHINE(obj);
235 ms->firmware = g_strdup(value);
238 static bool machine_get_iommu(Object *obj, Error **errp)
240 MachineState *ms = MACHINE(obj);
245 static void machine_set_iommu(Object *obj, bool value, Error **errp)
247 MachineState *ms = MACHINE(obj);
252 static void machine_initfn(Object *obj)
254 object_property_add_str(obj, "accel",
255 machine_get_accel, machine_set_accel, NULL);
256 object_property_add_bool(obj, "kernel-irqchip",
257 machine_get_kernel_irqchip,
258 machine_set_kernel_irqchip,
260 object_property_add(obj, "kvm-shadow-mem", "int",
261 machine_get_kvm_shadow_mem,
262 machine_set_kvm_shadow_mem,
264 object_property_add_str(obj, "kernel",
265 machine_get_kernel, machine_set_kernel, NULL);
266 object_property_add_str(obj, "initrd",
267 machine_get_initrd, machine_set_initrd, NULL);
268 object_property_add_str(obj, "append",
269 machine_get_append, machine_set_append, NULL);
270 object_property_add_str(obj, "dtb",
271 machine_get_dtb, machine_set_dtb, NULL);
272 object_property_add_str(obj, "dumpdtb",
273 machine_get_dumpdtb, machine_set_dumpdtb, NULL);
274 object_property_add(obj, "phandle-start", "int",
275 machine_get_phandle_start,
276 machine_set_phandle_start,
278 object_property_add_str(obj, "dt-compatible",
279 machine_get_dt_compatible,
280 machine_set_dt_compatible,
282 object_property_add_bool(obj, "dump-guest-core",
283 machine_get_dump_guest_core,
284 machine_set_dump_guest_core,
286 object_property_add_bool(obj, "mem-merge",
287 machine_get_mem_merge,
288 machine_set_mem_merge, NULL);
289 object_property_add_bool(obj, "usb",
291 machine_set_usb, NULL);
292 object_property_add_str(obj, "firmware",
293 machine_get_firmware,
294 machine_set_firmware, NULL);
295 object_property_add_bool(obj, "iommu",
297 machine_set_iommu, NULL);
300 static void machine_finalize(Object *obj)
302 MachineState *ms = MACHINE(obj);
305 g_free(ms->kernel_filename);
306 g_free(ms->initrd_filename);
307 g_free(ms->kernel_cmdline);
310 g_free(ms->dt_compatible);
311 g_free(ms->firmware);
314 static const TypeInfo machine_info = {
315 .name = TYPE_MACHINE,
316 .parent = TYPE_OBJECT,
318 .class_size = sizeof(MachineClass),
319 .instance_size = sizeof(MachineState),
320 .instance_init = machine_initfn,
321 .instance_finalize = machine_finalize,
324 static void machine_register_types(void)
326 type_register_static(&machine_info);
329 type_init(machine_register_types)