1d05be883SPhilippe Mathieu-Daudé /* 2d05be883SPhilippe Mathieu-Daudé * BCM2835 SYS timer emulation 3d05be883SPhilippe Mathieu-Daudé * 4d05be883SPhilippe Mathieu-Daudé * Copyright (c) 2019 Philippe Mathieu-Daudé <f4bug@amsat.org> 5d05be883SPhilippe Mathieu-Daudé * 6d05be883SPhilippe Mathieu-Daudé * SPDX-License-Identifier: GPL-2.0-or-later 7d05be883SPhilippe Mathieu-Daudé */ 8d05be883SPhilippe Mathieu-Daudé 9d05be883SPhilippe Mathieu-Daudé #ifndef BCM2835_SYSTIMER_H 10d05be883SPhilippe Mathieu-Daudé #define BCM2835_SYSTIMER_H 11d05be883SPhilippe Mathieu-Daudé 12d05be883SPhilippe Mathieu-Daudé #include "hw/sysbus.h" 13d05be883SPhilippe Mathieu-Daudé #include "hw/irq.h" 14*db1015e9SEduardo Habkost #include "qom/object.h" 15d05be883SPhilippe Mathieu-Daudé 16d05be883SPhilippe Mathieu-Daudé #define TYPE_BCM2835_SYSTIMER "bcm2835-sys-timer" 17*db1015e9SEduardo Habkost typedef struct BCM2835SystemTimerState BCM2835SystemTimerState; 18d05be883SPhilippe Mathieu-Daudé #define BCM2835_SYSTIMER(obj) \ 19d05be883SPhilippe Mathieu-Daudé OBJECT_CHECK(BCM2835SystemTimerState, (obj), TYPE_BCM2835_SYSTIMER) 20d05be883SPhilippe Mathieu-Daudé 21*db1015e9SEduardo Habkost struct BCM2835SystemTimerState { 22d05be883SPhilippe Mathieu-Daudé /*< private >*/ 23d05be883SPhilippe Mathieu-Daudé SysBusDevice parent_obj; 24d05be883SPhilippe Mathieu-Daudé 25d05be883SPhilippe Mathieu-Daudé /*< public >*/ 26d05be883SPhilippe Mathieu-Daudé MemoryRegion iomem; 27d05be883SPhilippe Mathieu-Daudé qemu_irq irq; 28d05be883SPhilippe Mathieu-Daudé 29d05be883SPhilippe Mathieu-Daudé struct { 30d05be883SPhilippe Mathieu-Daudé uint32_t status; 31d05be883SPhilippe Mathieu-Daudé uint32_t compare[4]; 32d05be883SPhilippe Mathieu-Daudé } reg; 33*db1015e9SEduardo Habkost }; 34d05be883SPhilippe Mathieu-Daudé 35d05be883SPhilippe Mathieu-Daudé #endif 36