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