1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Copyright (c) 2015 Google, Inc
4  * (C) Copyright 2015
5  * Bernecker & Rainer Industrieelektronik GmbH - http://www.br-automation.com
6  * (C) Copyright 2023 Dzmitry Sankouski <dsankouski@gmail.com>
7  */
8 
9 #define FLIPPED_DIRECTION 1
10 #define NORMAL_DIRECTION 0
11 
12 /**
13  * struct console_simple_priv - Private data for this driver
14  *
15  * @video_fontdata	font graphical representation data
16  */
17 struct console_simple_priv {
18 	struct video_fontdata *fontdata;
19 };
20 
21 /**
22  * Checks if bits per pixel supported.
23  *
24  * @param bpix	framebuffer bits per pixel.
25  *
26  * @returns 0, if supported, or else -ENOSYS.
27  */
28 int check_bpix_support(int bpix);
29 
30 /**
31  * Fill 1 pixel in framebuffer, and go to next one.
32  *
33  * @param dstp		a pointer to pointer to framebuffer.
34  * @param value		value to write to framebuffer.
35  * @param pbytes	framebuffer bytes per pixel.
36  * @param step		framebuffer pointer increment. Usually is equal to pbytes,
37  *			and may be negative to control filling direction.
38  */
39 void fill_pixel_and_goto_next(void **dstp, u32 value, int pbytes, int step);
40 
41 /**
42  * Fills 1 character in framebuffer vertically. Vertically means we're filling char font data rows
43  * across the lines.
44  *
45  * @param pfont		a pointer to character font data.
46  * @param line		a pointer to pointer to framebuffer. It's a point for upper left char corner
47  * @param vid_priv	driver private data.
48  * @fontdata		font graphical representation data
49  * @param direction	controls character orientation. Can be normal or flipped.
50  * When normal:               When flipped:
51  *|-----------------------------------------------|
52  *| line stepping        |                        |
53  *|            |         |       stepping ->      |
54  *|     *      |         |       * * *            |
55  *|   * *      v         |         *              |
56  *|     *                |         *              |
57  *|     *                |         * *      ^     |
58  *|   * * *              |         *        |     |
59  *|                      |                  |     |
60  *| stepping ->          |         line stepping  |
61  *|---!!we're starting from upper left char corner|
62  *|-----------------------------------------------|
63  *
64  * @returns 0, if success, or else error code.
65  */
66 int fill_char_vertically(uchar *pfont, void **line, struct video_priv *vid_priv,
67 			 struct video_fontdata *fontdata, bool direction);
68 
69 /**
70  * Fills 1 character in framebuffer horizontally.
71  * Horizontally means we're filling char font data columns across the lines.
72  *
73  * @param pfont		a pointer to character font data.
74  * @param line		a pointer to pointer to framebuffer. It's a point for upper left char corner
75  * @param vid_priv	driver private data.
76  * @fontdata		font graphical representation data
77  * @param direction	controls character orientation. Can be normal or flipped.
78  * When normal:               When flipped:
79  *|-----------------------------------------------|
80  *|               *        |   line stepping      |
81  *|    ^  * * * * *        |   |                  |
82  *|    |    *     *        |   v   *     *        |
83  *|    |                   |       * * * * *      |
84  *|  line stepping         |       *              |
85  *|                        |                      |
86  *|  stepping ->           |        <- stepping   |
87  *|---!!we're starting from upper left char corner|
88  *|-----------------------------------------------|
89  *
90  * @returns 0, if success, or else error code.
91  */
92 int fill_char_horizontally(uchar *pfont, void **line, struct video_priv *vid_priv,
93 			   struct video_fontdata *fontdata, bool direction);
94 
95 /**
96  * console probe function.
97  *
98  * @param dev	a pointer to device.
99  *
100  * @returns 0, if success, or else error code.
101  */
102 int console_probe(struct udevice *dev);
103 
104 /**
105  * Internal function to be used in as ops.
106  * See details in video_console.h get_font_size function
107  **/
108 const char *console_simple_get_font_size(struct udevice *dev, uint *sizep);
109 
110 /**
111  * Internal function to be used in as ops.
112  * See details in video_console.h get_font function
113  **/
114 int console_simple_get_font(struct udevice *dev, int seq, struct vidfont_info *info);
115 
116 /**
117  * Internal function to be used in as ops.
118  * See details in video_console.h select_font function
119  **/
120 int console_simple_select_font(struct udevice *dev, const char *name, uint size);
121