1 /* 2 * Samsung exynos4210 Interrupt Combiner 3 * 4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. 5 * All rights reserved. 6 * 7 * Evgeny Voevodin <e.voevodin@samsung.com> 8 * 9 * This program is free software; you can redistribute it and/or modify it 10 * under the terms of the GNU General Public License as published by the 11 * Free Software Foundation; either version 2 of the License, or (at your 12 * option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 17 * See the GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License along 20 * with this program; if not, see <http://www.gnu.org/licenses/>. 21 */ 22 23 #ifndef HW_INTC_EXYNOS4210_COMBINER 24 #define HW_INTC_EXYNOS4210_COMBINER 25 26 #include "hw/sysbus.h" 27 28 /* 29 * State for each output signal of internal combiner 30 */ 31 typedef struct CombinerGroupState { 32 uint8_t src_mask; /* 1 - source enabled, 0 - disabled */ 33 uint8_t src_pending; /* Pending source interrupts before masking */ 34 } CombinerGroupState; 35 36 #define TYPE_EXYNOS4210_COMBINER "exynos4210.combiner" 37 OBJECT_DECLARE_SIMPLE_TYPE(Exynos4210CombinerState, EXYNOS4210_COMBINER) 38 39 /* Number of groups and total number of interrupts for the internal combiner */ 40 #define IIC_NGRP 64 41 #define IIC_NIRQ (IIC_NGRP * 8) 42 #define IIC_REGSET_SIZE 0x41 43 44 struct Exynos4210CombinerState { 45 SysBusDevice parent_obj; 46 47 MemoryRegion iomem; 48 49 struct CombinerGroupState group[IIC_NGRP]; 50 uint32_t reg_set[IIC_REGSET_SIZE]; 51 uint32_t icipsr[2]; 52 uint32_t external; /* 1 means that this combiner is external */ 53 54 qemu_irq output_irq[IIC_NGRP]; 55 }; 56 57 #endif 58