1e3ece3e3SAndrew Baumann /* 2e3ece3e3SAndrew Baumann * Raspberry Pi emulation (c) 2012 Gregory Estrade 36111a0c0SPhilippe Mathieu-Daudé * 46111a0c0SPhilippe Mathieu-Daudé * This work is licensed under the terms of the GNU GPL, version 2 or later. 56111a0c0SPhilippe Mathieu-Daudé * See the COPYING file in the top-level directory. 6e3ece3e3SAndrew Baumann */ 7e3ece3e3SAndrew Baumann 8e3ece3e3SAndrew Baumann #ifndef BCM2835_IC_H 9e3ece3e3SAndrew Baumann #define BCM2835_IC_H 10e3ece3e3SAndrew Baumann 11e3ece3e3SAndrew Baumann #include "hw/sysbus.h" 12*db1015e9SEduardo Habkost #include "qom/object.h" 13e3ece3e3SAndrew Baumann 14e3ece3e3SAndrew Baumann #define TYPE_BCM2835_IC "bcm2835-ic" 15*db1015e9SEduardo Habkost typedef struct BCM2835ICState BCM2835ICState; 16e3ece3e3SAndrew Baumann #define BCM2835_IC(obj) OBJECT_CHECK(BCM2835ICState, (obj), TYPE_BCM2835_IC) 17e3ece3e3SAndrew Baumann 18e3ece3e3SAndrew Baumann #define BCM2835_IC_GPU_IRQ "gpu-irq" 19e3ece3e3SAndrew Baumann #define BCM2835_IC_ARM_IRQ "arm-irq" 20e3ece3e3SAndrew Baumann 21*db1015e9SEduardo Habkost struct BCM2835ICState { 22e3ece3e3SAndrew Baumann /*< private >*/ 23e3ece3e3SAndrew Baumann SysBusDevice busdev; 24e3ece3e3SAndrew Baumann /*< public >*/ 25e3ece3e3SAndrew Baumann 26e3ece3e3SAndrew Baumann MemoryRegion iomem; 27e3ece3e3SAndrew Baumann qemu_irq irq; 28e3ece3e3SAndrew Baumann qemu_irq fiq; 29e3ece3e3SAndrew Baumann 30e3ece3e3SAndrew Baumann /* 64 GPU IRQs + 8 ARM IRQs = 72 total (GPU first) */ 31e3ece3e3SAndrew Baumann uint64_t gpu_irq_level, gpu_irq_enable; 32e3ece3e3SAndrew Baumann uint8_t arm_irq_level, arm_irq_enable; 33e3ece3e3SAndrew Baumann bool fiq_enable; 34e3ece3e3SAndrew Baumann uint8_t fiq_select; 35*db1015e9SEduardo Habkost }; 36e3ece3e3SAndrew Baumann 37e3ece3e3SAndrew Baumann #endif 38