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