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