blob: 0ec581b266388e68b940a9098cafa9e52a5b2a19 [file] [log] [blame]
Dzmitry Sankouski31547252023-03-07 13:21:11 +03001/* 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
Dzmitry Sankouski31547252023-03-07 13:21:11 +03009#define FLIPPED_DIRECTION 1
10#define NORMAL_DIRECTION 0
11
12/**
Dzmitry Sankouski39c1fa22023-03-07 13:21:14 +030013 * struct console_simple_priv - Private data for this driver
14 *
15 * @video_fontdata font graphical representation data
16 */
17struct console_simple_priv {
18 struct video_fontdata *fontdata;
19};
20
21/**
Dzmitry Sankouski31547252023-03-07 13:21:11 +030022 * Checks if bits per pixel supported.
23 *
24 * @param bpix framebuffer bits per pixel.
25 *
26 * @returns 0, if supported, or else -ENOSYS.
27 */
28int 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 */
39void 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.
Dzmitry Sankouski39c1fa22023-03-07 13:21:14 +030048 * @fontdata font graphical representation data
Dzmitry Sankouski31547252023-03-07 13:21:11 +030049 * @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 */
66int fill_char_vertically(uchar *pfont, void **line, struct video_priv *vid_priv,
Dzmitry Sankouski39c1fa22023-03-07 13:21:14 +030067 struct video_fontdata *fontdata, bool direction);
Dzmitry Sankouski31547252023-03-07 13:21:11 +030068
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.
Dzmitry Sankouski39c1fa22023-03-07 13:21:14 +030076 * @fontdata font graphical representation data
Dzmitry Sankouski31547252023-03-07 13:21:11 +030077 * @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 */
92int fill_char_horizontally(uchar *pfont, void **line, struct video_priv *vid_priv,
Dzmitry Sankouski39c1fa22023-03-07 13:21:14 +030093 struct video_fontdata *fontdata, bool direction);
Dzmitry Sankouski31547252023-03-07 13:21:11 +030094
95/**
Simon Glass37db20d2023-10-01 19:13:21 -060096 * draw_cursor_vertically() - Draw a simple vertical cursor
97 *
98 * @line: pointer to framebuffer buffer: upper left cursor corner
99 * @vid_priv: driver private data
100 * @height: height of the cursor in pixels
101 * @param direction controls cursor orientation. Can be normal or flipped.
102 * When normal: When flipped:
103 *|-----------------------------------------------|
104 *| * | line stepping |
105 *| ^ * * * * * | | |
106 *| | * * | v * * |
107 *| | | * * * * * |
108 *| line stepping | * |
109 *| | |
110 *| stepping -> | <<- stepping |
111 *|---!!we're starting from upper left char corner|
112 *|-----------------------------------------------|
113 *
114 * Return: 0, if success, or else error code.
115 */
116int draw_cursor_vertically(void **line, struct video_priv *vid_priv,
117 uint height, bool direction);
118
119/**
Dzmitry Sankouski31547252023-03-07 13:21:11 +0300120 * console probe function.
121 *
122 * @param dev a pointer to device.
123 *
124 * @returns 0, if success, or else error code.
125 */
126int console_probe(struct udevice *dev);
Dzmitry Sankouskie7ee1fd2023-03-07 13:21:16 +0300127
128/**
129 * Internal function to be used in as ops.
130 * See details in video_console.h get_font_size function
131 **/
132const char *console_simple_get_font_size(struct udevice *dev, uint *sizep);
133
134/**
135 * Internal function to be used in as ops.
136 * See details in video_console.h get_font function
137 **/
138int console_simple_get_font(struct udevice *dev, int seq, struct vidfont_info *info);
139
140/**
141 * Internal function to be used in as ops.
142 * See details in video_console.h select_font function
143 **/
144int console_simple_select_font(struct udevice *dev, const char *name, uint size);