quic/qbox
Loading...
Searching...
No Matches
16550.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_UART_16550_H
10#define _LIBQBOX_COMPONENTS_UART_16550_H
11
12#include <cci_configuration>
13
14#include <module_factory_registery.h>
15
16#include <device.h>
17#include <ports/target.h>
18#include <ports/qemu-initiator-signal-socket.h>
19
20class uart_16550 : public QemuDevice
21{
22protected:
23 qemu::Chardev m_chardev;
24
25 cci::cci_param<unsigned int> p_baudbase;
26 cci::cci_param<unsigned int> p_regshift;
27
28public:
29 QemuTargetSocket<> socket;
31
32 uart_16550(const sc_core::sc_module_name& name, sc_core::sc_object* o)
33 : uart_16550(name, *(dynamic_cast<QemuInstance*>(o)))
34 {
35 }
36 uart_16550(const sc_core::sc_module_name& n, QemuInstance& inst)
37 : QemuDevice(n, inst, "serial-mm")
38 , p_baudbase("baudbase", 38400000,
39 "Base frequency from which the baudrate "
40 "is derived (in Hz)")
41 , p_regshift("regshift", 2,
42 "Shift to apply to the MMIO register map "
43 "(2 means one reg = 32 bits)")
44 , socket("mem", inst)
45 , irq_out("irq_out")
46 {
47 }
48
49 void before_end_of_elaboration() override
50 {
51 QemuDevice::before_end_of_elaboration();
52
53 m_dev.set_prop_int("baudbase", p_baudbase);
54 m_dev.set_prop_int("regshift", p_regshift);
55
56 /* FIXME: hardcoded for now */
57 m_chardev = m_inst.get().chardev_new("uart", "stdio");
58 m_dev.set_prop_chardev("chardev", m_chardev);
59 }
60
61 void end_of_elaboration() override
62 {
63 QemuDevice::set_sysbus_as_parent_bus();
64 QemuDevice::end_of_elaboration();
65
67
68 socket.init(sbd, 0);
69 irq_out.init_sbd(sbd, 0);
70 }
71};
72
73extern "C" void module_register();
74
75#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
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
qemu::LibQemu & get()
Returns the underlying qemu::LibQemu instance.
Definition qemu-instance.h:448
Definition target.h:160
Definition libqemu-cxx.h:742
Definition libqemu-cxx.h:638
Definition 16550.h:21