quic/qbox
Loading...
Searching...
No Matches
display.h
1/*
2 * This file is part of libqbox
3 * Copyright (c) 2023-2024 Qualcomm Innovation Center, Inc. All Rights Reserved.
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
8#ifndef _LIBQBOX_COMPONENTS_DISPLAY_H
9#define _LIBQBOX_COMPONENTS_DISPLAY_H
10
11#include <systemc>
12#include <scp/report.h>
13#include <string_view>
14
15#include <libgssync.h>
16#include <module_factory_registery.h>
17
18#include <libqemu/libqemu.h>
19#include <qemu-instance.h>
20#include <virtio/virtio-mmio-gpugl.h>
21#include <virtio_gpu.h>
22#include <ramfb.h>
23
32{
33private:
34 static QemuInstance* inst;
35
36 qemu::DclOps m_ops;
37 gs::runonsysc m_on_sysc;
38 bool m_realized = false;
39 std::vector<qemu::SDL2Console> m_sdl2_consoles;
40 qemu::DisplayGLCtxOps m_gl_ctx_ops;
41 bool m_instantiated = false;
42 bool m_simulation_started = false;
43
44 QemuDevice* selectGpu(sc_core::sc_object* o);
45
46public:
47 bool is_realized() const { return m_realized; }
48
49 void instantiate();
50
51 static void gl_switch(DisplayChangeListener* dcl, DisplaySurface* new_surface);
52
53 static void gl_update(DisplayChangeListener* dcl, int x, int y, int w, int h);
54
55 static void gl_refresh(DisplayChangeListener* dcl);
56
57 static void window_create(DisplayChangeListener* dcl);
58 static void window_destroy(DisplayChangeListener* dcl);
59 static void window_resize(DisplayChangeListener* dcl);
60 static void poll_events(DisplayChangeListener* dcl);
61
62 static bool is_compatible_dcl(DisplayGLCtx* ctx, DisplayChangeListener* dcl);
63
64 void realize();
65
72 MainThreadQemuDisplay(sc_core::sc_object* gpu);
73
81
89
91
92 void before_end_of_elaboration() { instantiate(); }
93
94 void end_of_elaboration() { realize(); }
95
96 void start_of_simulation(void) { m_simulation_started = true; }
97
98 QemuInstance& get_qemu_inst() { return *inst; }
99
100 bool is_instantiated() const { return m_instantiated; }
101
102 const std::vector<qemu::SDL2Console>& get_sdl2_consoles() const { return m_sdl2_consoles; }
103};
104
105QemuInstance* MainThreadQemuDisplay::inst = nullptr;
106
107class display : public sc_core::sc_module
108{
109private:
110#ifdef __APPLE__
112#endif
113
114 display(const sc_core::sc_module_name& name, QemuDevice& gpu);
115
116public:
123 display(const sc_core::sc_module_name& name, sc_core::sc_object* gpu);
124
131 display(const sc_core::sc_module_name& name, QemuVirtioGpu& gpu);
132
139 display(const sc_core::sc_module_name& name, QemuVirtioMMIOGpuGl& gpu);
140
141 void before_end_of_elaboration() override;
142
143 void end_of_elaboration() override;
144
145 void start_of_simulation() override;
146
147 QemuInstance* get_qemu_inst();
148
149 bool is_instantiated() const;
150 bool is_realized() const;
151
152 const std::vector<qemu::SDL2Console>* get_sdl2_consoles() const;
153};
154
155extern "C" void module_register();
156
157#endif // _LIBQBOX_COMPONENTS_DISPLAY_H
Qemu Display abstraction as a SystemC module.
Definition display.h:32
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:86
Definition target.h:160
Definition virtio_gpu.h:18
Definition virtio-mmio-gpugl.h:20
Definition display.h:108
Definition runonsysc.h:23
Definition libqemu-cxx.h:601
Definition libqemu-cxx.h:535