| // SPDX-License-Identifier: MIT |
| /* Copyright © 2026 Intel Corporation */ |
| |
| #include <drm/drm_gem.h> |
| #include <drm/intel/display_parent_interface.h> |
| |
| #include "intel_frontbuffer.h" |
| #include "xe_frontbuffer.h" |
| |
| struct xe_frontbuffer { |
| struct intel_frontbuffer base; |
| struct drm_gem_object *obj; |
| struct kref ref; |
| }; |
| |
| static struct intel_frontbuffer *xe_frontbuffer_get(struct drm_gem_object *obj) |
| { |
| struct xe_frontbuffer *front; |
| |
| front = kmalloc_obj(*front); |
| if (!front) |
| return NULL; |
| |
| intel_frontbuffer_init(&front->base, obj->dev); |
| |
| kref_init(&front->ref); |
| |
| drm_gem_object_get(obj); |
| front->obj = obj; |
| |
| return &front->base; |
| } |
| |
| static void xe_frontbuffer_ref(struct intel_frontbuffer *_front) |
| { |
| struct xe_frontbuffer *front = |
| container_of(_front, typeof(*front), base); |
| |
| kref_get(&front->ref); |
| } |
| |
| static void frontbuffer_release(struct kref *ref) |
| { |
| struct xe_frontbuffer *front = |
| container_of(ref, typeof(*front), ref); |
| |
| intel_frontbuffer_fini(&front->base); |
| |
| drm_gem_object_put(front->obj); |
| |
| kfree(front); |
| } |
| |
| static void xe_frontbuffer_put(struct intel_frontbuffer *_front) |
| { |
| struct xe_frontbuffer *front = |
| container_of(_front, typeof(*front), base); |
| |
| kref_put(&front->ref, frontbuffer_release); |
| } |
| |
| static void xe_frontbuffer_flush_for_display(struct intel_frontbuffer *front) |
| { |
| } |
| |
| const struct intel_display_frontbuffer_interface xe_display_frontbuffer_interface = { |
| .get = xe_frontbuffer_get, |
| .ref = xe_frontbuffer_ref, |
| .put = xe_frontbuffer_put, |
| .flush_for_display = xe_frontbuffer_flush_for_display, |
| }; |