1 /* 2 * QEMU simulated pvpanic device (MMIO frontend) 3 * 4 * Copyright © 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. 5 * 6 * SPDX-License-Identifier: GPL-2.0-or-later 7 */ 8 9 #include "qemu/osdep.h" 10 11 #include "hw/qdev-properties.h" 12 #include "hw/misc/pvpanic.h" 13 #include "hw/sysbus.h" 14 #include "standard-headers/misc/pvpanic.h" 15 16 OBJECT_DECLARE_SIMPLE_TYPE(PVPanicMMIOState, PVPANIC_MMIO_DEVICE) 17 18 #define PVPANIC_MMIO_SIZE 0x2 19 20 struct PVPanicMMIOState { 21 SysBusDevice parent_obj; 22 23 PVPanicState pvpanic; 24 }; 25 26 static void pvpanic_mmio_initfn(Object *obj) 27 { 28 PVPanicMMIOState *s = PVPANIC_MMIO_DEVICE(obj); 29 30 pvpanic_setup_io(&s->pvpanic, DEVICE(s), PVPANIC_MMIO_SIZE); 31 sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->pvpanic.mr); 32 } 33 34 static const Property pvpanic_mmio_properties[] = { 35 DEFINE_PROP_UINT8("events", PVPanicMMIOState, pvpanic.events, 36 PVPANIC_PANICKED | PVPANIC_CRASH_LOADED), 37 }; 38 39 static void pvpanic_mmio_class_init(ObjectClass *klass, const void *data) 40 { 41 DeviceClass *dc = DEVICE_CLASS(klass); 42 43 device_class_set_props(dc, pvpanic_mmio_properties); 44 set_bit(DEVICE_CATEGORY_MISC, dc->categories); 45 } 46 47 static const TypeInfo pvpanic_mmio_info = { 48 .name = TYPE_PVPANIC_MMIO_DEVICE, 49 .parent = TYPE_SYS_BUS_DEVICE, 50 .instance_size = sizeof(PVPanicMMIOState), 51 .instance_init = pvpanic_mmio_initfn, 52 .class_init = pvpanic_mmio_class_init, 53 }; 54 55 static void pvpanic_register_types(void) 56 { 57 type_register_static(&pvpanic_mmio_info); 58 } 59 60 type_init(pvpanic_register_types) 61