alpha: sort scr_mem{cpy,move}w() out
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 30 Jan 2024 19:25:43 +0000 (14:25 -0500)
committerArnd Bergmann <arnd@arndb.de>
Fri, 3 May 2024 20:08:50 +0000 (22:08 +0200)
Take scr_memmove() out of line, make both it and scr_memcpyw()
conditional upon VGA_CONSOLE or MDA_CONSOLE (if neither is
selected, we are certain to be working with the kernel-allocated
buffer rather than VRAM and defaults will work just fine).

That allows to clean vt_buffer.h, but that's a separate story

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Acked-by: Paul E. McKenney <paulmck@kernel.org>
Acked-by: Matt Turner <mattst88@gmail.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
arch/alpha/include/asm/vga.h
arch/alpha/kernel/io.c

index 4c347a8454c7023a7911fe2e73ce137760e6a533..919931cb5b63d2b2b25d241123881bb888f2a1d2 100644 (file)
@@ -13,6 +13,7 @@
 #define VT_BUF_HAVE_RW
 #define VT_BUF_HAVE_MEMSETW
 #define VT_BUF_HAVE_MEMCPYW
+#define VT_BUF_HAVE_MEMMOVEW
 
 static inline void scr_writew(u16 val, volatile u16 *addr)
 {
@@ -40,6 +41,7 @@ static inline void scr_memsetw(u16 *s, u16 c, unsigned int count)
 
 /* Do not trust that the usage will be correct; analyze the arguments.  */
 extern void scr_memcpyw(u16 *d, const u16 *s, unsigned int count);
+extern void scr_memmovew(u16 *d, const u16 *s, unsigned int count);
 
 /* ??? These are currently only used for downloading character sets.  As
    such, they don't need memory barriers.  Is this all they are intended
index eda09778268f0199e7730090752aff17eb865dd4..c28035d6d1e65328501035cce52035fcfb6adda2 100644 (file)
@@ -647,6 +647,10 @@ void _memset_c_io(volatile void __iomem *to, unsigned long c, long count)
 
 EXPORT_SYMBOL(_memset_c_io);
 
+#if IS_ENABLED(CONFIG_VGA_CONSOLE) || IS_ENABLED(CONFIG_MDA_CONSOLE)
+
+#include <asm/vga.h>
+
 /* A version of memcpy used by the vga console routines to move data around
    arbitrarily between screen and main memory.  */
 
@@ -681,6 +685,21 @@ scr_memcpyw(u16 *d, const u16 *s, unsigned int count)
 
 EXPORT_SYMBOL(scr_memcpyw);
 
+void scr_memmovew(u16 *d, const u16 *s, unsigned int count)
+{
+       if (d < s)
+               scr_memcpyw(d, s, count);
+       else {
+               count /= 2;
+               d += count;
+               s += count;
+               while (count--)
+                       scr_writew(scr_readw(--s), --d);
+       }
+}
+EXPORT_SYMBOL(scr_memmovew);
+#endif
+
 void __iomem *ioport_map(unsigned long port, unsigned int size)
 {
        return IO_CONCAT(__IO_PREFIX,ioportmap) (port);