12874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
27415287eSGerd Hoffmann /*
37415287eSGerd Hoffmann  * Copyright (C) 2016 Noralf Trønnes
47415287eSGerd Hoffmann  */
57415287eSGerd Hoffmann 
67415287eSGerd Hoffmann #ifndef __LINUX_DRM_FORMAT_HELPER_H
77415287eSGerd Hoffmann #define __LINUX_DRM_FORMAT_HELPER_H
87415287eSGerd Hoffmann 
94a85b0b5SThomas Zimmermann #include <linux/types.h>
104a85b0b5SThomas Zimmermann 
114a85b0b5SThomas Zimmermann struct drm_device;
12452290f3SThomas Zimmermann struct drm_format_info;
137415287eSGerd Hoffmann struct drm_framebuffer;
147415287eSGerd Hoffmann struct drm_rect;
157415287eSGerd Hoffmann 
164a85b0b5SThomas Zimmermann struct iosys_map;
174a85b0b5SThomas Zimmermann 
18452290f3SThomas Zimmermann unsigned int drm_fb_clip_offset(unsigned int pitch, const struct drm_format_info *format,
19452290f3SThomas Zimmermann 				const struct drm_rect *clip);
20452290f3SThomas Zimmermann 
21edbe262aSThomas Zimmermann void drm_fb_memcpy(struct iosys_map *dst, const unsigned int *dst_pitch,
22504a51d7SThomas Zimmermann 		   const struct iosys_map *src, const struct drm_framebuffer *fb,
23edbe262aSThomas Zimmermann 		   const struct drm_rect *clip);
24ce582859SThomas Zimmermann void drm_fb_swab(struct iosys_map *dst, const unsigned int *dst_pitch,
25504a51d7SThomas Zimmermann 		 const struct iosys_map *src, const struct drm_framebuffer *fb,
26ce582859SThomas Zimmermann 		 const struct drm_rect *clip, bool cached);
27e13140a0SThomas Zimmermann void drm_fb_xrgb8888_to_rgb332(struct iosys_map *dst, const unsigned int *dst_pitch,
28504a51d7SThomas Zimmermann 			       const struct iosys_map *src, const struct drm_framebuffer *fb,
29e13140a0SThomas Zimmermann 			       const struct drm_rect *clip);
30ab298c29SThomas Zimmermann void drm_fb_xrgb8888_to_rgb565(struct iosys_map *dst, const unsigned int *dst_pitch,
31504a51d7SThomas Zimmermann 			       const struct iosys_map *src, const struct drm_framebuffer *fb,
3253bc2098SThomas Zimmermann 			       const struct drm_rect *clip, bool swab);
33*10cd592eSThomas Zimmermann void drm_fb_xrgb8888_to_xrgb1555(struct iosys_map *dst, const unsigned int *dst_pitch,
34*10cd592eSThomas Zimmermann 				 const struct iosys_map *src, const struct drm_framebuffer *fb,
35*10cd592eSThomas Zimmermann 				 const struct drm_rect *clip);
36*10cd592eSThomas Zimmermann void drm_fb_xrgb8888_to_argb1555(struct iosys_map *dst, const unsigned int *dst_pitch,
37*10cd592eSThomas Zimmermann 				 const struct iosys_map *src, const struct drm_framebuffer *fb,
38*10cd592eSThomas Zimmermann 				 const struct drm_rect *clip);
39*10cd592eSThomas Zimmermann void drm_fb_xrgb8888_to_rgba5551(struct iosys_map *dst, const unsigned int *dst_pitch,
40*10cd592eSThomas Zimmermann 				 const struct iosys_map *src, const struct drm_framebuffer *fb,
41*10cd592eSThomas Zimmermann 				 const struct drm_rect *clip);
42c4863ce0SThomas Zimmermann void drm_fb_xrgb8888_to_rgb888(struct iosys_map *dst, const unsigned int *dst_pitch,
43504a51d7SThomas Zimmermann 			       const struct iosys_map *src, const struct drm_framebuffer *fb,
4453bc2098SThomas Zimmermann 			       const struct drm_rect *clip);
45175073d6SThomas Zimmermann void drm_fb_xrgb8888_to_argb8888(struct iosys_map *dst, const unsigned int *dst_pitch,
46175073d6SThomas Zimmermann 				 const struct iosys_map *src, const struct drm_framebuffer *fb,
47175073d6SThomas Zimmermann 				 const struct drm_rect *clip);
48ce73f456SThomas Zimmermann void drm_fb_xrgb8888_to_xrgb2101010(struct iosys_map *dst, const unsigned int *dst_pitch,
49504a51d7SThomas Zimmermann 				    const struct iosys_map *src, const struct drm_framebuffer *fb,
50877691b9SHector Martin 				    const struct drm_rect *clip);
5156119bfbSThomas Zimmermann void drm_fb_xrgb8888_to_argb2101010(struct iosys_map *dst, const unsigned int *dst_pitch,
5256119bfbSThomas Zimmermann 				    const struct iosys_map *src, const struct drm_framebuffer *fb,
5356119bfbSThomas Zimmermann 				    const struct drm_rect *clip);
547bef6449SThomas Zimmermann void drm_fb_xrgb8888_to_gray8(struct iosys_map *dst, const unsigned int *dst_pitch,
55504a51d7SThomas Zimmermann 			      const struct iosys_map *src, const struct drm_framebuffer *fb,
567bef6449SThomas Zimmermann 			      const struct drm_rect *clip);
577415287eSGerd Hoffmann 
5871bf5587SThomas Zimmermann int drm_fb_blit(struct iosys_map *dst, const unsigned int *dst_pitch, uint32_t dst_format,
59504a51d7SThomas Zimmermann 		const struct iosys_map *src, const struct drm_framebuffer *fb,
6019b20a80SThomas Zimmermann 		const struct drm_rect *rect);
61900d3e4aSThomas Zimmermann 
62b3aca563SThomas Zimmermann void drm_fb_xrgb8888_to_mono(struct iosys_map *dst, const unsigned int *dst_pitch,
63504a51d7SThomas Zimmermann 			     const struct iosys_map *src, const struct drm_framebuffer *fb,
64b3aca563SThomas Zimmermann 			     const struct drm_rect *clip);
65bcf8b616SJavier Martinez Canillas 
664a85b0b5SThomas Zimmermann size_t drm_fb_build_fourcc_list(struct drm_device *dev,
674a85b0b5SThomas Zimmermann 				const u32 *native_fourccs, size_t native_nfourccs,
684a85b0b5SThomas Zimmermann 				u32 *fourccs_out, size_t nfourccs_out);
694a85b0b5SThomas Zimmermann 
707415287eSGerd Hoffmann #endif /* __LINUX_DRM_FORMAT_HELPER_H */
71