xref: /qemu/hw/intc/realview_gic.c (revision a32134aad891bd7b6cfa72b8f5ae2290bbe6fdda)
19ee6e8bbSpbrook /*
29ee6e8bbSpbrook  * ARM RealView Emulation Baseboard Interrupt Controller
39ee6e8bbSpbrook  *
49ee6e8bbSpbrook  * Copyright (c) 2006-2007 CodeSourcery.
59ee6e8bbSpbrook  * Written by Paul Brook
69ee6e8bbSpbrook  *
78e31bf38SMatthew Fernandez  * This code is licensed under the GPL.
89ee6e8bbSpbrook  */
99ee6e8bbSpbrook 
10fe7e8758SPaul Brook #include "sysbus.h"
119ee6e8bbSpbrook 
129ee6e8bbSpbrook #define NCPU 1
139ee6e8bbSpbrook 
149ee6e8bbSpbrook /* Only a single "CPU" interface is present.  */
159ee6e8bbSpbrook static inline int
169ee6e8bbSpbrook gic_get_current_cpu(void)
179ee6e8bbSpbrook {
189ee6e8bbSpbrook   return 0;
199ee6e8bbSpbrook }
209ee6e8bbSpbrook 
219ee6e8bbSpbrook #include "arm_gic.c"
229ee6e8bbSpbrook 
23fe7e8758SPaul Brook typedef struct {
24fe7e8758SPaul Brook     gic_state gic;
25755c0802SAvi Kivity     MemoryRegion container;
26fe7e8758SPaul Brook } RealViewGICState;
27fe7e8758SPaul Brook 
28755c0802SAvi Kivity static void realview_gic_map_setup(RealViewGICState *s)
299ee6e8bbSpbrook {
30755c0802SAvi Kivity     memory_region_init(&s->container, "realview-gic-container", 0x2000);
31c3ffa595SPeter Maydell     memory_region_add_subregion(&s->container, 0, &s->gic.cpuiomem[0]);
32755c0802SAvi Kivity     memory_region_add_subregion(&s->container, 0x1000, &s->gic.iomem);
339ee6e8bbSpbrook }
34fe7e8758SPaul Brook 
3581a322d4SGerd Hoffmann static int realview_gic_init(SysBusDevice *dev)
36fe7e8758SPaul Brook {
37fe7e8758SPaul Brook     RealViewGICState *s = FROM_SYSBUSGIC(RealViewGICState, dev);
38fe7e8758SPaul Brook 
39*a32134aaSMark Langsdorf     /* The GICs on the RealView boards have a fixed nonconfigurable
40*a32134aaSMark Langsdorf      * number of interrupt lines, so we don't need to expose this as
41*a32134aaSMark Langsdorf      * a qdev property.
42*a32134aaSMark Langsdorf      */
43*a32134aaSMark Langsdorf     gic_init(&s->gic, 96);
44755c0802SAvi Kivity     realview_gic_map_setup(s);
45750ecd44SAvi Kivity     sysbus_init_mmio(dev, &s->container);
4681a322d4SGerd Hoffmann     return 0;
47fe7e8758SPaul Brook }
48fe7e8758SPaul Brook 
49fe7e8758SPaul Brook static void realview_gic_register_devices(void)
50fe7e8758SPaul Brook {
51fe7e8758SPaul Brook     sysbus_register_dev("realview_gic", sizeof(RealViewGICState),
52fe7e8758SPaul Brook                         realview_gic_init);
53fe7e8758SPaul Brook }
54fe7e8758SPaul Brook 
55fe7e8758SPaul Brook device_init(realview_gic_register_devices)
56