mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 21:54:01 +00:00
video: Add helpers for vidconsole for the copy framebuffer
Add a convenience function to call video_sync_copy() for a vidconsole. Also add a memmove() helper, which does the memmove() as well as the sync. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Anatolij Gustschin <agust@denx.de> Tested-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
parent
138dfea86f
commit
8c0b5d268d
2 changed files with 65 additions and 0 deletions
|
@ -629,6 +629,22 @@ UCLASS_DRIVER(vidconsole) = {
|
|||
.per_device_auto_alloc_size = sizeof(struct vidconsole_priv),
|
||||
};
|
||||
|
||||
#ifdef CONFIG_VIDEO_COPY
|
||||
int vidconsole_sync_copy(struct udevice *dev, void *from, void *to)
|
||||
{
|
||||
struct udevice *vid = dev_get_parent(dev);
|
||||
|
||||
return video_sync_copy(vid, from, to);
|
||||
}
|
||||
|
||||
int vidconsole_memmove(struct udevice *dev, void *dst, const void *src,
|
||||
int size)
|
||||
{
|
||||
memmove(dst, src, size);
|
||||
return vidconsole_sync_copy(dev, dst, dst + size);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if CONFIG_IS_ENABLED(CMD_VIDCONSOLE)
|
||||
void vidconsole_position_cursor(struct udevice *dev, unsigned col, unsigned row)
|
||||
{
|
||||
|
|
|
@ -256,4 +256,53 @@ void vidconsole_position_cursor(struct udevice *dev, unsigned col,
|
|||
*/
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue