diff options
Diffstat (limited to 'tools/src/dcp_iboot.h')
| -rw-r--r-- | tools/src/dcp_iboot.h | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/tools/src/dcp_iboot.h b/tools/src/dcp_iboot.h new file mode 100644 index 0000000..adb449e --- /dev/null +++ b/tools/src/dcp_iboot.h @@ -0,0 +1,111 @@ +/* SPDX-License-Identifier: MIT */ + +#ifndef DCP_IBOOT_H +#define DCP_IBOOT_H + +#include "dcp.h" + +typedef struct dcp_iboot_if dcp_iboot_if_t; + +enum DCPEOTF { + EOTF_GAMMA_SDR = 1, + EOTF_GAMMA_HDR = 2, +}; + +enum DCPEncoding { + ENC_RGB = 1, + ENC_YCBCR_444 = 3, + ENC_YCBCR_422 = 4, + ENC_YCBCR_420 = 5, +}; + +enum DCPColorimetry { + CLR_BT601_709 = 1, + CLR_BT2020 = 2, + CLR_DCIP3 = 3, +}; + +enum DCPSurfaceFmt { + FMT_BGRA = 1, + FMT_RGBA = 3, + FMT_w18p = 4, + FMT_444v = 6, + FMT_422v = 7, + FMT_420v = 8, + FMT_w30r = 9, + FMT_w40a = 10, +}; + +enum DCPTransform { + XFRM_NONE = 0, + XFRM_XFLIP = 1, + XFRM_YFLIP = 2, + XFRM_ROT_90 = 3, + XFRM_ROT_180 = 4, + XFRM_ROT_270 = 5, +}; + +enum AddrFormat { + ADDR_PLANAR = 1, + ADDR_TILED = 2, + ADDR_AGX = 3, +}; + +typedef struct { + u32 valid; + u32 width; + u32 height; + u32 fps; + u8 pad[8]; +} PACKED dcp_timing_mode_t; + +typedef struct { + u32 valid; + u32 colorimetry; + u32 eotf; + u32 encoding; + u32 bpp; + u8 pad[4]; +} PACKED dcp_color_mode_t; + +typedef struct { + u32 unk1; + u64 addr; + u32 tile_size; + u32 stride; + u32 unk2[4]; + u32 addr_format; + u32 unk3; +} PACKED dcp_plane_t; + +typedef struct { + dcp_plane_t planes[3]; + u32 unk; + u32 plane_cnt; + u32 width; + u32 height; + u32 surface_fmt; + u32 colorspace; + u32 eotf; + u8 transform; + u8 padding[3]; +} PACKED dcp_layer_t; + +typedef struct { + u32 w, h, x, y; +} PACKED dcp_rect_t; + +dcp_iboot_if_t *dcp_ib_init(dcp_dev_t *dcp); +int dcp_ib_shutdown(dcp_iboot_if_t *iboot); + +int dcp_ib_set_power(dcp_iboot_if_t *iboot, bool power); +int dcp_ib_get_hpd(dcp_iboot_if_t *iboot, int *timing_cnt, int *color_cnt); +int dcp_ib_get_timing_modes(dcp_iboot_if_t *iboot, dcp_timing_mode_t **modes); +int dcp_ib_get_color_modes(dcp_iboot_if_t *iboot, dcp_color_mode_t **modes); +int dcp_ib_set_mode(dcp_iboot_if_t *iboot, dcp_timing_mode_t *timing, dcp_color_mode_t *color); +int dcp_ib_swap_begin(dcp_iboot_if_t *iboot); +int dcp_ib_swap_set_layer(dcp_iboot_if_t *iboot, int layer_id, dcp_layer_t *layer, + dcp_rect_t *src_rect, dcp_rect_t *dst_rect); +int dcp_ib_swap_end(dcp_iboot_if_t *iboot); + +#endif |
