drivers/gpu/drm/exynos/exynos_drm_ipp.h

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/exynos/exynos_drm_ipp.h

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/exynos/exynos_drm_ipp.h
Extension
.h
Size
4945 bytes
Lines
171
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

struct exynos_drm_ipp_funcs {
	/**
	 * @commit:
	 *
	 * This is the main entry point to start framebuffer processing
	 * in the hardware. The exynos_drm_ipp_task has been already validated.
	 * This function must not wait until the device finishes processing.
	 * When the driver finishes processing, it has to call
	 * exynos_exynos_drm_ipp_task_done() function.
	 *
	 * RETURNS:
	 *
	 * 0 on success or negative error codes in case of failure.
	 */
	int (*commit)(struct exynos_drm_ipp *ipp,
		      struct exynos_drm_ipp_task *task);

	/**
	 * @abort:
	 *
	 * Informs the driver that it has to abort the currently running
	 * task as soon as possible (i.e. as soon as it can stop the device
	 * safely), even if the task would not have been finished by then.
	 * After the driver performs the necessary steps, it has to call
	 * exynos_drm_ipp_task_done() (as if the task ended normally).
	 * This function does not have to (and will usually not) wait
	 * until the device enters a state when it can be stopped.
	 */
	void (*abort)(struct exynos_drm_ipp *ipp,
		      struct exynos_drm_ipp_task *task);
};

/**
 * struct exynos_drm_ipp - central picture processor module structure
 */
struct exynos_drm_ipp {
	struct drm_device *drm_dev;
	struct device *dev;
	struct list_head head;
	unsigned int id;

	const char *name;
	const struct exynos_drm_ipp_funcs *funcs;
	unsigned int capabilities;
	const struct exynos_drm_ipp_formats *formats;
	unsigned int num_formats;
	atomic_t sequence;

	spinlock_t lock;
	struct exynos_drm_ipp_task *task;
	struct list_head todo_list;
	wait_queue_head_t done_wq;
};

struct exynos_drm_ipp_buffer {
	struct drm_exynos_ipp_task_buffer buf;
	struct drm_exynos_ipp_task_rect rect;

	struct exynos_drm_gem *exynos_gem[DRM_FORMAT_MAX_PLANES];
	const struct drm_format_info *format;
	dma_addr_t dma_addr[DRM_FORMAT_MAX_PLANES];
};

/**
 * struct exynos_drm_ipp_task - a structure describing transformation that
 * has to be performed by the picture processor hardware module
 */
struct exynos_drm_ipp_task {
	struct device *dev;
	struct exynos_drm_ipp *ipp;
	struct list_head head;

	struct exynos_drm_ipp_buffer src;
	struct exynos_drm_ipp_buffer dst;

	struct drm_exynos_ipp_task_transform transform;
	struct drm_exynos_ipp_task_alpha alpha;

	struct work_struct cleanup_work;
	unsigned int flags;
	int ret;

	struct drm_pending_exynos_ipp_event *event;
};

#define DRM_EXYNOS_IPP_TASK_DONE	(1 << 0)
#define DRM_EXYNOS_IPP_TASK_ASYNC	(1 << 1)

struct exynos_drm_ipp_formats {
	uint32_t fourcc;

Annotation

Implementation Notes