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
14#include <libgssync.h>
15#include <module_factory_registery.h>
16
17#include <libqemu/libqemu.h>
18#include <qemu-instance.h>
19#include <virtio/virtio-mmio-gpugl.h>
20#include <virtio_gpu.h>
21
30{
31private:
32 static QemuInstance* inst;
33
34 qemu::DclOps m_ops;
35 gs::runonsysc m_on_sysc;
36 bool m_realized = false;
37 std::vector<qemu::SDL2Console> m_sdl2_consoles;
38 qemu::DisplayGLCtxOps m_gl_ctx_ops;
39 bool m_instantiated = false;
40 bool m_simulation_started = false;
41
42 QemuDevice* selectGpu(sc_core::sc_object* o);
43
44public:
45 bool is_realized() const { return m_realized; }
46
47 void instantiate();
48
49 static void gl_switch(DisplayChangeListener* dcl, DisplaySurface* new_surface);
50
51 static void gl_update(DisplayChangeListener* dcl, int x, int y, int w, int h);
52
53 static void gl_refresh(DisplayChangeListener* dcl);
54
55 static void window_create(DisplayChangeListener* dcl);
56 static void window_destroy(DisplayChangeListener* dcl);
57 static void window_resize(DisplayChangeListener* dcl);
58 static void poll_events(DisplayChangeListener* dcl);
59
60 static bool is_compatible_dcl(DisplayGLCtx* ctx, DisplayChangeListener* dcl);
61
62 void realize();
63
70 MainThreadQemuDisplay(sc_core::sc_object* gpu);
71
79
87
89
90 void before_end_of_elaboration() { instantiate(); }
91
92 void end_of_elaboration() { realize(); }
93
94 void start_of_simulation(void) { m_simulation_started = true; }
95
96 QemuInstance& get_qemu_inst() { return *inst; }
97
98 bool is_instantiated() const { return m_instantiated; }
99
100 const std::vector<qemu::SDL2Console>& get_sdl2_consoles() const { return m_sdl2_consoles; }
101};
102
103QemuInstance* MainThreadQemuDisplay::inst = nullptr;
104
105class display : public sc_core::sc_module
106{
107private:
108#ifdef __APPLE__
110#endif
111
112 display (const sc_core::sc_module_name& name, QemuDevice& gpu);
113
114public:
121 display(const sc_core::sc_module_name& name, sc_core::sc_object* gpu);
122
129 display(const sc_core::sc_module_name& name, QemuVirtioGpu& gpu);
130
137 display(const sc_core::sc_module_name& name, QemuVirtioMMIOGpuGl& gpu);
138
139 void before_end_of_elaboration() override;
140
141 void end_of_elaboration() override;
142
143 void start_of_simulation() override;
144
145 QemuInstance* get_qemu_inst();
146
147 bool is_instantiated() const;
148 bool is_realized() const;
149
150 const std::vector<qemu::SDL2Console>* get_sdl2_consoles() const;
151};
152
153extern "C" void module_register();
154
155#endif // _LIBQBOX_COMPONENTS_DISPLAY_H
Qemu Display abstraction as a SystemC module.
Definition display.h:30
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 virtio_gpu.h:18
Definition virtio-mmio-gpugl.h:20
Definition display.h:106
Definition runonsysc.h:22
Definition libqemu-cxx.h:594
Definition libqemu-cxx.h:528