quic/qbox
Loading...
Searching...
No Matches
qemu_hexagon_qtimer.h
1/*
2 * This file is part of libqbox
3 * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All Rights Reserved.
4 * Author: GreenSocs 2021
5 *
6 * SPDX-License-Identifier: BSD-3-Clause
7 */
8
9#ifndef _LIBQBOX_COMPONENTS_TIMER_HEXAGON_QTIMER_H
10#define _LIBQBOX_COMPONENTS_TIMER_HEXAGON_QTIMER_H
11
12#include <string>
13#include <cassert>
14
15#include <device.h>
16#include <ports/target.h>
17#include <ports/qemu-target-signal-socket.h>
18#include <ports/qemu-initiator-signal-socket.h>
19#include <module_factory_registery.h>
20
22{
23protected:
24 cci::cci_param<unsigned int> p_nr_frames;
25 cci::cci_param<unsigned int> p_nr_views;
26 cci::cci_param<unsigned int> p_cnttid;
27
28public:
29 QemuTargetSocket<> socket;
30
31 /*
32 * FIXME:
33 * the irq is not really declared as a gpio in qemu, so we cannot
34 * import it
35 *QemuInitiatorSignalSocket irq;
36 */
37
38 /* timers mem/irq */
39 QemuTargetSocket<> view_socket;
40 sc_core::sc_vector<QemuInitiatorSignalSocket> irq;
41
42public:
43 qemu_hexagon_qtimer(const sc_core::sc_module_name& name, sc_core::sc_object* o)
44 : qemu_hexagon_qtimer(name, *(dynamic_cast<QemuInstance*>(o)))
45 {
46 }
47 qemu_hexagon_qtimer(sc_core::sc_module_name nm, QemuInstance& inst)
48 : QemuDevice(nm, inst, "qct-qtimer")
49 , p_nr_frames("nr_frames", 2, "Number of frames")
50 , p_nr_views("nr_views", 1, "Number of views")
51 , p_cnttid("cnttid", 0x11, "Value of cnttid")
52 , socket("mem", inst)
53 , view_socket("mem_view", inst)
54 , irq("irq", p_nr_frames.get_value(), [](const char* n, size_t i) { return new QemuInitiatorSignalSocket(n); })
55 {
56 }
57
58 void before_end_of_elaboration() override
59 {
60 QemuDevice::before_end_of_elaboration();
61
62 m_dev.set_prop_int("nr_frames", p_nr_frames);
63 m_dev.set_prop_int("nr_views", p_nr_views);
64 m_dev.set_prop_int("cnttid", p_cnttid);
65 }
66
67 void end_of_elaboration() override
68 {
69 QemuDevice::set_sysbus_as_parent_bus();
70 QemuDevice::end_of_elaboration();
71
73 socket.init(sbd, 0);
74 view_socket.init(sbd, 1);
75
76 for (uint32_t i = 0; i < p_nr_frames.get_value(); ++i) {
77 irq[i].init_sbd(sbd, i);
78 }
79 }
80};
81
82extern "C" void module_register();
83#endif
QEMU device abstraction as a SystemC module.
Definition device.h:37
This class encapsulates a libqemu-cxx qemu::LibQemu instance. It handles QEMU parameters and instance...
Definition qemu-instance.h:89
Definition target.h:160
Definition libqemu-cxx.h:638
Definition qemu_hexagon_qtimer.h:22