quic/qbox
Loading...
Searching...
No Matches
opencores_eth.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_OPENCORES_ETH_H
10#define _LIBQBOX_COMPONENTS_OPENCORES_ETH_H
11
12#include <module_factory_registery.h>
13
14#include <device.h>
15#include <ports/target.h>
16#include <ports/qemu-initiator-signal-socket.h>
17
19{
20protected:
21 cci::cci_param<std::string> p_mac;
22 std::string m_netdev_id;
23 cci::cci_param<std::string> p_netdev_str;
24
25public:
26 QemuTargetSocket<> regs_socket;
27 QemuTargetSocket<> desc_socket;
29
30 opencores_eth(const sc_core::sc_module_name& name, sc_core::sc_object* o)
31 : opencores_eth(name, *(dynamic_cast<QemuInstance*>(o)))
32 {
33 }
34 opencores_eth(const sc_core::sc_module_name& n, QemuInstance& inst)
35 : QemuDevice(n, inst, "open_eth")
36 , p_mac("mac", "00:11:22:33:44:55", "MAC address of NIC")
37 , m_netdev_id(std::string(name()) + "-id")
38 , p_netdev_str("netdev_str", "user,hostfwd=tcp::2222-:22", "netdev string for QEMU (do not specify ID)")
39 , regs_socket("regs", inst)
40 , desc_socket("desc", inst)
41 , irq_out("irq_out")
42 {
43 std::stringstream opts;
44 opts << p_netdev_str.get_value();
45 opts << ",id=" << m_netdev_id;
46
47 m_inst.add_arg("-netdev");
48 m_inst.add_arg(opts.str().c_str());
49 }
50
51 void before_end_of_elaboration() override
52 {
53 QemuDevice::before_end_of_elaboration();
54
55 m_dev.set_prop_str("mac", p_mac.get_value().c_str());
56 m_dev.set_prop_str("netdev", m_netdev_id.c_str());
57 }
58
59 void end_of_elaboration() override
60 {
61 QemuDevice::end_of_elaboration();
62
64
65 regs_socket.init(sbd, 0);
66 desc_socket.init(sbd, 1);
67 irq_out.init_sbd(sbd, 0);
68 }
69};
70
71extern "C" void module_register();
72
73#endif //_LIBQBOX_COMPONENTS_OPENCORES_ETH_H
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
void init_sbd(qemu::SysBusDevice sbd, int gpio_idx)
Initialize this socket with a QEMU SysBusDevice, and a GPIO index.
Definition qemu-initiator-signal-socket.h:173
This class encapsulates a libqemu-cxx qemu::LibQemu instance. It handles QEMU parameters and instance...
Definition qemu-instance.h:89
void add_arg(const char *arg)
Add a command line argument to the qemu instance.
Definition qemu-instance.h:329
Definition target.h:160
Definition opencores_eth.h:19
Definition libqemu-cxx.h:638