127 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * Copyright (C) 2016 Noralf Trønnes4 */5 6#ifndef __LINUX_DRM_FORMAT_HELPER_H7#define __LINUX_DRM_FORMAT_HELPER_H8 9#include <linux/types.h>10 11struct drm_device;12struct drm_format_info;13struct drm_framebuffer;14struct drm_rect;15 16struct iosys_map;17 18/**19 * struct drm_format_conv_state - Stores format-conversion state20 *21 * DRM helpers for format conversion store temporary state in22 * struct drm_xfrm_buf. The buffer's resources can be reused23 * among multiple conversion operations.24 *25 * All fields are considered private.26 */27struct drm_format_conv_state {28 /* private: */29 struct {30 void *mem;31 size_t size;32 bool preallocated;33 } tmp;34};35 36#define __DRM_FORMAT_CONV_STATE_INIT(_mem, _size, _preallocated) { \37 .tmp = { \38 .mem = (_mem), \39 .size = (_size), \40 .preallocated = (_preallocated), \41 } \42 }43 44/**45 * DRM_FORMAT_CONV_STATE_INIT - Initializer for struct drm_format_conv_state46 *47 * Initializes an instance of struct drm_format_conv_state to default values.48 */49#define DRM_FORMAT_CONV_STATE_INIT \50 __DRM_FORMAT_CONV_STATE_INIT(NULL, 0, false)51 52/**53 * DRM_FORMAT_CONV_STATE_INIT_PREALLOCATED - Initializer for struct drm_format_conv_state54 * @_mem: The preallocated memory area55 * @_size: The number of bytes in _mem56 *57 * Initializes an instance of struct drm_format_conv_state to preallocated58 * storage. The caller is responsible for releasing the provided memory range.59 */60#define DRM_FORMAT_CONV_STATE_INIT_PREALLOCATED(_mem, _size) \61 __DRM_FORMAT_CONV_STATE_INIT(_mem, _size, true)62 63void drm_format_conv_state_init(struct drm_format_conv_state *state);64void drm_format_conv_state_copy(struct drm_format_conv_state *state,65 const struct drm_format_conv_state *old_state);66void *drm_format_conv_state_reserve(struct drm_format_conv_state *state,67 size_t new_size, gfp_t flags);68void drm_format_conv_state_release(struct drm_format_conv_state *state);69 70unsigned int drm_fb_clip_offset(unsigned int pitch, const struct drm_format_info *format,71 const struct drm_rect *clip);72 73void drm_fb_memcpy(struct iosys_map *dst, const unsigned int *dst_pitch,74 const struct iosys_map *src, const struct drm_framebuffer *fb,75 const struct drm_rect *clip);76void drm_fb_swab(struct iosys_map *dst, const unsigned int *dst_pitch,77 const struct iosys_map *src, const struct drm_framebuffer *fb,78 const struct drm_rect *clip, bool cached,79 struct drm_format_conv_state *state);80void drm_fb_xrgb8888_to_rgb332(struct iosys_map *dst, const unsigned int *dst_pitch,81 const struct iosys_map *src, const struct drm_framebuffer *fb,82 const struct drm_rect *clip, struct drm_format_conv_state *state);83void drm_fb_xrgb8888_to_rgb565(struct iosys_map *dst, const unsigned int *dst_pitch,84 const struct iosys_map *src, const struct drm_framebuffer *fb,85 const struct drm_rect *clip, struct drm_format_conv_state *state,86 bool swab);87void drm_fb_xrgb8888_to_xrgb1555(struct iosys_map *dst, const unsigned int *dst_pitch,88 const struct iosys_map *src, const struct drm_framebuffer *fb,89 const struct drm_rect *clip, struct drm_format_conv_state *state);90void drm_fb_xrgb8888_to_argb1555(struct iosys_map *dst, const unsigned int *dst_pitch,91 const struct iosys_map *src, const struct drm_framebuffer *fb,92 const struct drm_rect *clip, struct drm_format_conv_state *state);93void drm_fb_xrgb8888_to_rgba5551(struct iosys_map *dst, const unsigned int *dst_pitch,94 const struct iosys_map *src, const struct drm_framebuffer *fb,95 const struct drm_rect *clip, struct drm_format_conv_state *state);96void drm_fb_xrgb8888_to_rgb888(struct iosys_map *dst, const unsigned int *dst_pitch,97 const struct iosys_map *src, const struct drm_framebuffer *fb,98 const struct drm_rect *clip, struct drm_format_conv_state *state);99void drm_fb_xrgb8888_to_argb8888(struct iosys_map *dst, const unsigned int *dst_pitch,100 const struct iosys_map *src, const struct drm_framebuffer *fb,101 const struct drm_rect *clip, struct drm_format_conv_state *state);102void drm_fb_xrgb8888_to_xrgb2101010(struct iosys_map *dst, const unsigned int *dst_pitch,103 const struct iosys_map *src, const struct drm_framebuffer *fb,104 const struct drm_rect *clip,105 struct drm_format_conv_state *state);106void drm_fb_xrgb8888_to_argb2101010(struct iosys_map *dst, const unsigned int *dst_pitch,107 const struct iosys_map *src, const struct drm_framebuffer *fb,108 const struct drm_rect *clip,109 struct drm_format_conv_state *state);110void drm_fb_xrgb8888_to_gray8(struct iosys_map *dst, const unsigned int *dst_pitch,111 const struct iosys_map *src, const struct drm_framebuffer *fb,112 const struct drm_rect *clip, struct drm_format_conv_state *state);113 114int drm_fb_blit(struct iosys_map *dst, const unsigned int *dst_pitch, uint32_t dst_format,115 const struct iosys_map *src, const struct drm_framebuffer *fb,116 const struct drm_rect *clip, struct drm_format_conv_state *state);117 118void drm_fb_xrgb8888_to_mono(struct iosys_map *dst, const unsigned int *dst_pitch,119 const struct iosys_map *src, const struct drm_framebuffer *fb,120 const struct drm_rect *clip, struct drm_format_conv_state *state);121 122size_t drm_fb_build_fourcc_list(struct drm_device *dev,123 const u32 *native_fourccs, size_t native_nfourccs,124 u32 *fourccs_out, size_t nfourccs_out);125 126#endif /* __LINUX_DRM_FORMAT_HELPER_H */127