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