xref: /qemu/include/hw/misc/mps2-fpgaio.h (revision b2234223fd511230e933bba2572928ca97028bb8)
19a52d999SPeter Maydell /*
29a52d999SPeter Maydell  * ARM MPS2 FPGAIO emulation
39a52d999SPeter Maydell  *
49a52d999SPeter Maydell  * Copyright (c) 2018 Linaro Limited
59a52d999SPeter Maydell  * Written by Peter Maydell
69a52d999SPeter Maydell  *
79a52d999SPeter Maydell  *  This program is free software; you can redistribute it and/or modify
89a52d999SPeter Maydell  *  it under the terms of the GNU General Public License version 2 or
99a52d999SPeter Maydell  *  (at your option) any later version.
109a52d999SPeter Maydell  */
119a52d999SPeter Maydell 
129a52d999SPeter Maydell /* This is a model of the FPGAIO register block in the AN505
139a52d999SPeter Maydell  * FPGA image for the MPS2 dev board; it is documented in the
149a52d999SPeter Maydell  * application note:
159a52d999SPeter Maydell  * http://infocenter.arm.com/help/topic/com.arm.doc.dai0505b/index.html
169a52d999SPeter Maydell  *
179a52d999SPeter Maydell  * QEMU interface:
189a52d999SPeter Maydell  *  + sysbus MMIO region 0: the register bank
199a52d999SPeter Maydell  */
209a52d999SPeter Maydell 
219a52d999SPeter Maydell #ifndef MPS2_FPGAIO_H
229a52d999SPeter Maydell #define MPS2_FPGAIO_H
239a52d999SPeter Maydell 
249a52d999SPeter Maydell #include "hw/sysbus.h"
2565ad1da2SPhilippe Mathieu-Daudé #include "hw/misc/led.h"
26db1015e9SEduardo Habkost #include "qom/object.h"
279a52d999SPeter Maydell 
289a52d999SPeter Maydell #define TYPE_MPS2_FPGAIO "mps2-fpgaio"
298063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(MPS2FPGAIO, MPS2_FPGAIO)
309a52d999SPeter Maydell 
31e8556f43SPeter Maydell #define MPS2FPGAIO_MAX_LEDS 32
32e8556f43SPeter Maydell 
33db1015e9SEduardo Habkost struct MPS2FPGAIO {
349a52d999SPeter Maydell     /*< private >*/
359a52d999SPeter Maydell     SysBusDevice parent_obj;
369a52d999SPeter Maydell 
379a52d999SPeter Maydell     /*< public >*/
389a52d999SPeter Maydell     MemoryRegion iomem;
39e8556f43SPeter Maydell     LEDState *led[MPS2FPGAIO_MAX_LEDS];
40e8556f43SPeter Maydell     uint32_t num_leds;
41*b2234223SPeter Maydell     bool has_switches;
429a52d999SPeter Maydell 
439a52d999SPeter Maydell     uint32_t led0;
449a52d999SPeter Maydell     uint32_t prescale;
459a52d999SPeter Maydell     uint32_t misc;
469a52d999SPeter Maydell 
4793739075SPeter Maydell     /* QEMU_CLOCK_VIRTUAL time at which counter and pscntr were last synced */
4893739075SPeter Maydell     int64_t pscntr_sync_ticks;
4993739075SPeter Maydell     /* Values of COUNTER and PSCNTR at time pscntr_sync_ticks */
5093739075SPeter Maydell     uint32_t counter;
5193739075SPeter Maydell     uint32_t pscntr;
5293739075SPeter Maydell 
539a52d999SPeter Maydell     uint32_t prescale_clk;
54a1982f90SPeter Maydell 
55a1982f90SPeter Maydell     /* These hold the CLOCK_VIRTUAL ns tick when the CLK1HZ/CLK100HZ was zero */
56a1982f90SPeter Maydell     int64_t clk1hz_tick_offset;
57a1982f90SPeter Maydell     int64_t clk100hz_tick_offset;
58db1015e9SEduardo Habkost };
599a52d999SPeter Maydell 
609a52d999SPeter Maydell #endif
61