xref: /qemu/include/hw/timer/aspeed_timer.h (revision 03f1d7201a8ac6adeb3aae8c575f3e67e153c54a)
1c04bd47dSAndrew Jeffery /*
2c04bd47dSAndrew Jeffery  *  ASPEED AST2400 Timer
3c04bd47dSAndrew Jeffery  *
4c04bd47dSAndrew Jeffery  *  Andrew Jeffery <andrew@aj.id.au>
5c04bd47dSAndrew Jeffery  *
6c04bd47dSAndrew Jeffery  *  Copyright (C) 2016 IBM Corp.
7c04bd47dSAndrew Jeffery  *
8c04bd47dSAndrew Jeffery  *  This program is free software; you can redistribute it and/or modify
9c04bd47dSAndrew Jeffery  *  it under the terms of the GNU General Public License as published by
10c04bd47dSAndrew Jeffery  *  the Free Software Foundation; either version 2 of the License, or
11c04bd47dSAndrew Jeffery  *  (at your option) any later version.
12c04bd47dSAndrew Jeffery  *
13c04bd47dSAndrew Jeffery  *  This program is distributed in the hope that it will be useful,
14c04bd47dSAndrew Jeffery  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15c04bd47dSAndrew Jeffery  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16c04bd47dSAndrew Jeffery  *  GNU General Public License for more details.
17c04bd47dSAndrew Jeffery  *
18c04bd47dSAndrew Jeffery  *  You should have received a copy of the GNU General Public License along
19c04bd47dSAndrew Jeffery  *  with this program; if not, write to the Free Software Foundation, Inc.,
20c04bd47dSAndrew Jeffery  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21c04bd47dSAndrew Jeffery  */
22c04bd47dSAndrew Jeffery #ifndef ASPEED_TIMER_H
23c04bd47dSAndrew Jeffery #define ASPEED_TIMER_H
24c04bd47dSAndrew Jeffery 
251d3e65aaSAndrew Jeffery #include "qemu/timer.h"
26*03f1d720SCédric Le Goater #include "hw/misc/aspeed_scu.h"
279b945a9eSCédric Le Goater 
28c04bd47dSAndrew Jeffery #define ASPEED_TIMER(obj) \
29c04bd47dSAndrew Jeffery     OBJECT_CHECK(AspeedTimerCtrlState, (obj), TYPE_ASPEED_TIMER);
30c04bd47dSAndrew Jeffery #define TYPE_ASPEED_TIMER "aspeed.timer"
31c04bd47dSAndrew Jeffery #define ASPEED_TIMER_NR_TIMERS 8
32c04bd47dSAndrew Jeffery 
33c04bd47dSAndrew Jeffery typedef struct AspeedTimer {
34c04bd47dSAndrew Jeffery     qemu_irq irq;
35c04bd47dSAndrew Jeffery 
36c04bd47dSAndrew Jeffery     uint8_t id;
371d3e65aaSAndrew Jeffery     QEMUTimer timer;
38c04bd47dSAndrew Jeffery 
39c04bd47dSAndrew Jeffery     /**
40c04bd47dSAndrew Jeffery      * Track the line level as the ASPEED timers implement edge triggered
41c04bd47dSAndrew Jeffery      * interrupts, signalling with both the rising and falling edge.
42c04bd47dSAndrew Jeffery      */
43c04bd47dSAndrew Jeffery     int32_t level;
44c04bd47dSAndrew Jeffery     uint32_t reload;
45c04bd47dSAndrew Jeffery     uint32_t match[2];
461d3e65aaSAndrew Jeffery     uint64_t start;
47c04bd47dSAndrew Jeffery } AspeedTimer;
48c04bd47dSAndrew Jeffery 
49c04bd47dSAndrew Jeffery typedef struct AspeedTimerCtrlState {
50c04bd47dSAndrew Jeffery     /*< private >*/
51c04bd47dSAndrew Jeffery     SysBusDevice parent;
52c04bd47dSAndrew Jeffery 
53c04bd47dSAndrew Jeffery     /*< public >*/
54c04bd47dSAndrew Jeffery     MemoryRegion iomem;
55c04bd47dSAndrew Jeffery 
56c04bd47dSAndrew Jeffery     uint32_t ctrl;
57c04bd47dSAndrew Jeffery     uint32_t ctrl2;
58c04bd47dSAndrew Jeffery     AspeedTimer timers[ASPEED_TIMER_NR_TIMERS];
599b945a9eSCédric Le Goater 
609b945a9eSCédric Le Goater     AspeedSCUState *scu;
61c04bd47dSAndrew Jeffery } AspeedTimerCtrlState;
62c04bd47dSAndrew Jeffery 
63c04bd47dSAndrew Jeffery #endif /* ASPEED_TIMER_H */
64