mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-06-09 23:36:03 +09: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
|
@ -629,6 +629,22 @@ UCLASS_DRIVER(vidconsole) = {
|
||||||
.per_device_auto_alloc_size = sizeof(struct vidconsole_priv),
|
.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)
|
#if CONFIG_IS_ENABLED(CMD_VIDCONSOLE)
|
||||||
void vidconsole_position_cursor(struct udevice *dev, unsigned col, unsigned row)
|
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);
|
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
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue
Block a user