1*dbf21777SIcenowy Zheng /* SPDX-License-Identifier: GPL-2.0-only */ 2*dbf21777SIcenowy Zheng /* 3*dbf21777SIcenowy Zheng * Copyright (C) 2025 Icenowy Zheng <uwu@icenowy.me> 4*dbf21777SIcenowy Zheng * 5*dbf21777SIcenowy Zheng * Based on vs_dc_hw.h, which is: 6*dbf21777SIcenowy Zheng * Copyright (C) 2023 VeriSilicon Holdings Co., Ltd. 7*dbf21777SIcenowy Zheng */ 8*dbf21777SIcenowy Zheng 9*dbf21777SIcenowy Zheng #ifndef _VS_PLANE_H_ 10*dbf21777SIcenowy Zheng #define _VS_PLANE_H_ 11*dbf21777SIcenowy Zheng 12*dbf21777SIcenowy Zheng #include <linux/types.h> 13*dbf21777SIcenowy Zheng 14*dbf21777SIcenowy Zheng #include <drm/drm_device.h> 15*dbf21777SIcenowy Zheng #include <drm/drm_framebuffer.h> 16*dbf21777SIcenowy Zheng #include <drm/drm_plane.h> 17*dbf21777SIcenowy Zheng #include <drm/drm_rect.h> 18*dbf21777SIcenowy Zheng 19*dbf21777SIcenowy Zheng #define VSDC_MAKE_PLANE_SIZE(w, h) (((w) & 0x7fff) | (((h) & 0x7fff) << 15)) 20*dbf21777SIcenowy Zheng #define VSDC_MAKE_PLANE_POS(x, y) (((x) & 0x7fff) | (((y) & 0x7fff) << 15)) 21*dbf21777SIcenowy Zheng 22*dbf21777SIcenowy Zheng struct vs_dc; 23*dbf21777SIcenowy Zheng 24*dbf21777SIcenowy Zheng enum vs_color_format { 25*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_X4R4G4B4, 26*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_A4R4G4B4, 27*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_X1R5G5B5, 28*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_A1R5G5B5, 29*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_R5G6B5, 30*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_X8R8G8B8, 31*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_A8R8G8B8, 32*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_YUY2, 33*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_UYVY, 34*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_INDEX8, 35*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_MONOCHROME, 36*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_YV12 = 0xf, 37*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_A8, 38*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_NV12, 39*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_NV16, 40*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_RG16, 41*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_R8, 42*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_NV12_10BIT, 43*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_A2R10G10B10, 44*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_NV16_10BIT, 45*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_INDEX1, 46*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_INDEX2, 47*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_INDEX4, 48*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_P010, 49*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_YUV444, 50*dbf21777SIcenowy Zheng VSDC_COLOR_FORMAT_YUV444_10BIT 51*dbf21777SIcenowy Zheng }; 52*dbf21777SIcenowy Zheng 53*dbf21777SIcenowy Zheng enum vs_swizzle { 54*dbf21777SIcenowy Zheng VSDC_SWIZZLE_ARGB, 55*dbf21777SIcenowy Zheng VSDC_SWIZZLE_RGBA, 56*dbf21777SIcenowy Zheng VSDC_SWIZZLE_ABGR, 57*dbf21777SIcenowy Zheng VSDC_SWIZZLE_BGRA, 58*dbf21777SIcenowy Zheng }; 59*dbf21777SIcenowy Zheng 60*dbf21777SIcenowy Zheng struct vs_format { 61*dbf21777SIcenowy Zheng enum vs_color_format color; 62*dbf21777SIcenowy Zheng enum vs_swizzle swizzle; 63*dbf21777SIcenowy Zheng bool uv_swizzle; 64*dbf21777SIcenowy Zheng }; 65*dbf21777SIcenowy Zheng 66*dbf21777SIcenowy Zheng void drm_format_to_vs_format(u32 drm_format, struct vs_format *vs_format); 67*dbf21777SIcenowy Zheng dma_addr_t vs_fb_get_dma_addr(struct drm_framebuffer *fb, 68*dbf21777SIcenowy Zheng const struct drm_rect *src_rect); 69*dbf21777SIcenowy Zheng 70*dbf21777SIcenowy Zheng struct drm_plane *vs_primary_plane_init(struct drm_device *dev, struct vs_dc *dc); 71*dbf21777SIcenowy Zheng 72*dbf21777SIcenowy Zheng #endif /* _VS_PLANE_H_ */ 73