xref: /openbmc/qemu/hw/display/apple-gfx.h (revision 8b70d7f2071e2db51b1910502bfb7f84ebf926be)
12352159cSPhil Dennis-Jordan /*
22352159cSPhil Dennis-Jordan  * Data structures and functions shared between variants of the macOS
32352159cSPhil Dennis-Jordan  * ParavirtualizedGraphics.framework based apple-gfx display adapter.
42352159cSPhil Dennis-Jordan  *
52352159cSPhil Dennis-Jordan  * SPDX-License-Identifier: GPL-2.0-or-later
62352159cSPhil Dennis-Jordan  */
72352159cSPhil Dennis-Jordan 
82352159cSPhil Dennis-Jordan #ifndef QEMU_APPLE_GFX_H
92352159cSPhil Dennis-Jordan #define QEMU_APPLE_GFX_H
102352159cSPhil Dennis-Jordan 
112352159cSPhil Dennis-Jordan #include "qemu/queue.h"
122352159cSPhil Dennis-Jordan #include "exec/memory.h"
132352159cSPhil Dennis-Jordan #include "hw/qdev-properties.h"
142352159cSPhil Dennis-Jordan #include "ui/surface.h"
152352159cSPhil Dennis-Jordan 
162352159cSPhil Dennis-Jordan #define TYPE_APPLE_GFX_MMIO         "apple-gfx-mmio"
17b21f17ccSPhil Dennis-Jordan #define TYPE_APPLE_GFX_PCI          "apple-gfx-pci"
182352159cSPhil Dennis-Jordan 
192352159cSPhil Dennis-Jordan @class PGDeviceDescriptor;
202352159cSPhil Dennis-Jordan @protocol PGDevice;
212352159cSPhil Dennis-Jordan @protocol PGDisplay;
222352159cSPhil Dennis-Jordan @protocol MTLDevice;
232352159cSPhil Dennis-Jordan @protocol MTLTexture;
242352159cSPhil Dennis-Jordan @protocol MTLCommandQueue;
252352159cSPhil Dennis-Jordan 
262352159cSPhil Dennis-Jordan typedef QTAILQ_HEAD(, PGTask_s) PGTaskList;
272352159cSPhil Dennis-Jordan 
28*bb43a234SPhil Dennis-Jordan typedef struct AppleGFXDisplayMode {
29*bb43a234SPhil Dennis-Jordan     uint16_t width_px;
30*bb43a234SPhil Dennis-Jordan     uint16_t height_px;
31*bb43a234SPhil Dennis-Jordan     uint16_t refresh_rate_hz;
32*bb43a234SPhil Dennis-Jordan } AppleGFXDisplayMode;
33*bb43a234SPhil Dennis-Jordan 
342352159cSPhil Dennis-Jordan typedef struct AppleGFXState {
352352159cSPhil Dennis-Jordan     /* Initialised on init/realize() */
362352159cSPhil Dennis-Jordan     MemoryRegion iomem_gfx;
372352159cSPhil Dennis-Jordan     id<PGDevice> pgdev;
382352159cSPhil Dennis-Jordan     id<PGDisplay> pgdisp;
392352159cSPhil Dennis-Jordan     QemuConsole *con;
402352159cSPhil Dennis-Jordan     id<MTLDevice> mtl;
412352159cSPhil Dennis-Jordan     id<MTLCommandQueue> mtl_queue;
42*bb43a234SPhil Dennis-Jordan     AppleGFXDisplayMode *display_modes;
43*bb43a234SPhil Dennis-Jordan     uint32_t num_display_modes;
442352159cSPhil Dennis-Jordan 
452352159cSPhil Dennis-Jordan     /* List `tasks` is protected by task_mutex */
462352159cSPhil Dennis-Jordan     QemuMutex task_mutex;
472352159cSPhil Dennis-Jordan     PGTaskList tasks;
482352159cSPhil Dennis-Jordan 
492352159cSPhil Dennis-Jordan     /* Mutable state (BQL protected) */
502352159cSPhil Dennis-Jordan     QEMUCursor *cursor;
512352159cSPhil Dennis-Jordan     DisplaySurface *surface;
522352159cSPhil Dennis-Jordan     id<MTLTexture> texture;
532352159cSPhil Dennis-Jordan     int8_t pending_frames; /* # guest frames in the rendering pipeline */
542352159cSPhil Dennis-Jordan     bool gfx_update_requested; /* QEMU display system wants a new frame */
552352159cSPhil Dennis-Jordan     bool new_frame_ready; /* Guest has rendered a frame, ready to be used */
562352159cSPhil Dennis-Jordan     bool using_managed_texture_storage;
572352159cSPhil Dennis-Jordan     uint32_t rendering_frame_width;
582352159cSPhil Dennis-Jordan     uint32_t rendering_frame_height;
592352159cSPhil Dennis-Jordan 
602352159cSPhil Dennis-Jordan     /* Mutable state (atomic) */
612352159cSPhil Dennis-Jordan     bool cursor_show;
622352159cSPhil Dennis-Jordan } AppleGFXState;
632352159cSPhil Dennis-Jordan 
642352159cSPhil Dennis-Jordan void apple_gfx_common_init(Object *obj, AppleGFXState *s, const char* obj_name);
652352159cSPhil Dennis-Jordan bool apple_gfx_common_realize(AppleGFXState *s, DeviceState *dev,
662352159cSPhil Dennis-Jordan                               PGDeviceDescriptor *desc, Error **errp);
672352159cSPhil Dennis-Jordan void *apple_gfx_host_ptr_for_gpa_range(uint64_t guest_physical,
682352159cSPhil Dennis-Jordan                                        uint64_t length, bool read_only,
692352159cSPhil Dennis-Jordan                                        MemoryRegion **mapping_in_region);
702352159cSPhil Dennis-Jordan 
71*bb43a234SPhil Dennis-Jordan extern const PropertyInfo qdev_prop_apple_gfx_display_mode;
72*bb43a234SPhil Dennis-Jordan 
732352159cSPhil Dennis-Jordan #endif
742352159cSPhil Dennis-Jordan 
75