machine.c 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. /*
  2. * QEMU Machine
  3. *
  4. * Copyright (C) 2014 Red Hat Inc
  5. *
  6. * Authors:
  7. * Marcel Apfelbaum <marcel.a@redhat.com>
  8. *
  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.
  11. */
  12. #include "hw/boards.h"
  13. #include "qapi/visitor.h"
  14. static char *machine_get_accel(Object *obj, Error **errp)
  15. {
  16. MachineState *ms = MACHINE(obj);
  17. return g_strdup(ms->accel);
  18. }
  19. static void machine_set_accel(Object *obj, const char *value, Error **errp)
  20. {
  21. MachineState *ms = MACHINE(obj);
  22. g_free(ms->accel);
  23. ms->accel = g_strdup(value);
  24. }
  25. static bool machine_get_kernel_irqchip(Object *obj, Error **errp)
  26. {
  27. MachineState *ms = MACHINE(obj);
  28. return ms->kernel_irqchip;
  29. }
  30. static void machine_set_kernel_irqchip(Object *obj, bool value, Error **errp)
  31. {
  32. MachineState *ms = MACHINE(obj);
  33. ms->kernel_irqchip = value;
  34. }
  35. static void machine_get_kvm_shadow_mem(Object *obj, Visitor *v,
  36. void *opaque, const char *name,
  37. Error **errp)
  38. {
  39. MachineState *ms = MACHINE(obj);
  40. int64_t value = ms->kvm_shadow_mem;
  41. visit_type_int(v, &value, name, errp);
  42. }
  43. static void machine_set_kvm_shadow_mem(Object *obj, Visitor *v,
  44. void *opaque, const char *name,
  45. Error **errp)
  46. {
  47. MachineState *ms = MACHINE(obj);
  48. Error *error = NULL;
  49. int64_t value;
  50. visit_type_int(v, &value, name, &error);
  51. if (error) {
  52. error_propagate(errp, error);
  53. return;
  54. }
  55. ms->kvm_shadow_mem = value;
  56. }
  57. static char *machine_get_kernel(Object *obj, Error **errp)
  58. {
  59. MachineState *ms = MACHINE(obj);
  60. return g_strdup(ms->kernel_filename);
  61. }
  62. static void machine_set_kernel(Object *obj, const char *value, Error **errp)
  63. {
  64. MachineState *ms = MACHINE(obj);
  65. g_free(ms->kernel_filename);
  66. ms->kernel_filename = g_strdup(value);
  67. }
  68. static char *machine_get_initrd(Object *obj, Error **errp)
  69. {
  70. MachineState *ms = MACHINE(obj);
  71. return g_strdup(ms->initrd_filename);
  72. }
  73. static void machine_set_initrd(Object *obj, const char *value, Error **errp)
  74. {
  75. MachineState *ms = MACHINE(obj);
  76. g_free(ms->initrd_filename);
  77. ms->initrd_filename = g_strdup(value);
  78. }
  79. static char *machine_get_append(Object *obj, Error **errp)
  80. {
  81. MachineState *ms = MACHINE(obj);
  82. return g_strdup(ms->kernel_cmdline);
  83. }
  84. static void machine_set_append(Object *obj, const char *value, Error **errp)
  85. {
  86. MachineState *ms = MACHINE(obj);
  87. g_free(ms->kernel_cmdline);
  88. ms->kernel_cmdline = g_strdup(value);
  89. }
  90. static char *machine_get_dtb(Object *obj, Error **errp)
  91. {
  92. MachineState *ms = MACHINE(obj);
  93. return g_strdup(ms->dtb);
  94. }
  95. static void machine_set_dtb(Object *obj, const char *value, Error **errp)
  96. {
  97. MachineState *ms = MACHINE(obj);
  98. g_free(ms->dtb);
  99. ms->dtb = g_strdup(value);
  100. }
  101. static char *machine_get_dumpdtb(Object *obj, Error **errp)
  102. {
  103. MachineState *ms = MACHINE(obj);
  104. return g_strdup(ms->dumpdtb);
  105. }
  106. static void machine_set_dumpdtb(Object *obj, const char *value, Error **errp)
  107. {
  108. MachineState *ms = MACHINE(obj);
  109. g_free(ms->dumpdtb);
  110. ms->dumpdtb = g_strdup(value);
  111. }
  112. static void machine_get_phandle_start(Object *obj, Visitor *v,
  113. void *opaque, const char *name,
  114. Error **errp)
  115. {
  116. MachineState *ms = MACHINE(obj);
  117. int64_t value = ms->phandle_start;
  118. visit_type_int(v, &value, name, errp);
  119. }
  120. static void machine_set_phandle_start(Object *obj, Visitor *v,
  121. void *opaque, const char *name,
  122. Error **errp)
  123. {
  124. MachineState *ms = MACHINE(obj);
  125. Error *error = NULL;
  126. int64_t value;
  127. visit_type_int(v, &value, name, &error);
  128. if (error) {
  129. error_propagate(errp, error);
  130. return;
  131. }
  132. ms->phandle_start = value;
  133. }
  134. static char *machine_get_dt_compatible(Object *obj, Error **errp)
  135. {
  136. MachineState *ms = MACHINE(obj);
  137. return g_strdup(ms->dt_compatible);
  138. }
  139. static void machine_set_dt_compatible(Object *obj, const char *value, Error **errp)
  140. {
  141. MachineState *ms = MACHINE(obj);
  142. g_free(ms->dt_compatible);
  143. ms->dt_compatible = g_strdup(value);
  144. }
  145. static bool machine_get_dump_guest_core(Object *obj, Error **errp)
  146. {
  147. MachineState *ms = MACHINE(obj);
  148. return ms->dump_guest_core;
  149. }
  150. static void machine_set_dump_guest_core(Object *obj, bool value, Error **errp)
  151. {
  152. MachineState *ms = MACHINE(obj);
  153. ms->dump_guest_core = value;
  154. }
  155. static bool machine_get_mem_merge(Object *obj, Error **errp)
  156. {
  157. MachineState *ms = MACHINE(obj);
  158. return ms->mem_merge;
  159. }
  160. static void machine_set_mem_merge(Object *obj, bool value, Error **errp)
  161. {
  162. MachineState *ms = MACHINE(obj);
  163. ms->mem_merge = value;
  164. }
  165. static bool machine_get_usb(Object *obj, Error **errp)
  166. {
  167. MachineState *ms = MACHINE(obj);
  168. return ms->usb;
  169. }
  170. static void machine_set_usb(Object *obj, bool value, Error **errp)
  171. {
  172. MachineState *ms = MACHINE(obj);
  173. ms->usb = value;
  174. }
  175. static char *machine_get_firmware(Object *obj, Error **errp)
  176. {
  177. MachineState *ms = MACHINE(obj);
  178. return g_strdup(ms->firmware);
  179. }
  180. static void machine_set_firmware(Object *obj, const char *value, Error **errp)
  181. {
  182. MachineState *ms = MACHINE(obj);
  183. g_free(ms->firmware);
  184. ms->firmware = g_strdup(value);
  185. }
  186. static void machine_initfn(Object *obj)
  187. {
  188. object_property_add_str(obj, "accel",
  189. machine_get_accel, machine_set_accel, NULL);
  190. object_property_add_bool(obj, "kernel-irqchip",
  191. machine_get_kernel_irqchip,
  192. machine_set_kernel_irqchip,
  193. NULL);
  194. object_property_add(obj, "kvm-shadow-mem", "int",
  195. machine_get_kvm_shadow_mem,
  196. machine_set_kvm_shadow_mem,
  197. NULL, NULL, NULL);
  198. object_property_add_str(obj, "kernel",
  199. machine_get_kernel, machine_set_kernel, NULL);
  200. object_property_add_str(obj, "initrd",
  201. machine_get_initrd, machine_set_initrd, NULL);
  202. object_property_add_str(obj, "append",
  203. machine_get_append, machine_set_append, NULL);
  204. object_property_add_str(obj, "dtb",
  205. machine_get_dtb, machine_set_dtb, NULL);
  206. object_property_add_str(obj, "dumpdtb",
  207. machine_get_dumpdtb, machine_set_dumpdtb, NULL);
  208. object_property_add(obj, "phandle-start", "int",
  209. machine_get_phandle_start,
  210. machine_set_phandle_start,
  211. NULL, NULL, NULL);
  212. object_property_add_str(obj, "dt-compatible",
  213. machine_get_dt_compatible,
  214. machine_set_dt_compatible,
  215. NULL);
  216. object_property_add_bool(obj, "dump-guest-core",
  217. machine_get_dump_guest_core,
  218. machine_set_dump_guest_core,
  219. NULL);
  220. object_property_add_bool(obj, "mem-merge",
  221. machine_get_mem_merge, machine_set_mem_merge, NULL);
  222. object_property_add_bool(obj, "usb", machine_get_usb, machine_set_usb, NULL);
  223. object_property_add_str(obj, "firmware",
  224. machine_get_firmware, machine_set_firmware, NULL);
  225. }
  226. static void machine_finalize(Object *obj)
  227. {
  228. MachineState *ms = MACHINE(obj);
  229. g_free(ms->accel);
  230. g_free(ms->kernel_filename);
  231. g_free(ms->initrd_filename);
  232. g_free(ms->kernel_cmdline);
  233. g_free(ms->dtb);
  234. g_free(ms->dumpdtb);
  235. g_free(ms->dt_compatible);
  236. g_free(ms->firmware);
  237. }
  238. static const TypeInfo machine_info = {
  239. .name = TYPE_MACHINE,
  240. .parent = TYPE_OBJECT,
  241. .abstract = true,
  242. .class_size = sizeof(MachineClass),
  243. .instance_size = sizeof(MachineState),
  244. .instance_init = machine_initfn,
  245. .instance_finalize = machine_finalize,
  246. };
  247. static void machine_register_types(void)
  248. {
  249. type_register_static(&machine_info);
  250. }
  251. type_init(machine_register_types)