blob: c41edd45249a930edf1f8071fd355fe026d42545 [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/**
96 * console probe function.
97 *
98 * @param dev a pointer to device.
99 *
100 * @returns 0, if success, or else error code.
101 */
102int console_probe(struct udevice *dev);
Dzmitry Sankouskie7ee1fd2023-03-07 13:21:16 +0300103
104/**
105 * Internal function to be used in as ops.
106 * See details in video_console.h get_font_size function
107 **/
108const 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 **/
114int 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 **/
120int console_simple_select_font(struct udevice *dev, const char *name, uint size);