xref: /qemu/include/hw/misc/unimp.h (revision f5095aa3805f8cf91c4df6e7e1dab0d914bc40bc)
1*f5095aa3SPeter Maydell /*
2*f5095aa3SPeter Maydell  * "Unimplemented" device
3*f5095aa3SPeter Maydell  *
4*f5095aa3SPeter Maydell  * Copyright Linaro Limited, 2017
5*f5095aa3SPeter Maydell  * Written by Peter Maydell
6*f5095aa3SPeter Maydell  */
7*f5095aa3SPeter Maydell 
8*f5095aa3SPeter Maydell #ifndef HW_MISC_UNIMP_H
9*f5095aa3SPeter Maydell #define HW_MISC_UNIMP_H
10*f5095aa3SPeter Maydell 
11*f5095aa3SPeter Maydell #define TYPE_UNIMPLEMENTED_DEVICE "unimplemented-device"
12*f5095aa3SPeter Maydell 
13*f5095aa3SPeter Maydell /**
14*f5095aa3SPeter Maydell  * create_unimplemented_device: create and map a dummy device
15*f5095aa3SPeter Maydell  * @name: name of the device for debug logging
16*f5095aa3SPeter Maydell  * @base: base address of the device's MMIO region
17*f5095aa3SPeter Maydell  * @size: size of the device's MMIO region
18*f5095aa3SPeter Maydell  *
19*f5095aa3SPeter Maydell  * This utility function creates and maps an instance of unimplemented-device,
20*f5095aa3SPeter Maydell  * which is a dummy device which simply logs all guest accesses to
21*f5095aa3SPeter Maydell  * it via the qemu_log LOG_UNIMP debug log.
22*f5095aa3SPeter Maydell  * The device is mapped at priority -1000, which means that you can
23*f5095aa3SPeter Maydell  * use it to cover a large region and then map other devices on top of it
24*f5095aa3SPeter Maydell  * if necessary.
25*f5095aa3SPeter Maydell  */
26*f5095aa3SPeter Maydell static inline void create_unimplemented_device(const char *name,
27*f5095aa3SPeter Maydell                                                hwaddr base,
28*f5095aa3SPeter Maydell                                                hwaddr size)
29*f5095aa3SPeter Maydell {
30*f5095aa3SPeter Maydell     DeviceState *dev = qdev_create(NULL, TYPE_UNIMPLEMENTED_DEVICE);
31*f5095aa3SPeter Maydell 
32*f5095aa3SPeter Maydell     qdev_prop_set_string(dev, "name", name);
33*f5095aa3SPeter Maydell     qdev_prop_set_uint64(dev, "size", size);
34*f5095aa3SPeter Maydell     qdev_init_nofail(dev);
35*f5095aa3SPeter Maydell 
36*f5095aa3SPeter Maydell     sysbus_mmio_map_overlap(SYS_BUS_DEVICE(dev), 0, base, -1000);
37*f5095aa3SPeter Maydell }
38*f5095aa3SPeter Maydell 
39*f5095aa3SPeter Maydell #endif
40