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