|  | /* | 
|  | * Data structures and functions shared between variants of the macOS | 
|  | * ParavirtualizedGraphics.framework based apple-gfx display adapter. | 
|  | * | 
|  | * SPDX-License-Identifier: GPL-2.0-or-later | 
|  | */ | 
|  |  | 
|  | #ifndef QEMU_APPLE_GFX_H | 
|  | #define QEMU_APPLE_GFX_H | 
|  |  | 
|  | #include "qemu/queue.h" | 
|  | #include "exec/memory.h" | 
|  | #include "hw/qdev-properties.h" | 
|  | #include "ui/surface.h" | 
|  |  | 
|  | #define TYPE_APPLE_GFX_MMIO         "apple-gfx-mmio" | 
|  | #define TYPE_APPLE_GFX_PCI          "apple-gfx-pci" | 
|  |  | 
|  | @class PGDeviceDescriptor; | 
|  | @protocol PGDevice; | 
|  | @protocol PGDisplay; | 
|  | @protocol MTLDevice; | 
|  | @protocol MTLTexture; | 
|  | @protocol MTLCommandQueue; | 
|  |  | 
|  | typedef QTAILQ_HEAD(, PGTask_s) PGTaskList; | 
|  |  | 
|  | typedef struct AppleGFXDisplayMode { | 
|  | uint16_t width_px; | 
|  | uint16_t height_px; | 
|  | uint16_t refresh_rate_hz; | 
|  | } AppleGFXDisplayMode; | 
|  |  | 
|  | typedef struct AppleGFXState { | 
|  | /* Initialised on init/realize() */ | 
|  | MemoryRegion iomem_gfx; | 
|  | id<PGDevice> pgdev; | 
|  | id<PGDisplay> pgdisp; | 
|  | QemuConsole *con; | 
|  | id<MTLDevice> mtl; | 
|  | id<MTLCommandQueue> mtl_queue; | 
|  | AppleGFXDisplayMode *display_modes; | 
|  | uint32_t num_display_modes; | 
|  |  | 
|  | /* List `tasks` is protected by task_mutex */ | 
|  | QemuMutex task_mutex; | 
|  | PGTaskList tasks; | 
|  |  | 
|  | /* Mutable state (BQL protected) */ | 
|  | QEMUCursor *cursor; | 
|  | DisplaySurface *surface; | 
|  | id<MTLTexture> texture; | 
|  | int8_t pending_frames; /* # guest frames in the rendering pipeline */ | 
|  | bool gfx_update_requested; /* QEMU display system wants a new frame */ | 
|  | bool new_frame_ready; /* Guest has rendered a frame, ready to be used */ | 
|  | bool using_managed_texture_storage; | 
|  | uint32_t rendering_frame_width; | 
|  | uint32_t rendering_frame_height; | 
|  |  | 
|  | /* Mutable state (atomic) */ | 
|  | bool cursor_show; | 
|  | } AppleGFXState; | 
|  |  | 
|  | void apple_gfx_common_init(Object *obj, AppleGFXState *s, const char* obj_name); | 
|  | bool apple_gfx_common_realize(AppleGFXState *s, DeviceState *dev, | 
|  | PGDeviceDescriptor *desc, Error **errp); | 
|  | void *apple_gfx_host_ptr_for_gpa_range(uint64_t guest_physical, | 
|  | uint64_t length, bool read_only, | 
|  | MemoryRegion **mapping_in_region); | 
|  |  | 
|  | extern const PropertyInfo qdev_prop_apple_gfx_display_mode; | 
|  |  | 
|  | #endif | 
|  |  |