drivers/gpu/drm/i915/display/intel_parent.c

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/i915/display/intel_parent.c

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/i915/display/intel_parent.c
Extension
.c
Size
13224 bytes
Lines
456
Domain
Driver Families
Bucket
drivers/gpu
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

// SPDX-License-Identifier: MIT
/* Copyright © 2025 Intel Corporation */

/*
 * Convenience wrapper functions to call the parent interface functions:
 *
 * - display->parent->SUBSTRUCT->FUNCTION()
 * - display->parent->FUNCTION()
 *
 * All functions here should be named accordingly:
 *
 * - intel_parent_SUBSTRUCT_FUNCTION()
 * - intel_parent_FUNCTION()
 *
 * These functions may use display driver specific types for parameters and
 * return values, translating them to and from the generic types used in the
 * function pointer interface.
 */

#include <drm/drm_print.h>
#include <drm/intel/display_parent_interface.h>
#include <drm/intel/vlv_iosf_sb_regs.h>

#include "intel_display_core.h"
#include "intel_parent.h"

/* dpt */
struct intel_dpt *intel_parent_dpt_create(struct intel_display *display,
					  struct drm_gem_object *obj, size_t size)
{
	if (display->parent->dpt)
		return display->parent->dpt->create(obj, size);

	return NULL;
}

void intel_parent_dpt_destroy(struct intel_display *display, struct intel_dpt *dpt)
{
	if (display->parent->dpt)
		display->parent->dpt->destroy(dpt);
}

void intel_parent_dpt_suspend(struct intel_display *display, struct intel_dpt *dpt)
{
	if (display->parent->dpt)
		display->parent->dpt->suspend(dpt);
}

void intel_parent_dpt_resume(struct intel_display *display, struct intel_dpt *dpt)
{
	if (display->parent->dpt)
		display->parent->dpt->resume(dpt);
}

/* fb_pin */
int intel_parent_fb_pin_ggtt_pin(struct intel_display *display,
				 struct drm_gem_object *obj,
				 const struct intel_fb_pin_params *pin_params,
				 struct i915_vma **out_ggtt_vma,
				 u32 *out_offset,
				 int *out_fence_id)
{
	return display->parent->fb_pin->ggtt_pin(obj, pin_params,
						 out_ggtt_vma, out_offset, out_fence_id);
}

void intel_parent_fb_pin_ggtt_unpin(struct intel_display *display,
				    struct i915_vma *ggtt_vma,
				    int fence_id)
{
	return display->parent->fb_pin->ggtt_unpin(ggtt_vma, fence_id);
}

int intel_parent_fb_pin_dpt_pin(struct intel_display *display,
				struct drm_gem_object *obj,
				struct intel_dpt *dpt,
				const struct intel_fb_pin_params *pin_params,
				struct i915_vma **out_dpt_vma,
				struct i915_vma **out_ggtt_vma,
				u32 *out_offset)
{
	return display->parent->fb_pin->dpt_pin(obj, dpt, pin_params,
						out_dpt_vma, out_ggtt_vma, out_offset);
}

void intel_parent_fb_pin_dpt_unpin(struct intel_display *display,
				   struct intel_dpt *dpt,
				   struct i915_vma *dpt_vma,
				   struct i915_vma *ggtt_vma)
{

Annotation

Implementation Notes