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" 25*db1015e9SEduardo 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*db1015e9SEduardo Habkost typedef struct ARMMPTimerState ARMMPTimerState; 40eb110bd8SAndreas Färber #define ARM_MPTIMER(obj) \ 41eb110bd8SAndreas Färber OBJECT_CHECK(ARMMPTimerState, (obj), TYPE_ARM_MPTIMER) 42eb110bd8SAndreas Färber 43*db1015e9SEduardo Habkost struct ARMMPTimerState { 44eb110bd8SAndreas Färber /*< private >*/ 45eb110bd8SAndreas Färber SysBusDevice parent_obj; 46eb110bd8SAndreas Färber /*< public >*/ 47eb110bd8SAndreas Färber 48eb110bd8SAndreas Färber uint32_t num_cpu; 49eb110bd8SAndreas Färber TimerBlock timerblock[ARM_MPTIMER_MAX_CPUS]; 50eb110bd8SAndreas Färber MemoryRegion iomem; 51*db1015e9SEduardo Habkost }; 52eb110bd8SAndreas Färber 53eb110bd8SAndreas Färber #endif 54