1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * (C) Copyright 2017 4 * Mario Six, Guntermann & Drunck GmbH, mario.six@gdsys.cc 5 */ 6 7 #ifndef _VIDEO_OSD_H_ 8 #define _VIDEO_OSD_H_ 9 10 struct video_osd_info { 11 /* The width of the OSD display in columns */ 12 uint width; 13 /* The height of the OSD display in rows */ 14 uint height; 15 /* The major version of the OSD device */ 16 uint major_version; 17 /* The minor version of the OSD device */ 18 uint minor_version; 19 }; 20 21 /** 22 * struct video_osd_ops - driver operations for OSD uclass 23 * 24 * The OSD uclass implements support for text-oriented on-screen displays, 25 * which are taken to be devices that independently display a graphical 26 * text-based overlay over the video output of an associated display. 27 * 28 * The functions defined by the uclass support writing text to the display in 29 * either a generic form (by specifying a string, a driver-specific color value 30 * for the text, and screen coordinates in rows and columns) or a 31 * driver-specific form (by specifying "raw" driver-specific data to display at 32 * a given coordinate). 33 * 34 * Functions to read device information and set the size of the virtual OSD 35 * screen (in rows and columns) are also supported. 36 * 37 * Drivers should support these operations unless otherwise noted. These 38 * operations are intended to be used by uclass code, not directly from 39 * other code. 40 */ 41 struct video_osd_ops { 42 /** 43 * get_info() - Get information about a OSD instance 44 * 45 * A OSD instance may keep some internal data about itself. This 46 * function can be used to access this data. 47 * 48 * @dev: OSD instance to query. 49 * @info: Pointer to a structure that takes the information read 50 * from the OSD instance. 51 * @return 0 if OK, -ve on error. 52 */ 53 int (*get_info)(struct udevice *dev, struct video_osd_info *info); 54 55 /** 56 * set_mem() - Write driver-specific text data to OSD screen 57 * 58 * The passed data are device-specific, and it's up to the driver how 59 * to interpret them. How the count parameter is interpreted is also 60 * driver-specific; most likely the given data will be written to the 61 * OSD count times back-to-back, which is e.g. convenient for filling 62 * areas of the OSD with a single character. 63 * 64 * For example a invocation of 65 * 66 * video_osd_set_mem(dev, 0, 0, "A", 1, 10); 67 * 68 * will write the device-specific text data "A" to the positions (0, 0) 69 * to (9, 0) on the OSD. 70 * 71 * Device-specific text data may, e.g. be a special encoding of glyphs 72 * to display and color values in binary format. 73 * 74 * @dev: OSD instance to write to. 75 * @col: Horizontal character coordinate to write to. 76 * @row Vertical character coordinate to write to. 77 * @buf: Array containing device-specific data to write to the 78 * specified coordinate on the OSD screen. 79 * @buflen: Length of the data in the passed buffer (in byte). 80 * @count: Write count many repetitions of the given text data 81 * @return 0 if OK, -ve on error. 82 */ 83 int (*set_mem)(struct udevice *dev, uint col, uint row, u8 *buf, 84 size_t buflen, uint count); 85 86 /** 87 * set_size() - Set the position and dimension of the OSD's 88 * writeable window 89 * 90 * @dev: OSD instance to write to. 91 * @col The number of characters in the window's columns 92 * @row The number of characters in the window's rows 93 * @return 0 if OK, -ve on error. 94 */ 95 int (*set_size)(struct udevice *dev, uint col, uint row); 96 97 /** 98 * print() - Print a string in a given color to specified coordinates 99 * on the OSD 100 * 101 * @dev: OSD instance to write to. 102 * @col The x-coordinate of the position the string should be 103 * written to 104 * @row The y-coordinate of the position the string should be 105 * written to 106 * @color: The color in which the specified string should be 107 * printed; the interpretation of the value is 108 * driver-specific, and possible values should be defined 109 * e.g. in a driver include file. 110 * @text: The string data that should be printed on the OSD 111 * @return 0 if OK, -ve on error. 112 */ 113 int (*print)(struct udevice *dev, uint col, uint row, ulong color, 114 char *text); 115 }; 116 117 #define video_osd_get_ops(dev) ((struct video_osd_ops *)(dev)->driver->ops) 118 119 /** 120 * video_osd_get_info() - Get information about a OSD instance 121 * 122 * A OSD instance may keep some internal data about itself. This function can 123 * be used to access this data. 124 * 125 * @dev: OSD instance to query. 126 * @info: Pointer to a structure that takes the information read from the 127 * OSD instance. 128 * @return 0 if OK, -ve on error. 129 */ 130 int video_osd_get_info(struct udevice *dev, struct video_osd_info *info); 131 132 /** 133 * video_osd_set_mem() - Write text data to OSD memory 134 * 135 * The passed data are device-specific, and it's up to the driver how to 136 * interpret them. How the count parameter is interpreted is also 137 * driver-specific; most likely the given data will be written to the OSD count 138 * times back-to-back, which is e.g. convenient for filling areas of the OSD 139 * with a single character. 140 * 141 * For example a invocation of 142 * 143 * video_osd_set_mem(dev, 0, 0, "A", 1, 10); 144 * 145 * will write the device-specific text data "A" to the positions (0, 0) to (9, 146 * 0) on the OSD. 147 * 148 * Device-specific text data may, e.g. be a special encoding of glyphs to 149 * display and color values in binary format. 150 * 151 * @dev: OSD instance to write to. 152 * @col: Horizontal character coordinate to write to. 153 * @row Vertical character coordinate to write to. 154 * @buf: Array containing device-specific data to write to the specified 155 * coordinate on the OSD screen. 156 * @buflen: Length of the data in the passed buffer (in byte). 157 * @count: Write count many repetitions of the given text data 158 * @return 0 if OK, -ve on error. 159 */ 160 int video_osd_set_mem(struct udevice *dev, uint col, uint row, u8 *buf, 161 size_t buflen, uint count); 162 163 /** 164 * video_osd_set_size() - Set the position and dimension of the OSD's 165 * writeable window 166 * 167 * @dev: OSD instance to write to. 168 * @col The number of characters in the window's columns 169 * @row The number of characters in the window's rows 170 * @return 0 if OK, -ve on error. 171 */ 172 int video_osd_set_size(struct udevice *dev, uint col, uint row); 173 174 /** 175 * video_osd_print() - Print a string in a given color to specified coordinates 176 * on the OSD 177 * 178 * @dev: OSD instance to write to. 179 * @col The x-coordinate of the position the string should be written 180 * to 181 * @row The y-coordinate of the position the string should be written 182 * to 183 * @color: The color in which the specified string should be printed; the 184 * interpretation of the value is driver-specific, and possible 185 * values should be defined e.g. in a driver include file. 186 * @text: The string data that should be printed on the OSD 187 * @return 0 if OK, -ve on error. 188 */ 189 int video_osd_print(struct udevice *dev, uint col, uint row, ulong color, 190 char *text); 191 192 #endif /* !_VIDEO_OSD_H_ */ 193