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
);
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
)