162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci *	Access to VGA videoram
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci *	(c) 1998 Martin Mares <mj@ucw.cz>
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#ifndef _LINUX_ASM_VGA_H_
962306a36Sopenharmony_ci#define _LINUX_ASM_VGA_H_
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <asm/io.h>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#define VT_BUF_HAVE_RW
1462306a36Sopenharmony_ci#define VT_BUF_HAVE_MEMSETW
1562306a36Sopenharmony_ci#define VT_BUF_HAVE_MEMCPYW
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cistatic inline void scr_writew(u16 val, volatile u16 *addr)
1862306a36Sopenharmony_ci{
1962306a36Sopenharmony_ci	if (__is_ioaddr(addr))
2062306a36Sopenharmony_ci		__raw_writew(val, (volatile u16 __iomem *) addr);
2162306a36Sopenharmony_ci	else
2262306a36Sopenharmony_ci		*addr = val;
2362306a36Sopenharmony_ci}
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_cistatic inline u16 scr_readw(volatile const u16 *addr)
2662306a36Sopenharmony_ci{
2762306a36Sopenharmony_ci	if (__is_ioaddr(addr))
2862306a36Sopenharmony_ci		return __raw_readw((volatile const u16 __iomem *) addr);
2962306a36Sopenharmony_ci	else
3062306a36Sopenharmony_ci		return *addr;
3162306a36Sopenharmony_ci}
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_cistatic inline void scr_memsetw(u16 *s, u16 c, unsigned int count)
3462306a36Sopenharmony_ci{
3562306a36Sopenharmony_ci	if (__is_ioaddr(s))
3662306a36Sopenharmony_ci		memsetw_io((u16 __iomem *) s, c, count);
3762306a36Sopenharmony_ci	else
3862306a36Sopenharmony_ci		memset16(s, c, count / 2);
3962306a36Sopenharmony_ci}
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci/* Do not trust that the usage will be correct; analyze the arguments.  */
4262306a36Sopenharmony_ciextern void scr_memcpyw(u16 *d, const u16 *s, unsigned int count);
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci/* ??? These are currently only used for downloading character sets.  As
4562306a36Sopenharmony_ci   such, they don't need memory barriers.  Is this all they are intended
4662306a36Sopenharmony_ci   to be used for?  */
4762306a36Sopenharmony_ci#define vga_readb(a)	readb((u8 __iomem *)(a))
4862306a36Sopenharmony_ci#define vga_writeb(v,a)	writeb(v, (u8 __iomem *)(a))
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci#ifdef CONFIG_VGA_HOSE
5162306a36Sopenharmony_ci#include <linux/ioport.h>
5262306a36Sopenharmony_ci#include <linux/pci.h>
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ciextern struct pci_controller *pci_vga_hose;
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci# define __is_port_vga(a)       \
5762306a36Sopenharmony_ci	(((a) >= 0x3b0) && ((a) < 0x3e0) && \
5862306a36Sopenharmony_ci	 ((a) != 0x3b3) && ((a) != 0x3d3))
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci# define __is_mem_vga(a) \
6162306a36Sopenharmony_ci	(((a) >= 0xa0000) && ((a) <= 0xc0000))
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci# define FIXUP_IOADDR_VGA(a) do {                       \
6462306a36Sopenharmony_ci	if (pci_vga_hose && __is_port_vga(a))     \
6562306a36Sopenharmony_ci		(a) += pci_vga_hose->io_space->start;	  \
6662306a36Sopenharmony_ci } while(0)
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci# define FIXUP_MEMADDR_VGA(a) do {                       \
6962306a36Sopenharmony_ci	if (pci_vga_hose && __is_mem_vga(a))     \
7062306a36Sopenharmony_ci		(a) += pci_vga_hose->mem_space->start; \
7162306a36Sopenharmony_ci } while(0)
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ci#else /* CONFIG_VGA_HOSE */
7462306a36Sopenharmony_ci# define pci_vga_hose 0
7562306a36Sopenharmony_ci# define __is_port_vga(a) 0
7662306a36Sopenharmony_ci# define __is_mem_vga(a) 0
7762306a36Sopenharmony_ci# define FIXUP_IOADDR_VGA(a)
7862306a36Sopenharmony_ci# define FIXUP_MEMADDR_VGA(a)
7962306a36Sopenharmony_ci#endif /* CONFIG_VGA_HOSE */
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_ci#define VGA_MAP_MEM(x,s)	((unsigned long) ioremap(x, s))
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci#endif
84