xref: /qemu/include/hw/timer/arm_mptimer.h (revision db1015e92e04835c9eb50c29625fe566d1202dbd)
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