X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=include%2Fvideo_console.h;h=5921767fbf069cc29d3cae3639cbfcb49d840831;hb=c45568cc4e51b7bbe2f3ce28d8f2566048aeebf3;hp=7621a189d2a2855e906ef620e44142670e140641;hpb=ebca902aeb3af3eaedd2787928184ad84a86b98f;p=platform%2Fkernel%2Fu-boot.git diff --git a/include/video_console.h b/include/video_console.h index 7621a18..5921767 100644 --- a/include/video_console.h +++ b/include/video_console.h @@ -1,7 +1,6 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ /* * Copyright (c) 2015 Google, Inc - * - * SPDX-License-Identifier: GPL-2.0+ */ #ifndef __video_console_h @@ -9,6 +8,8 @@ #include +struct video_priv; + #define VID_FRAC_DIV 256 #define VID_TO_PIXEL(x) ((x) / VID_FRAC_DIV) @@ -44,20 +45,22 @@ enum color_idx { * Drivers must set up @rows, @cols, @x_charsize, @y_charsize in their probe() * method. Drivers may set up @xstart_frac if desired. * - * @sdev: stdio device, acting as an output sink - * @xcur_frac: Current X position, in fractional units (VID_TO_POS(x)) - * @curr_row: Current Y position in pixels (0=top) - * @rows: Number of text rows - * @cols: Number of text columns - * @x_charsize: Character width in pixels - * @y_charsize: Character height in pixels + * @sdev: stdio device, acting as an output sink + * @xcur_frac: Current X position, in fractional units (VID_TO_POS(x)) + * @ycur: Current Y position in pixels (0=top) + * @rows: Number of text rows + * @cols: Number of text columns + * @x_charsize: Character width in pixels + * @y_charsize: Character height in pixels * @tab_width_frac: Tab width in fractional units - * @xsize_frac: Width of the display in fractional units + * @xsize_frac: Width of the display in fractional units * @xstart_frac: Left margin for the text console in fractional units - * @last_ch: Last character written to the text console on this line - * @escape: TRUE if currently accumulating an ANSI escape sequence - * @escape_len: Length of accumulated escape sequence so far - * @escape_buf: Buffer to accumulate escape sequence + * @last_ch: Last character written to the text console on this line + * @escape: TRUE if currently accumulating an ANSI escape sequence + * @escape_len: Length of accumulated escape sequence so far + * @col_saved: Saved X position, in fractional units (VID_TO_POS(x)) + * @row_saved: Saved Y position in pixels (0=top) + * @escape_buf: Buffer to accumulate escape sequence */ struct vidconsole_priv { struct stdio_dev sdev; @@ -78,6 +81,8 @@ struct vidconsole_priv { */ int escape; int escape_len; + int row_saved; + int col_saved; char escape_buf[32]; }; @@ -165,7 +170,7 @@ struct vidconsole_ops { * is the X position multipled by VID_FRAC_DIV. * @y: Pixel Y position (0=top-most pixel) * @ch: Character to write - * @return number of fractional pixels that the cursor should move, + * Return: number of fractional pixels that the cursor should move, * if all is OK, -EAGAIN if we ran out of space on this line, other -ve * on error */ @@ -178,7 +183,7 @@ int vidconsole_putc_xy(struct udevice *dev, uint x, uint y, char ch); * @rowdst: Destination text row (0=top) * @rowsrc: Source start text row * @count: Number of text rows to move - * @return 0 if OK, -ve on error + * Return: 0 if OK, -ve on error */ int vidconsole_move_rows(struct udevice *dev, uint rowdst, uint rowsrc, uint count); @@ -191,7 +196,7 @@ int vidconsole_move_rows(struct udevice *dev, uint rowdst, uint rowsrc, * @dev: Device to adjust * @row: Text row to adjust (0=top) * @clr: Raw colour (pixel value) to write to each pixel - * @return 0 if OK, -ve on error + * Return: 0 if OK, -ve on error */ int vidconsole_set_row(struct udevice *dev, uint row, int clr); @@ -207,23 +212,37 @@ int vidconsole_set_row(struct udevice *dev, uint row, int clr); * * @dev: Device to adjust * @ch: Character to write - * @return 0 if OK, -ve on error + * Return: 0 if OK, -ve on error */ int vidconsole_put_char(struct udevice *dev, char ch); /** + * vidconsole_put_string() - Output a string to the current console position + * + * Outputs a string to the console and advances the cursor. This function + * handles wrapping to new lines and scrolling the console. Special + * characters are handled also: \n, \r, \b and \t. + * + * The device always starts with the cursor at position 0,0 (top left). It + * can be adjusted manually using vidconsole_position_cursor(). + * + * @dev: Device to adjust + * @str: String to write + * Return: 0 if OK, -ve on error + */ +int vidconsole_put_string(struct udevice *dev, const char *str); + +/** * vidconsole_position_cursor() - Move the text cursor * * @dev: Device to adjust * @col: New cursor text column * @row: New cursor text row - * @return 0 if OK, -ve on error + * Return: 0 if OK, -ve on error */ void vidconsole_position_cursor(struct udevice *dev, unsigned col, unsigned row); -#ifdef CONFIG_DM_VIDEO - /** * vid_console_color() - convert a color code to a pixel's internal * representation @@ -233,10 +252,57 @@ void vidconsole_position_cursor(struct udevice *dev, unsigned col, * * @priv private data of the console device * @idx color index - * @return color value + * Return: color value */ u32 vid_console_color(struct video_priv *priv, unsigned int idx); +#ifdef CONFIG_VIDEO_COPY +/** + * vidconsole_sync_copy() - Sync back to the copy framebuffer + * + * This ensures that the copy framebuffer has the same data as the framebuffer + * for a particular region. It should be called after the framebuffer is updated + * + * @from and @to can be in either order. The region between them is synced. + * + * @dev: Vidconsole device being updated + * @from: Start/end address within the framebuffer (->fb) + * @to: Other address within the frame buffer + * Return: 0 if OK, -EFAULT if the start address is before the start of the + * frame buffer start + */ +int vidconsole_sync_copy(struct udevice *dev, void *from, void *to); + +/** + * vidconsole_memmove() - Perform a memmove() within the frame buffer + * + * This handles a memmove(), e.g. for scrolling. It also updates the copy + * framebuffer. + * + * @dev: Vidconsole device being updated + * @dst: Destination address within the framebuffer (->fb) + * @src: Source address within the framebuffer (->fb) + * @size: Number of bytes to transfer + * Return: 0 if OK, -EFAULT if the start address is before the start of the + * frame buffer start + */ +int vidconsole_memmove(struct udevice *dev, void *dst, const void *src, + int size); +#else +static inline int vidconsole_sync_copy(struct udevice *dev, void *from, + void *to) +{ + return 0; +} + +static inline int vidconsole_memmove(struct udevice *dev, void *dst, + const void *src, int size) +{ + memmove(dst, src, size); + + return 0; +} + #endif #endif