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