xref: /openbmc/u-boot/include/video_console.h (revision 4897d950)
1 /*
2  * Copyright (c) 2015 Google, Inc
3  *
4  * SPDX-License-Identifier:	GPL-2.0+
5  */
6 
7 #ifndef __video_console_h
8 #define __video_console_h
9 
10 /**
11  * struct vidconsole_priv - uclass-private data about a console device
12  *
13  * @sdev:	stdio device, acting as an output sink
14  * @curr_col:	Current text column (0=left)
15  * @curr_row:	Current row (0=top)
16  * @rows:	Number of text rows
17  * @cols:	Number of text columns
18  */
19 struct vidconsole_priv {
20 	struct stdio_dev sdev;
21 	int curr_col;
22 	int curr_row;
23 	int rows;
24 	int cols;
25 };
26 
27 /**
28  * struct vidconsole_ops - Video console operations
29  *
30  * These operations work on either an absolute console position (measured
31  * in pixels) or a text row number (measured in rows, where each row consists
32  * of an entire line of text - typically 16 pixels).
33  */
34 struct vidconsole_ops {
35 	/**
36 	 * putc_xy() - write a single character to a position
37 	 *
38 	 * @dev:	Device to write to
39 	 * @x:		Pixel X position (0=left-most pixel)
40 	 * @y:		Pixel Y position (0=top-most pixel)
41 	 * @ch:		Character to write
42 	 * @return 0 if OK, -ve on error
43 	 */
44 	int (*putc_xy)(struct udevice *dev, uint x, uint y, char ch);
45 
46 	/**
47 	 * move_rows() - Move text rows from one place to another
48 	 *
49 	 * @dev:	Device to adjust
50 	 * @rowdst:	Destination text row (0=top)
51 	 * @rowsrc:	Source start text row
52 	 * @count:	Number of text rows to move
53 	 * @return 0 if OK, -ve on error
54 	 */
55 	int (*move_rows)(struct udevice *dev, uint rowdst, uint rowsrc,
56 			  uint count);
57 
58 	/**
59 	 * set_row() - Set the colour of a text row
60 	 *
61 	 * Every pixel contained within the text row is adjusted
62 	 *
63 	 * @dev:	Device to adjust
64 	 * @row:	Text row to adjust (0=top)
65 	 * @clr:	Raw colour (pixel value) to write to each pixel
66 	 * @return 0 if OK, -ve on error
67 	 */
68 	int (*set_row)(struct udevice *dev, uint row, int clr);
69 };
70 
71 /* Get a pointer to the driver operations for a video console device */
72 #define vidconsole_get_ops(dev)  ((struct vidconsole_ops *)(dev)->driver->ops)
73 
74 /**
75  * vidconsole_putc_xy() - write a single character to a position
76  *
77  * @dev:	Device to write to
78  * @x:		Pixel X position (0=left-most pixel)
79  * @y:		Pixel Y position (0=top-most pixel)
80  * @ch:		Character to write
81  * @return 0 if OK, -ve on error
82  */
83 int vidconsole_putc_xy(struct udevice *dev, uint x, uint y, char ch);
84 
85 /**
86  * vidconsole_move_rows() - Move text rows from one place to another
87  *
88  * @dev:	Device to adjust
89  * @rowdst:	Destination text row (0=top)
90  * @rowsrc:	Source start text row
91  * @count:	Number of text rows to move
92  * @return 0 if OK, -ve on error
93  */
94 int vidconsole_move_rows(struct udevice *dev, uint rowdst, uint rowsrc,
95 			 uint count);
96 
97 /**
98  * vidconsole_set_row() - Set the colour of a text row
99  *
100  * Every pixel contained within the text row is adjusted
101  *
102  * @dev:	Device to adjust
103  * @row:	Text row to adjust (0=top)
104  * @clr:	Raw colour (pixel value) to write to each pixel
105  * @return 0 if OK, -ve on error
106  */
107 int vidconsole_set_row(struct udevice *dev, uint row, int clr);
108 
109 /**
110  * vidconsole_put_char() - Output a character to the current console position
111  *
112  * Outputs a character to the console and advances the cursor. This function
113  * handles wrapping to new lines and scrolling the console. Special
114  * characters are handled also: \n, \r, \b and \t.
115  *
116  * The device always starts with the cursor at position 0,0 (top left). It
117  * can be adjusted manually using vidconsole_position_cursor().
118  *
119  * @dev:	Device to adjust
120  * @ch:		Character to write
121  * @return 0 if OK, -ve on error
122  */
123 int vidconsole_put_char(struct udevice *dev, char ch);
124 
125 /**
126  * vidconsole_position_cursor() - Move the text cursor
127  *
128  * @dev:	Device to adjust
129  * @col:	New cursor text column
130  * @row:	New cursor text row
131  * @return 0 if OK, -ve on error
132  */
133 void vidconsole_position_cursor(struct udevice *dev, unsigned col,
134 				unsigned row);
135 
136 #endif
137