4 * Copyright (C) 2014 Red Hat Inc
7 * Marcel Apfelbaum <marcel.a@redhat.com>
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
);
28 ms
->accel
= g_strdup(value
);
31 static bool machine_get_kernel_irqchip(Object
*obj
, Error
**errp
)
33 MachineState
*ms
= MACHINE(obj
);
35 return ms
->kernel_irqchip
;
38 static void machine_set_kernel_irqchip(Object
*obj
, bool value
, Error
**errp
)
40 MachineState
*ms
= MACHINE(obj
);
42 ms
->kernel_irqchip
= value
;
45 static void machine_get_kvm_shadow_mem(Object
*obj
, Visitor
*v
,
46 void *opaque
, const char *name
,
49 MachineState
*ms
= MACHINE(obj
);
50 int64_t value
= ms
->kvm_shadow_mem
;
52 visit_type_int(v
, &value
, name
, errp
);
55 static void machine_set_kvm_shadow_mem(Object
*obj
, Visitor
*v
,
56 void *opaque
, const char *name
,
59 MachineState
*ms
= MACHINE(obj
);
63 visit_type_int(v
, &value
, name
, &error
);
65 error_propagate(errp
, error
);
69 ms
->kvm_shadow_mem
= value
;
72 static char *machine_get_kernel(Object
*obj
, Error
**errp
)
74 MachineState
*ms
= MACHINE(obj
);
76 return g_strdup(ms
->kernel_filename
);
79 static void machine_set_kernel(Object
*obj
, const char *value
, Error
**errp
)
81 MachineState
*ms
= MACHINE(obj
);
83 g_free(ms
->kernel_filename
);
84 ms
->kernel_filename
= g_strdup(value
);
87 static char *machine_get_initrd(Object
*obj
, Error
**errp
)
89 MachineState
*ms
= MACHINE(obj
);
91 return g_strdup(ms
->initrd_filename
);
94 static void machine_set_initrd(Object
*obj
, const char *value
, Error
**errp
)
96 MachineState
*ms
= MACHINE(obj
);
98 g_free(ms
->initrd_filename
);
99 ms
->initrd_filename
= g_strdup(value
);
102 static char *machine_get_append(Object
*obj
, Error
**errp
)
104 MachineState
*ms
= MACHINE(obj
);
106 return g_strdup(ms
->kernel_cmdline
);
109 static void machine_set_append(Object
*obj
, const char *value
, Error
**errp
)
111 MachineState
*ms
= MACHINE(obj
);
113 g_free(ms
->kernel_cmdline
);
114 ms
->kernel_cmdline
= g_strdup(value
);
117 static char *machine_get_dtb(Object
*obj
, Error
**errp
)
119 MachineState
*ms
= MACHINE(obj
);
121 return g_strdup(ms
->dtb
);
124 static void machine_set_dtb(Object
*obj
, const char *value
, Error
**errp
)
126 MachineState
*ms
= MACHINE(obj
);
129 ms
->dtb
= g_strdup(value
);
132 static char *machine_get_dumpdtb(Object
*obj
, Error
**errp
)
134 MachineState
*ms
= MACHINE(obj
);
136 return g_strdup(ms
->dumpdtb
);
139 static void machine_set_dumpdtb(Object
*obj
, const char *value
, Error
**errp
)
141 MachineState
*ms
= MACHINE(obj
);
144 ms
->dumpdtb
= g_strdup(value
);
147 static void machine_get_phandle_start(Object
*obj
, Visitor
*v
,
148 void *opaque
, const char *name
,
151 MachineState
*ms
= MACHINE(obj
);
152 int64_t value
= ms
->phandle_start
;
154 visit_type_int(v
, &value
, name
, errp
);
157 static void machine_set_phandle_start(Object
*obj
, Visitor
*v
,
158 void *opaque
, const char *name
,
161 MachineState
*ms
= MACHINE(obj
);
165 visit_type_int(v
, &value
, name
, &error
);
167 error_propagate(errp
, error
);
171 ms
->phandle_start
= value
;
174 static char *machine_get_dt_compatible(Object
*obj
, Error
**errp
)
176 MachineState
*ms
= MACHINE(obj
);
178 return g_strdup(ms
->dt_compatible
);
181 static void machine_set_dt_compatible(Object
*obj
, const char *value
, Error
**errp
)
183 MachineState
*ms
= MACHINE(obj
);
185 g_free(ms
->dt_compatible
);
186 ms
->dt_compatible
= g_strdup(value
);
189 static bool machine_get_dump_guest_core(Object
*obj
, Error
**errp
)
191 MachineState
*ms
= MACHINE(obj
);
193 return ms
->dump_guest_core
;
196 static void machine_set_dump_guest_core(Object
*obj
, bool value
, Error
**errp
)
198 MachineState
*ms
= MACHINE(obj
);
200 ms
->dump_guest_core
= value
;
203 static bool machine_get_mem_merge(Object
*obj
, Error
**errp
)
205 MachineState
*ms
= MACHINE(obj
);
207 return ms
->mem_merge
;
210 static void machine_set_mem_merge(Object
*obj
, bool value
, Error
**errp
)
212 MachineState
*ms
= MACHINE(obj
);
214 ms
->mem_merge
= value
;
217 static bool machine_get_usb(Object
*obj
, Error
**errp
)
219 MachineState
*ms
= MACHINE(obj
);
224 static void machine_set_usb(Object
*obj
, bool value
, Error
**errp
)
226 MachineState
*ms
= MACHINE(obj
);
231 static char *machine_get_firmware(Object
*obj
, Error
**errp
)
233 MachineState
*ms
= MACHINE(obj
);
235 return g_strdup(ms
->firmware
);
238 static void machine_set_firmware(Object
*obj
, const char *value
, Error
**errp
)
240 MachineState
*ms
= MACHINE(obj
);
242 g_free(ms
->firmware
);
243 ms
->firmware
= g_strdup(value
);
246 static bool machine_get_iommu(Object
*obj
, Error
**errp
)
248 MachineState
*ms
= MACHINE(obj
);
253 static void machine_set_iommu(Object
*obj
, bool value
, Error
**errp
)
255 MachineState
*ms
= MACHINE(obj
);
260 static void machine_initfn(Object
*obj
)
262 object_property_add_str(obj
, "accel",
263 machine_get_accel
, machine_set_accel
, NULL
);
264 object_property_add_bool(obj
, "kernel-irqchip",
265 machine_get_kernel_irqchip
,
266 machine_set_kernel_irqchip
,
268 object_property_add(obj
, "kvm-shadow-mem", "int",
269 machine_get_kvm_shadow_mem
,
270 machine_set_kvm_shadow_mem
,
272 object_property_add_str(obj
, "kernel",
273 machine_get_kernel
, machine_set_kernel
, NULL
);
274 object_property_add_str(obj
, "initrd",
275 machine_get_initrd
, machine_set_initrd
, NULL
);
276 object_property_add_str(obj
, "append",
277 machine_get_append
, machine_set_append
, NULL
);
278 object_property_add_str(obj
, "dtb",
279 machine_get_dtb
, machine_set_dtb
, NULL
);
280 object_property_add_str(obj
, "dumpdtb",
281 machine_get_dumpdtb
, machine_set_dumpdtb
, NULL
);
282 object_property_add(obj
, "phandle-start", "int",
283 machine_get_phandle_start
,
284 machine_set_phandle_start
,
286 object_property_add_str(obj
, "dt-compatible",
287 machine_get_dt_compatible
,
288 machine_set_dt_compatible
,
290 object_property_add_bool(obj
, "dump-guest-core",
291 machine_get_dump_guest_core
,
292 machine_set_dump_guest_core
,
294 object_property_add_bool(obj
, "mem-merge",
295 machine_get_mem_merge
,
296 machine_set_mem_merge
, NULL
);
297 object_property_add_bool(obj
, "usb",
299 machine_set_usb
, NULL
);
300 object_property_add_str(obj
, "firmware",
301 machine_get_firmware
,
302 machine_set_firmware
, NULL
);
303 object_property_add_bool(obj
, "iommu",
305 machine_set_iommu
, NULL
);
308 static void machine_finalize(Object
*obj
)
310 MachineState
*ms
= MACHINE(obj
);
313 g_free(ms
->kernel_filename
);
314 g_free(ms
->initrd_filename
);
315 g_free(ms
->kernel_cmdline
);
318 g_free(ms
->dt_compatible
);
319 g_free(ms
->firmware
);
322 static const TypeInfo machine_info
= {
323 .name
= TYPE_MACHINE
,
324 .parent
= TYPE_OBJECT
,
326 .class_size
= sizeof(MachineClass
),
327 .instance_size
= sizeof(MachineState
),
328 .instance_init
= machine_initfn
,
329 .instance_finalize
= machine_finalize
,
332 static void machine_register_types(void)
334 type_register_static(&machine_info
);
337 type_init(machine_register_types
)