1eb110bd8SAndreas Färber /* 2eb110bd8SAndreas Färber * Private peripheral timer/watchdog blocks for ARM 11MPCore and A9MP 3eb110bd8SAndreas Färber * 4eb110bd8SAndreas Färber * Copyright (c) 2006-2007 CodeSourcery. 5eb110bd8SAndreas Färber * Copyright (c) 2011 Linaro Limited 6eb110bd8SAndreas Färber * Written by Paul Brook, Peter Maydell 7eb110bd8SAndreas Färber * 8eb110bd8SAndreas Färber * This program is free software; you can redistribute it and/or 9eb110bd8SAndreas Färber * modify it under the terms of the GNU General Public License 10eb110bd8SAndreas Färber * as published by the Free Software Foundation; either version 11eb110bd8SAndreas Färber * 2 of the License, or (at your option) any later version. 12eb110bd8SAndreas Färber * 13eb110bd8SAndreas Färber * This program is distributed in the hope that it will be useful, 14eb110bd8SAndreas Färber * but WITHOUT ANY WARRANTY; without even the implied warranty of 15eb110bd8SAndreas Färber * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16eb110bd8SAndreas Färber * GNU General Public License for more details. 17eb110bd8SAndreas Färber * 18eb110bd8SAndreas Färber * You should have received a copy of the GNU General Public License along 19eb110bd8SAndreas Färber * with this program; if not, see <http://www.gnu.org/licenses/>. 20eb110bd8SAndreas Färber */ 21eb110bd8SAndreas Färber #ifndef HW_TIMER_ARM_MPTIMER_H 22eb110bd8SAndreas Färber #define HW_TIMER_ARM_MPTIMER_H 23eb110bd8SAndreas Färber 24eb110bd8SAndreas Färber #include "hw/sysbus.h" 25db1015e9SEduardo Habkost #include "qom/object.h" 26eb110bd8SAndreas Färber 27eb110bd8SAndreas Färber #define ARM_MPTIMER_MAX_CPUS 4 28eb110bd8SAndreas Färber 29eb110bd8SAndreas Färber /* State of a single timer or watchdog block */ 30eb110bd8SAndreas Färber typedef struct { 31eb110bd8SAndreas Färber uint32_t control; 32eb110bd8SAndreas Färber uint32_t status; 33226fb5aaSDmitry Osipenko struct ptimer_state *timer; 34eb110bd8SAndreas Färber qemu_irq irq; 35eb110bd8SAndreas Färber MemoryRegion iomem; 36eb110bd8SAndreas Färber } TimerBlock; 37eb110bd8SAndreas Färber 38eb110bd8SAndreas Färber #define TYPE_ARM_MPTIMER "arm_mptimer" 39*8063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(ARMMPTimerState, ARM_MPTIMER) 40eb110bd8SAndreas Färber 41db1015e9SEduardo Habkost struct ARMMPTimerState { 42eb110bd8SAndreas Färber /*< private >*/ 43eb110bd8SAndreas Färber SysBusDevice parent_obj; 44eb110bd8SAndreas Färber /*< public >*/ 45eb110bd8SAndreas Färber 46eb110bd8SAndreas Färber uint32_t num_cpu; 47eb110bd8SAndreas Färber TimerBlock timerblock[ARM_MPTIMER_MAX_CPUS]; 48eb110bd8SAndreas Färber MemoryRegion iomem; 49db1015e9SEduardo Habkost }; 50eb110bd8SAndreas Färber 51eb110bd8SAndreas Färber #endif 52