xref: /qemu/include/hw/misc/vmcoreinfo.h (revision 6e43353f10c6688060af0bc26bdfdd4cf9c96ea2)
1*6e43353fSMarc-André Lureau /*
2*6e43353fSMarc-André Lureau  * Virtual Machine coreinfo device
3*6e43353fSMarc-André Lureau  *
4*6e43353fSMarc-André Lureau  * Copyright (C) 2017 Red Hat, Inc.
5*6e43353fSMarc-André Lureau  *
6*6e43353fSMarc-André Lureau  * Authors: Marc-André Lureau <marcandre.lureau@redhat.com>
7*6e43353fSMarc-André Lureau  *
8*6e43353fSMarc-André Lureau  * This work is licensed under the terms of the GNU GPL, version 2 or later.
9*6e43353fSMarc-André Lureau  * See the COPYING file in the top-level directory.
10*6e43353fSMarc-André Lureau  *
11*6e43353fSMarc-André Lureau  */
12*6e43353fSMarc-André Lureau #ifndef VMCOREINFO_H
13*6e43353fSMarc-André Lureau #define VMCOREINFO_H
14*6e43353fSMarc-André Lureau 
15*6e43353fSMarc-André Lureau #include "hw/qdev.h"
16*6e43353fSMarc-André Lureau 
17*6e43353fSMarc-André Lureau #define VMCOREINFO_DEVICE "vmcoreinfo"
18*6e43353fSMarc-André Lureau #define VMCOREINFO(obj) OBJECT_CHECK(VMCoreInfoState, (obj), VMCOREINFO_DEVICE)
19*6e43353fSMarc-André Lureau 
20*6e43353fSMarc-André Lureau #define VMCOREINFO_FORMAT_NONE 0x0
21*6e43353fSMarc-André Lureau #define VMCOREINFO_FORMAT_ELF 0x1
22*6e43353fSMarc-André Lureau 
23*6e43353fSMarc-André Lureau /* all fields are little-endian */
24*6e43353fSMarc-André Lureau typedef struct FWCfgVMCoreInfo {
25*6e43353fSMarc-André Lureau     uint16_t host_format; /* set on reset */
26*6e43353fSMarc-André Lureau     uint16_t guest_format;
27*6e43353fSMarc-André Lureau     uint32_t size;
28*6e43353fSMarc-André Lureau     uint64_t paddr;
29*6e43353fSMarc-André Lureau } QEMU_PACKED FWCfgVMCoreInfo;
30*6e43353fSMarc-André Lureau 
31*6e43353fSMarc-André Lureau typedef struct VMCoreInfoState {
32*6e43353fSMarc-André Lureau     DeviceClass parent_obj;
33*6e43353fSMarc-André Lureau 
34*6e43353fSMarc-André Lureau     bool has_vmcoreinfo;
35*6e43353fSMarc-André Lureau     FWCfgVMCoreInfo vmcoreinfo;
36*6e43353fSMarc-André Lureau } VMCoreInfoState;
37*6e43353fSMarc-André Lureau 
38*6e43353fSMarc-André Lureau /* returns NULL unless there is exactly one device */
39*6e43353fSMarc-André Lureau static inline VMCoreInfoState *vmcoreinfo_find(void)
40*6e43353fSMarc-André Lureau {
41*6e43353fSMarc-André Lureau     Object *o = object_resolve_path_type("", VMCOREINFO_DEVICE, NULL);
42*6e43353fSMarc-André Lureau 
43*6e43353fSMarc-André Lureau     return o ? VMCOREINFO(o) : NULL;
44*6e43353fSMarc-André Lureau }
45*6e43353fSMarc-André Lureau 
46*6e43353fSMarc-André Lureau #endif
47