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