quic/qbox
Loading...
Searching...
No Matches
hexagon-l2vic.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_IRQ_CTRL_HEXAGON_L2VIC_H
10#define _LIBQBOX_COMPONENTS_IRQ_CTRL_HEXAGON_L2VIC_H
11
12#include <string>
13#include <cassert>
14
15#include <module_factory_registery.h>
16#include <device.h>
17
18#include <ports/target.h>
19#include <ports/qemu-target-signal-socket.h>
20#include <ports/qemu-initiator-signal-socket.h>
21
23{
24public:
25 const unsigned int p_num_sources;
26 const unsigned int p_num_outputs;
27
28 QemuTargetSocket<> socket;
29 QemuTargetSocket<> socket_fast;
30 sc_core::sc_vector<QemuTargetSignalSocket> irq_in;
31 sc_core::sc_vector<QemuInitiatorSignalSocket> irq_out;
33
34 hexagon_l2vic(const sc_core::sc_module_name& name, sc_core::sc_object* o)
35 : hexagon_l2vic(name, *(dynamic_cast<QemuInstance*>(o)))
36 {
37 }
38 hexagon_l2vic(sc_core::sc_module_name nm, QemuInstance& inst)
39 : QemuDevice(nm, inst, "l2vic")
40 , p_num_sources(1024) /* this is hardcoded in qemu */
41 , p_num_outputs(8) /* this is hardcoded in qemu */
42 , socket("mem", inst)
43 , socket_fast("fastmem", inst)
44 , irq_in("irq_in", p_num_sources, [](const char* n, int i) { return new QemuTargetSignalSocket(n); })
45 , irq_out("irq_out", p_num_outputs, [](const char* n, int i) { return new QemuInitiatorSignalSocket(n); })
46 , reset("reset")
47 {
48 }
49
50 void before_end_of_elaboration() override { QemuDevice::before_end_of_elaboration(); }
51
52 void end_of_elaboration() override
53 {
54 QemuDevice::set_sysbus_as_parent_bus();
55 QemuDevice::end_of_elaboration();
56
58 socket.init(sbd, 0);
59 socket_fast.init(sbd, 1);
60
61 for (int i = 0; i < p_num_sources; i++) {
62 irq_in[i].init(m_dev, i);
63 }
64 reset.init_named(m_dev, "reset", 0);
65 for (int i = 0; i < p_num_outputs; i++) {
66 irq_out[i].init_sbd(sbd, i);
67 }
68 }
69};
70
71extern "C" void module_register();
72
73#endif
QEMU device abstraction as a SystemC module.
Definition device.h:37
A QEMU output GPIO exposed as a InitiatorSignalSocket<bool>
Definition qemu-initiator-signal-socket.h:40
This class encapsulates a libqemu-cxx qemu::LibQemu instance. It handles QEMU parameters and instance...
Definition qemu-instance.h:89
A QEMU input GPIO exposed as a TargetSignalSocket<bool>
Definition qemu-target-signal-socket.h:29
void init_named(qemu::Device dev, const char *gpio_name, int gpio_idx)
Initialize this socket with a device, a GPIO namespace, and a GPIO index.
Definition qemu-target-signal-socket.h:78
Definition target.h:160
Definition hexagon-l2vic.h:23
Definition libqemu-cxx.h:638