1633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/*
2633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham *	Access to VGA videoram
3633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham *
4633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham *	(c) 1998 Martin Mares <mj@ucw.cz>
5633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham */
6633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#ifndef _ASM_VGA_H
7633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define _ASM_VGA_H
8633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
9633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#include <asm/byteorder.h>
10633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
11633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/*
12633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham *	On the PC, we can just recalculate addresses and then
13633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham *	access the videoram directly without any black magic.
14633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham */
15633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
16633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define VGA_MAP_MEM(x, s)	(0xb0000000L + (unsigned long)(x))
17633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
18633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define vga_readb(x)	(*(x))
19633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define vga_writeb(x, y)	(*(y) = (x))
20633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
21633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define VT_BUF_HAVE_RW
22633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/*
23633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham *  These are only needed for supporting VGA or MDA text mode, which use little
24633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham *  endian byte ordering.
25633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham *  In other cases, we can optimize by using native byte ordering and
26633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham *  <linux/vt_buffer.h> has already done the right job for us.
27633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham */
28633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
29633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#undef scr_writew
30633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#undef scr_readw
31633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
32633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstatic inline void scr_writew(u16 val, volatile u16 *addr)
33633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham{
34633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham	*addr = cpu_to_le16(val);
35633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}
36633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
37633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstatic inline u16 scr_readw(volatile const u16 *addr)
38633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham{
39633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham	return le16_to_cpu(*addr);
40633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}
41633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
42633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define scr_memcpyw(d, s, c) memcpy(d, s, c)
43633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define scr_memmovew(d, s, c) memmove(d, s, c)
44633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define VT_BUF_HAVE_MEMCPYW
45633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define VT_BUF_HAVE_MEMMOVEW
46633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham
47633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#endif /* _ASM_VGA_H */
48