18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) 2017 NVIDIA CORPORATION. All rights reserved. 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#ifndef TEGRA_PLANE_H 78c2ecf20Sopenharmony_ci#define TEGRA_PLANE_H 1 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include <drm/drm_plane.h> 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_cistruct tegra_bo; 128c2ecf20Sopenharmony_cistruct tegra_dc; 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_cistruct tegra_plane { 158c2ecf20Sopenharmony_ci struct drm_plane base; 168c2ecf20Sopenharmony_ci struct tegra_dc *dc; 178c2ecf20Sopenharmony_ci unsigned int offset; 188c2ecf20Sopenharmony_ci unsigned int index; 198c2ecf20Sopenharmony_ci}; 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_cistruct tegra_cursor { 228c2ecf20Sopenharmony_ci struct tegra_plane base; 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci struct tegra_bo *bo; 258c2ecf20Sopenharmony_ci unsigned int width; 268c2ecf20Sopenharmony_ci unsigned int height; 278c2ecf20Sopenharmony_ci}; 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_cistatic inline struct tegra_plane *to_tegra_plane(struct drm_plane *plane) 308c2ecf20Sopenharmony_ci{ 318c2ecf20Sopenharmony_ci return container_of(plane, struct tegra_plane, base); 328c2ecf20Sopenharmony_ci} 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_cistruct tegra_plane_legacy_blending_state { 358c2ecf20Sopenharmony_ci bool alpha; 368c2ecf20Sopenharmony_ci bool top; 378c2ecf20Sopenharmony_ci}; 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_cistruct tegra_plane_state { 408c2ecf20Sopenharmony_ci struct drm_plane_state base; 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci struct sg_table *sgt[3]; 438c2ecf20Sopenharmony_ci dma_addr_t iova[3]; 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci struct tegra_bo_tiling tiling; 468c2ecf20Sopenharmony_ci u32 format; 478c2ecf20Sopenharmony_ci u32 swap; 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ci bool reflect_x; 508c2ecf20Sopenharmony_ci bool reflect_y; 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_ci /* used for legacy blending support only */ 538c2ecf20Sopenharmony_ci struct tegra_plane_legacy_blending_state blending[2]; 548c2ecf20Sopenharmony_ci bool opaque; 558c2ecf20Sopenharmony_ci}; 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_cistatic inline struct tegra_plane_state * 588c2ecf20Sopenharmony_cito_tegra_plane_state(struct drm_plane_state *state) 598c2ecf20Sopenharmony_ci{ 608c2ecf20Sopenharmony_ci if (state) 618c2ecf20Sopenharmony_ci return container_of(state, struct tegra_plane_state, base); 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_ci return NULL; 648c2ecf20Sopenharmony_ci} 658c2ecf20Sopenharmony_ci 668c2ecf20Sopenharmony_ciextern const struct drm_plane_funcs tegra_plane_funcs; 678c2ecf20Sopenharmony_ci 688c2ecf20Sopenharmony_ciint tegra_plane_prepare_fb(struct drm_plane *plane, 698c2ecf20Sopenharmony_ci struct drm_plane_state *state); 708c2ecf20Sopenharmony_civoid tegra_plane_cleanup_fb(struct drm_plane *plane, 718c2ecf20Sopenharmony_ci struct drm_plane_state *state); 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_ciint tegra_plane_state_add(struct tegra_plane *plane, 748c2ecf20Sopenharmony_ci struct drm_plane_state *state); 758c2ecf20Sopenharmony_ci 768c2ecf20Sopenharmony_ciint tegra_plane_format(u32 fourcc, u32 *format, u32 *swap); 778c2ecf20Sopenharmony_cibool tegra_plane_format_is_yuv(unsigned int format, bool *planar); 788c2ecf20Sopenharmony_ciint tegra_plane_setup_legacy_state(struct tegra_plane *tegra, 798c2ecf20Sopenharmony_ci struct tegra_plane_state *state); 808c2ecf20Sopenharmony_ci 818c2ecf20Sopenharmony_ci#endif /* TEGRA_PLANE_H */ 82