xref: /qemu/include/hw/timer/aspeed_timer.h (revision 1d3e65aa7ac5afb6798c222abd923eff49ac55f0)
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 
25*1d3e65aaSAndrew Jeffery #include "qemu/timer.h"
26c04bd47dSAndrew Jeffery 
27c04bd47dSAndrew Jeffery #define ASPEED_TIMER(obj) \
28c04bd47dSAndrew Jeffery     OBJECT_CHECK(AspeedTimerCtrlState, (obj), TYPE_ASPEED_TIMER);
29c04bd47dSAndrew Jeffery #define TYPE_ASPEED_TIMER "aspeed.timer"
30c04bd47dSAndrew Jeffery #define ASPEED_TIMER_NR_TIMERS 8
31c04bd47dSAndrew Jeffery 
32c04bd47dSAndrew Jeffery typedef struct AspeedTimer {
33c04bd47dSAndrew Jeffery     qemu_irq irq;
34c04bd47dSAndrew Jeffery 
35c04bd47dSAndrew Jeffery     uint8_t id;
36*1d3e65aaSAndrew Jeffery     QEMUTimer timer;
37c04bd47dSAndrew Jeffery 
38c04bd47dSAndrew Jeffery     /**
39c04bd47dSAndrew Jeffery      * Track the line level as the ASPEED timers implement edge triggered
40c04bd47dSAndrew Jeffery      * interrupts, signalling with both the rising and falling edge.
41c04bd47dSAndrew Jeffery      */
42c04bd47dSAndrew Jeffery     int32_t level;
43c04bd47dSAndrew Jeffery     uint32_t reload;
44c04bd47dSAndrew Jeffery     uint32_t match[2];
45*1d3e65aaSAndrew Jeffery     uint64_t start;
46c04bd47dSAndrew Jeffery } AspeedTimer;
47c04bd47dSAndrew Jeffery 
48c04bd47dSAndrew Jeffery typedef struct AspeedTimerCtrlState {
49c04bd47dSAndrew Jeffery     /*< private >*/
50c04bd47dSAndrew Jeffery     SysBusDevice parent;
51c04bd47dSAndrew Jeffery 
52c04bd47dSAndrew Jeffery     /*< public >*/
53c04bd47dSAndrew Jeffery     MemoryRegion iomem;
54c04bd47dSAndrew Jeffery 
55c04bd47dSAndrew Jeffery     uint32_t ctrl;
56c04bd47dSAndrew Jeffery     uint32_t ctrl2;
57c04bd47dSAndrew Jeffery     AspeedTimer timers[ASPEED_TIMER_NR_TIMERS];
58c04bd47dSAndrew Jeffery } AspeedTimerCtrlState;
59c04bd47dSAndrew Jeffery 
60c04bd47dSAndrew Jeffery #endif /* ASPEED_TIMER_H */
61