]> git.proxmox.com Git - mirror_qemu.git/blame - hw/grlib.h
SPARC: Emulation of GRLIB GPTimer
[mirror_qemu.git] / hw / grlib.h
CommitLineData
0f3a4a01
FC
1/*
2 * QEMU GRLIB Components
3 *
4 * Copyright (c) 2010-2011 AdaCore
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 */
24
25#ifndef _GRLIB_H_
26#define _GRLIB_H_
27
28#include "qdev.h"
29#include "sysbus.h"
30
31/* Emulation of GrLib device is base on the GRLIB IP Core User's Manual:
32 * http://www.gaisler.com/products/grlib/grip.pdf
33 */
34
35/* GPTimer */
36
37static inline
38DeviceState *grlib_gptimer_create(target_phys_addr_t base,
39 uint32_t nr_timers,
40 uint32_t freq,
41 qemu_irq *cpu_irqs,
42 int base_irq)
43{
44 DeviceState *dev;
45 int i;
46
47 dev = qdev_create(NULL, "grlib,gptimer");
48 qdev_prop_set_uint32(dev, "nr-timers", nr_timers);
49 qdev_prop_set_uint32(dev, "frequency", freq);
50 qdev_prop_set_uint32(dev, "irq-line", base_irq);
51
52 if (qdev_init(dev)) {
53 return NULL;
54 }
55
56 sysbus_mmio_map(sysbus_from_qdev(dev), 0, base);
57
58 for (i = 0; i < nr_timers; i++) {
59 sysbus_connect_irq(sysbus_from_qdev(dev), i, cpu_irqs[base_irq + i]);
60 }
61
62 return dev;
63}
64
65#endif /* ! _GRLIB_H_ */