xref: /openbmc/linux/include/video/vga.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
11da177e4SLinus Torvalds /*
21da177e4SLinus Torvalds  * linux/include/video/vga.h -- standard VGA chipset interaction
31da177e4SLinus Torvalds  *
41da177e4SLinus Torvalds  * Copyright 1999 Jeff Garzik <jgarzik@pobox.com>
51da177e4SLinus Torvalds  *
61da177e4SLinus Torvalds  * Copyright history from vga16fb.c:
71da177e4SLinus Torvalds  *	Copyright 1999 Ben Pfaff and Petr Vandrovec
8c84e032eSJustin P. Mattock  *	Based on VGA info at http://www.osdever.net/FreeVGA/home.htm
91da177e4SLinus Torvalds  *	Based on VESA framebuffer (c) 1998 Gerd Knorr
101da177e4SLinus Torvalds  *
111da177e4SLinus Torvalds  * This file is subject to the terms and conditions of the GNU General
121da177e4SLinus Torvalds  * Public License.  See the file COPYING in the main directory of this
131da177e4SLinus Torvalds  * archive for more details.
141da177e4SLinus Torvalds  *
151da177e4SLinus Torvalds  */
161da177e4SLinus Torvalds 
171da177e4SLinus Torvalds #ifndef __linux_video_vga_h__
181da177e4SLinus Torvalds #define __linux_video_vga_h__
191da177e4SLinus Torvalds 
201da177e4SLinus Torvalds #include <linux/types.h>
212584cf83SDan Williams #include <linux/io.h>
221da177e4SLinus Torvalds #include <asm/vga.h>
231da177e4SLinus Torvalds #include <asm/byteorder.h>
241da177e4SLinus Torvalds 
25*4652905fSThomas Zimmermann #define VGA_FB_PHYS_BASE	0xA0000 /* VGA framebuffer I/O base */
26*4652905fSThomas Zimmermann #define VGA_FB_PHYS_SIZE	65536	/* VGA framebuffer I/O size */
271da177e4SLinus Torvalds 
281da177e4SLinus Torvalds /* Some of the code below is taken from SVGAlib.  The original,
291da177e4SLinus Torvalds    unmodified copyright notice for that code is below. */
301da177e4SLinus Torvalds /* VGAlib version 1.2 - (c) 1993 Tommy Frandsen                    */
311da177e4SLinus Torvalds /*                                                                 */
321da177e4SLinus Torvalds /* This library is free software; you can redistribute it and/or   */
331da177e4SLinus Torvalds /* modify it without any restrictions. This library is distributed */
341da177e4SLinus Torvalds /* in the hope that it will be useful, but without any warranty.   */
351da177e4SLinus Torvalds 
361da177e4SLinus Torvalds /* Multi-chipset support Copyright 1993 Harm Hanemaayer */
371da177e4SLinus Torvalds /* partially copyrighted (C) 1993 by Hartmut Schirmer */
381da177e4SLinus Torvalds 
391da177e4SLinus Torvalds /* VGA data register ports */
401da177e4SLinus Torvalds #define VGA_CRT_DC  	0x3D5	/* CRT Controller Data Register - color emulation */
411da177e4SLinus Torvalds #define VGA_CRT_DM  	0x3B5	/* CRT Controller Data Register - mono emulation */
421da177e4SLinus Torvalds #define VGA_ATT_R   	0x3C1	/* Attribute Controller Data Read Register */
431da177e4SLinus Torvalds #define VGA_ATT_W   	0x3C0	/* Attribute Controller Data Write Register */
441da177e4SLinus Torvalds #define VGA_GFX_D   	0x3CF	/* Graphics Controller Data Register */
451da177e4SLinus Torvalds #define VGA_SEQ_D   	0x3C5	/* Sequencer Data Register */
461da177e4SLinus Torvalds #define VGA_MIS_R   	0x3CC	/* Misc Output Read Register */
471da177e4SLinus Torvalds #define VGA_MIS_W   	0x3C2	/* Misc Output Write Register */
481da177e4SLinus Torvalds #define VGA_FTC_R	0x3CA	/* Feature Control Read Register */
491da177e4SLinus Torvalds #define VGA_IS1_RC  	0x3DA	/* Input Status Register 1 - color emulation */
501da177e4SLinus Torvalds #define VGA_IS1_RM  	0x3BA	/* Input Status Register 1 - mono emulation */
511da177e4SLinus Torvalds #define VGA_PEL_D   	0x3C9	/* PEL Data Register */
521da177e4SLinus Torvalds #define VGA_PEL_MSK 	0x3C6	/* PEL mask register */
531da177e4SLinus Torvalds 
541da177e4SLinus Torvalds /* EGA-specific registers */
551da177e4SLinus Torvalds #define EGA_GFX_E0	0x3CC	/* Graphics enable processor 0 */
561da177e4SLinus Torvalds #define EGA_GFX_E1	0x3CA	/* Graphics enable processor 1 */
571da177e4SLinus Torvalds 
581da177e4SLinus Torvalds /* VGA index register ports */
591da177e4SLinus Torvalds #define VGA_CRT_IC  	0x3D4	/* CRT Controller Index - color emulation */
601da177e4SLinus Torvalds #define VGA_CRT_IM  	0x3B4	/* CRT Controller Index - mono emulation */
611da177e4SLinus Torvalds #define VGA_ATT_IW  	0x3C0	/* Attribute Controller Index & Data Write Register */
621da177e4SLinus Torvalds #define VGA_GFX_I   	0x3CE	/* Graphics Controller Index */
631da177e4SLinus Torvalds #define VGA_SEQ_I   	0x3C4	/* Sequencer Index */
641da177e4SLinus Torvalds #define VGA_PEL_IW  	0x3C8	/* PEL Write Index */
651da177e4SLinus Torvalds #define VGA_PEL_IR  	0x3C7	/* PEL Read Index */
661da177e4SLinus Torvalds 
671da177e4SLinus Torvalds /* standard VGA indexes max counts */
681da177e4SLinus Torvalds #define VGA_CRT_C   	0x19	/* Number of CRT Controller Registers */
691da177e4SLinus Torvalds #define VGA_ATT_C   	0x15	/* Number of Attribute Controller Registers */
701da177e4SLinus Torvalds #define VGA_GFX_C   	0x09	/* Number of Graphics Controller Registers */
711da177e4SLinus Torvalds #define VGA_SEQ_C   	0x05	/* Number of Sequencer Registers */
721da177e4SLinus Torvalds #define VGA_MIS_C   	0x01	/* Number of Misc Output Register */
731da177e4SLinus Torvalds 
741da177e4SLinus Torvalds /* VGA misc register bit masks */
751da177e4SLinus Torvalds #define VGA_MIS_COLOR		0x01
761da177e4SLinus Torvalds #define VGA_MIS_ENB_MEM_ACCESS	0x02
771da177e4SLinus Torvalds #define VGA_MIS_DCLK_28322_720	0x04
781da177e4SLinus Torvalds #define VGA_MIS_ENB_PLL_LOAD	(0x04 | 0x08)
791da177e4SLinus Torvalds #define VGA_MIS_SEL_HIGH_PAGE	0x20
801da177e4SLinus Torvalds 
811da177e4SLinus Torvalds /* VGA CRT controller register indices */
821da177e4SLinus Torvalds #define VGA_CRTC_H_TOTAL	0
831da177e4SLinus Torvalds #define VGA_CRTC_H_DISP		1
841da177e4SLinus Torvalds #define VGA_CRTC_H_BLANK_START	2
851da177e4SLinus Torvalds #define VGA_CRTC_H_BLANK_END	3
861da177e4SLinus Torvalds #define VGA_CRTC_H_SYNC_START	4
871da177e4SLinus Torvalds #define VGA_CRTC_H_SYNC_END	5
881da177e4SLinus Torvalds #define VGA_CRTC_V_TOTAL	6
891da177e4SLinus Torvalds #define VGA_CRTC_OVERFLOW	7
901da177e4SLinus Torvalds #define VGA_CRTC_PRESET_ROW	8
911da177e4SLinus Torvalds #define VGA_CRTC_MAX_SCAN	9
921da177e4SLinus Torvalds #define VGA_CRTC_CURSOR_START	0x0A
931da177e4SLinus Torvalds #define VGA_CRTC_CURSOR_END	0x0B
941da177e4SLinus Torvalds #define VGA_CRTC_START_HI	0x0C
951da177e4SLinus Torvalds #define VGA_CRTC_START_LO	0x0D
961da177e4SLinus Torvalds #define VGA_CRTC_CURSOR_HI	0x0E
971da177e4SLinus Torvalds #define VGA_CRTC_CURSOR_LO	0x0F
981da177e4SLinus Torvalds #define VGA_CRTC_V_SYNC_START	0x10
991da177e4SLinus Torvalds #define VGA_CRTC_V_SYNC_END	0x11
1001da177e4SLinus Torvalds #define VGA_CRTC_V_DISP_END	0x12
1011da177e4SLinus Torvalds #define VGA_CRTC_OFFSET		0x13
1021da177e4SLinus Torvalds #define VGA_CRTC_UNDERLINE	0x14
1031da177e4SLinus Torvalds #define VGA_CRTC_V_BLANK_START	0x15
1041da177e4SLinus Torvalds #define VGA_CRTC_V_BLANK_END	0x16
1051da177e4SLinus Torvalds #define VGA_CRTC_MODE		0x17
1061da177e4SLinus Torvalds #define VGA_CRTC_LINE_COMPARE	0x18
1071da177e4SLinus Torvalds #define VGA_CRTC_REGS		VGA_CRT_C
1081da177e4SLinus Torvalds 
1091da177e4SLinus Torvalds /* VGA CRT controller bit masks */
1101da177e4SLinus Torvalds #define VGA_CR11_LOCK_CR0_CR7	0x80 /* lock writes to CR0 - CR7 */
1111da177e4SLinus Torvalds #define VGA_CR17_H_V_SIGNALS_ENABLED 0x80
1121da177e4SLinus Torvalds 
1131da177e4SLinus Torvalds /* VGA attribute controller register indices */
1141da177e4SLinus Torvalds #define VGA_ATC_PALETTE0	0x00
1151da177e4SLinus Torvalds #define VGA_ATC_PALETTE1	0x01
1161da177e4SLinus Torvalds #define VGA_ATC_PALETTE2	0x02
1171da177e4SLinus Torvalds #define VGA_ATC_PALETTE3	0x03
1181da177e4SLinus Torvalds #define VGA_ATC_PALETTE4	0x04
1191da177e4SLinus Torvalds #define VGA_ATC_PALETTE5	0x05
1201da177e4SLinus Torvalds #define VGA_ATC_PALETTE6	0x06
1211da177e4SLinus Torvalds #define VGA_ATC_PALETTE7	0x07
1221da177e4SLinus Torvalds #define VGA_ATC_PALETTE8	0x08
1231da177e4SLinus Torvalds #define VGA_ATC_PALETTE9	0x09
1241da177e4SLinus Torvalds #define VGA_ATC_PALETTEA	0x0A
1251da177e4SLinus Torvalds #define VGA_ATC_PALETTEB	0x0B
1261da177e4SLinus Torvalds #define VGA_ATC_PALETTEC	0x0C
1271da177e4SLinus Torvalds #define VGA_ATC_PALETTED	0x0D
1281da177e4SLinus Torvalds #define VGA_ATC_PALETTEE	0x0E
1291da177e4SLinus Torvalds #define VGA_ATC_PALETTEF	0x0F
1301da177e4SLinus Torvalds #define VGA_ATC_MODE		0x10
1311da177e4SLinus Torvalds #define VGA_ATC_OVERSCAN	0x11
1321da177e4SLinus Torvalds #define VGA_ATC_PLANE_ENABLE	0x12
1331da177e4SLinus Torvalds #define VGA_ATC_PEL		0x13
1341da177e4SLinus Torvalds #define VGA_ATC_COLOR_PAGE	0x14
1351da177e4SLinus Torvalds 
1361da177e4SLinus Torvalds #define VGA_AR_ENABLE_DISPLAY	0x20
1371da177e4SLinus Torvalds 
1381da177e4SLinus Torvalds /* VGA sequencer register indices */
1391da177e4SLinus Torvalds #define VGA_SEQ_RESET		0x00
1401da177e4SLinus Torvalds #define VGA_SEQ_CLOCK_MODE	0x01
1411da177e4SLinus Torvalds #define VGA_SEQ_PLANE_WRITE	0x02
1421da177e4SLinus Torvalds #define VGA_SEQ_CHARACTER_MAP	0x03
1431da177e4SLinus Torvalds #define VGA_SEQ_MEMORY_MODE	0x04
1441da177e4SLinus Torvalds 
1451da177e4SLinus Torvalds /* VGA sequencer register bit masks */
1461da177e4SLinus Torvalds #define VGA_SR01_CHAR_CLK_8DOTS	0x01 /* bit 0: character clocks 8 dots wide are generated */
1471da177e4SLinus Torvalds #define VGA_SR01_SCREEN_OFF	0x20 /* bit 5: Screen is off */
1481da177e4SLinus Torvalds #define VGA_SR02_ALL_PLANES	0x0F /* bits 3-0: enable access to all planes */
1491da177e4SLinus Torvalds #define VGA_SR04_EXT_MEM	0x02 /* bit 1: allows complete mem access to 256K */
1501da177e4SLinus Torvalds #define VGA_SR04_SEQ_MODE	0x04 /* bit 2: directs system to use a sequential addressing mode */
1511da177e4SLinus Torvalds #define VGA_SR04_CHN_4M		0x08 /* bit 3: selects modulo 4 addressing for CPU access to display memory */
1521da177e4SLinus Torvalds 
1531da177e4SLinus Torvalds /* VGA graphics controller register indices */
1541da177e4SLinus Torvalds #define VGA_GFX_SR_VALUE	0x00
1551da177e4SLinus Torvalds #define VGA_GFX_SR_ENABLE	0x01
1561da177e4SLinus Torvalds #define VGA_GFX_COMPARE_VALUE	0x02
1571da177e4SLinus Torvalds #define VGA_GFX_DATA_ROTATE	0x03
1581da177e4SLinus Torvalds #define VGA_GFX_PLANE_READ	0x04
1591da177e4SLinus Torvalds #define VGA_GFX_MODE		0x05
1601da177e4SLinus Torvalds #define VGA_GFX_MISC		0x06
1611da177e4SLinus Torvalds #define VGA_GFX_COMPARE_MASK	0x07
1621da177e4SLinus Torvalds #define VGA_GFX_BIT_MASK	0x08
1631da177e4SLinus Torvalds 
1641da177e4SLinus Torvalds /* VGA graphics controller bit masks */
1651da177e4SLinus Torvalds #define VGA_GR06_GRAPHICS_MODE	0x01
1661da177e4SLinus Torvalds 
1671da177e4SLinus Torvalds /* macro for composing an 8-bit VGA register index and value
1681da177e4SLinus Torvalds  * into a single 16-bit quantity */
1691da177e4SLinus Torvalds #define VGA_OUT16VAL(v, r)       (((v) << 8) | (r))
1701da177e4SLinus Torvalds 
1711da177e4SLinus Torvalds /* decide whether we should enable the faster 16-bit VGA register writes */
1721da177e4SLinus Torvalds #ifdef __LITTLE_ENDIAN
1731da177e4SLinus Torvalds #define VGA_OUTW_WRITE
1741da177e4SLinus Torvalds #endif
1751da177e4SLinus Torvalds 
1761da177e4SLinus Torvalds /* VGA State Save and Restore */
1771da177e4SLinus Torvalds #define VGA_SAVE_FONT0 1  /* save/restore plane 2 fonts	  */
1781da177e4SLinus Torvalds #define VGA_SAVE_FONT1 2  /* save/restore plane 3 fonts   */
1791da177e4SLinus Torvalds #define VGA_SAVE_TEXT  4  /* save/restore plane 0/1 fonts */
1801da177e4SLinus Torvalds #define VGA_SAVE_FONTS 7  /* save/restore all fonts	  */
1811da177e4SLinus Torvalds #define VGA_SAVE_MODE  8  /* save/restore video mode 	  */
1821da177e4SLinus Torvalds #define VGA_SAVE_CMAP  16 /* save/restore color map/DAC   */
1831da177e4SLinus Torvalds 
1841da177e4SLinus Torvalds struct vgastate {
1851da177e4SLinus Torvalds 	void __iomem *vgabase;	/* mmio base, if supported 		   */
1861da177e4SLinus Torvalds 	unsigned long membase;	/* VGA window base, 0 for default - 0xA000 */
1871da177e4SLinus Torvalds 	__u32 memsize;		/* VGA window size, 0 for default 64K	   */
1881da177e4SLinus Torvalds 	__u32 flags;		/* what state[s] to save (see VGA_SAVE_*)  */
1891da177e4SLinus Torvalds 	__u32 depth;		/* current fb depth, not important	   */
1901da177e4SLinus Torvalds 	__u32 num_attr;		/* number of att registers, 0 for default  */
1911da177e4SLinus Torvalds 	__u32 num_crtc;		/* number of crt registers, 0 for default  */
1921da177e4SLinus Torvalds 	__u32 num_gfx;		/* number of gfx registers, 0 for default  */
1931da177e4SLinus Torvalds 	__u32 num_seq;		/* number of seq registers, 0 for default  */
1941da177e4SLinus Torvalds 	void *vidstate;
1951da177e4SLinus Torvalds };
1961da177e4SLinus Torvalds 
1971da177e4SLinus Torvalds extern int save_vga(struct vgastate *state);
1981da177e4SLinus Torvalds extern int restore_vga(struct vgastate *state);
1991da177e4SLinus Torvalds 
2001da177e4SLinus Torvalds /*
2011da177e4SLinus Torvalds  * generic VGA port read/write
2021da177e4SLinus Torvalds  */
2031da177e4SLinus Torvalds 
vga_io_r(unsigned short port)2041da177e4SLinus Torvalds static inline unsigned char vga_io_r (unsigned short port)
2051da177e4SLinus Torvalds {
2061da177e4SLinus Torvalds 	return inb_p(port);
2071da177e4SLinus Torvalds }
2081da177e4SLinus Torvalds 
vga_io_w(unsigned short port,unsigned char val)2091da177e4SLinus Torvalds static inline void vga_io_w (unsigned short port, unsigned char val)
2101da177e4SLinus Torvalds {
2111da177e4SLinus Torvalds 	outb_p(val, port);
2121da177e4SLinus Torvalds }
2131da177e4SLinus Torvalds 
vga_io_w_fast(unsigned short port,unsigned char reg,unsigned char val)2141da177e4SLinus Torvalds static inline void vga_io_w_fast (unsigned short port, unsigned char reg,
2151da177e4SLinus Torvalds 				  unsigned char val)
2161da177e4SLinus Torvalds {
2171da177e4SLinus Torvalds 	outw(VGA_OUT16VAL (val, reg), port);
2181da177e4SLinus Torvalds }
2191da177e4SLinus Torvalds 
vga_mm_r(void __iomem * regbase,unsigned short port)2201da177e4SLinus Torvalds static inline unsigned char vga_mm_r (void __iomem *regbase, unsigned short port)
2211da177e4SLinus Torvalds {
2221da177e4SLinus Torvalds 	return readb (regbase + port);
2231da177e4SLinus Torvalds }
2241da177e4SLinus Torvalds 
vga_mm_w(void __iomem * regbase,unsigned short port,unsigned char val)2251da177e4SLinus Torvalds static inline void vga_mm_w (void __iomem *regbase, unsigned short port, unsigned char val)
2261da177e4SLinus Torvalds {
2271da177e4SLinus Torvalds 	writeb (val, regbase + port);
2281da177e4SLinus Torvalds }
2291da177e4SLinus Torvalds 
vga_mm_w_fast(void __iomem * regbase,unsigned short port,unsigned char reg,unsigned char val)2301da177e4SLinus Torvalds static inline void vga_mm_w_fast (void __iomem *regbase, unsigned short port,
2311da177e4SLinus Torvalds 				  unsigned char reg, unsigned char val)
2321da177e4SLinus Torvalds {
2331da177e4SLinus Torvalds 	writew (VGA_OUT16VAL (val, reg), regbase + port);
2341da177e4SLinus Torvalds }
2351da177e4SLinus Torvalds 
vga_r(void __iomem * regbase,unsigned short port)2361da177e4SLinus Torvalds static inline unsigned char vga_r (void __iomem *regbase, unsigned short port)
2371da177e4SLinus Torvalds {
2381da177e4SLinus Torvalds 	if (regbase)
2391da177e4SLinus Torvalds 		return vga_mm_r (regbase, port);
2401da177e4SLinus Torvalds 	else
2411da177e4SLinus Torvalds 		return vga_io_r (port);
2421da177e4SLinus Torvalds }
2431da177e4SLinus Torvalds 
vga_w(void __iomem * regbase,unsigned short port,unsigned char val)2441da177e4SLinus Torvalds static inline void vga_w (void __iomem *regbase, unsigned short port, unsigned char val)
2451da177e4SLinus Torvalds {
2461da177e4SLinus Torvalds 	if (regbase)
2471da177e4SLinus Torvalds 		vga_mm_w (regbase, port, val);
2481da177e4SLinus Torvalds 	else
2491da177e4SLinus Torvalds 		vga_io_w (port, val);
2501da177e4SLinus Torvalds }
2511da177e4SLinus Torvalds 
2521da177e4SLinus Torvalds 
vga_w_fast(void __iomem * regbase,unsigned short port,unsigned char reg,unsigned char val)2531da177e4SLinus Torvalds static inline void vga_w_fast (void __iomem *regbase, unsigned short port,
2541da177e4SLinus Torvalds 			       unsigned char reg, unsigned char val)
2551da177e4SLinus Torvalds {
2561da177e4SLinus Torvalds 	if (regbase)
2571da177e4SLinus Torvalds 		vga_mm_w_fast (regbase, port, reg, val);
2581da177e4SLinus Torvalds 	else
2591da177e4SLinus Torvalds 		vga_io_w_fast (port, reg, val);
2601da177e4SLinus Torvalds }
2611da177e4SLinus Torvalds 
2621da177e4SLinus Torvalds 
2631da177e4SLinus Torvalds /*
2641da177e4SLinus Torvalds  * VGA CRTC register read/write
2651da177e4SLinus Torvalds  */
2661da177e4SLinus Torvalds 
vga_rcrt(void __iomem * regbase,unsigned char reg)2671da177e4SLinus Torvalds static inline unsigned char vga_rcrt (void __iomem *regbase, unsigned char reg)
2681da177e4SLinus Torvalds {
2691da177e4SLinus Torvalds         vga_w (regbase, VGA_CRT_IC, reg);
2701da177e4SLinus Torvalds         return vga_r (regbase, VGA_CRT_DC);
2711da177e4SLinus Torvalds }
2721da177e4SLinus Torvalds 
vga_wcrt(void __iomem * regbase,unsigned char reg,unsigned char val)2731da177e4SLinus Torvalds static inline void vga_wcrt (void __iomem *regbase, unsigned char reg, unsigned char val)
2741da177e4SLinus Torvalds {
2751da177e4SLinus Torvalds #ifdef VGA_OUTW_WRITE
2761da177e4SLinus Torvalds 	vga_w_fast (regbase, VGA_CRT_IC, reg, val);
2771da177e4SLinus Torvalds #else
2781da177e4SLinus Torvalds         vga_w (regbase, VGA_CRT_IC, reg);
2791da177e4SLinus Torvalds         vga_w (regbase, VGA_CRT_DC, val);
2801da177e4SLinus Torvalds #endif /* VGA_OUTW_WRITE */
2811da177e4SLinus Torvalds }
2821da177e4SLinus Torvalds 
vga_io_rcrt(unsigned char reg)2831da177e4SLinus Torvalds static inline unsigned char vga_io_rcrt (unsigned char reg)
2841da177e4SLinus Torvalds {
2851da177e4SLinus Torvalds         vga_io_w (VGA_CRT_IC, reg);
2861da177e4SLinus Torvalds         return vga_io_r (VGA_CRT_DC);
2871da177e4SLinus Torvalds }
2881da177e4SLinus Torvalds 
vga_io_wcrt(unsigned char reg,unsigned char val)2891da177e4SLinus Torvalds static inline void vga_io_wcrt (unsigned char reg, unsigned char val)
2901da177e4SLinus Torvalds {
2911da177e4SLinus Torvalds #ifdef VGA_OUTW_WRITE
2921da177e4SLinus Torvalds 	vga_io_w_fast (VGA_CRT_IC, reg, val);
2931da177e4SLinus Torvalds #else
2941da177e4SLinus Torvalds         vga_io_w (VGA_CRT_IC, reg);
2951da177e4SLinus Torvalds         vga_io_w (VGA_CRT_DC, val);
2961da177e4SLinus Torvalds #endif /* VGA_OUTW_WRITE */
2971da177e4SLinus Torvalds }
2981da177e4SLinus Torvalds 
vga_mm_rcrt(void __iomem * regbase,unsigned char reg)2991da177e4SLinus Torvalds static inline unsigned char vga_mm_rcrt (void __iomem *regbase, unsigned char reg)
3001da177e4SLinus Torvalds {
3011da177e4SLinus Torvalds         vga_mm_w (regbase, VGA_CRT_IC, reg);
3021da177e4SLinus Torvalds         return vga_mm_r (regbase, VGA_CRT_DC);
3031da177e4SLinus Torvalds }
3041da177e4SLinus Torvalds 
vga_mm_wcrt(void __iomem * regbase,unsigned char reg,unsigned char val)3051da177e4SLinus Torvalds static inline void vga_mm_wcrt (void __iomem *regbase, unsigned char reg, unsigned char val)
3061da177e4SLinus Torvalds {
3071da177e4SLinus Torvalds #ifdef VGA_OUTW_WRITE
3081da177e4SLinus Torvalds 	vga_mm_w_fast (regbase, VGA_CRT_IC, reg, val);
3091da177e4SLinus Torvalds #else
3101da177e4SLinus Torvalds         vga_mm_w (regbase, VGA_CRT_IC, reg);
3111da177e4SLinus Torvalds         vga_mm_w (regbase, VGA_CRT_DC, val);
3121da177e4SLinus Torvalds #endif /* VGA_OUTW_WRITE */
3131da177e4SLinus Torvalds }
3141da177e4SLinus Torvalds 
3151da177e4SLinus Torvalds 
3161da177e4SLinus Torvalds /*
3171da177e4SLinus Torvalds  * VGA sequencer register read/write
3181da177e4SLinus Torvalds  */
3191da177e4SLinus Torvalds 
vga_rseq(void __iomem * regbase,unsigned char reg)3201da177e4SLinus Torvalds static inline unsigned char vga_rseq (void __iomem *regbase, unsigned char reg)
3211da177e4SLinus Torvalds {
3221da177e4SLinus Torvalds         vga_w (regbase, VGA_SEQ_I, reg);
3231da177e4SLinus Torvalds         return vga_r (regbase, VGA_SEQ_D);
3241da177e4SLinus Torvalds }
3251da177e4SLinus Torvalds 
vga_wseq(void __iomem * regbase,unsigned char reg,unsigned char val)3261da177e4SLinus Torvalds static inline void vga_wseq (void __iomem *regbase, unsigned char reg, unsigned char val)
3271da177e4SLinus Torvalds {
3281da177e4SLinus Torvalds #ifdef VGA_OUTW_WRITE
3291da177e4SLinus Torvalds 	vga_w_fast (regbase, VGA_SEQ_I, reg, val);
3301da177e4SLinus Torvalds #else
3311da177e4SLinus Torvalds         vga_w (regbase, VGA_SEQ_I, reg);
3321da177e4SLinus Torvalds         vga_w (regbase, VGA_SEQ_D, val);
3331da177e4SLinus Torvalds #endif /* VGA_OUTW_WRITE */
3341da177e4SLinus Torvalds }
3351da177e4SLinus Torvalds 
vga_io_rseq(unsigned char reg)3361da177e4SLinus Torvalds static inline unsigned char vga_io_rseq (unsigned char reg)
3371da177e4SLinus Torvalds {
3381da177e4SLinus Torvalds         vga_io_w (VGA_SEQ_I, reg);
3391da177e4SLinus Torvalds         return vga_io_r (VGA_SEQ_D);
3401da177e4SLinus Torvalds }
3411da177e4SLinus Torvalds 
vga_io_wseq(unsigned char reg,unsigned char val)3421da177e4SLinus Torvalds static inline void vga_io_wseq (unsigned char reg, unsigned char val)
3431da177e4SLinus Torvalds {
3441da177e4SLinus Torvalds #ifdef VGA_OUTW_WRITE
3451da177e4SLinus Torvalds 	vga_io_w_fast (VGA_SEQ_I, reg, val);
3461da177e4SLinus Torvalds #else
3471da177e4SLinus Torvalds         vga_io_w (VGA_SEQ_I, reg);
3481da177e4SLinus Torvalds         vga_io_w (VGA_SEQ_D, val);
3491da177e4SLinus Torvalds #endif /* VGA_OUTW_WRITE */
3501da177e4SLinus Torvalds }
3511da177e4SLinus Torvalds 
vga_mm_rseq(void __iomem * regbase,unsigned char reg)3521da177e4SLinus Torvalds static inline unsigned char vga_mm_rseq (void __iomem *regbase, unsigned char reg)
3531da177e4SLinus Torvalds {
3541da177e4SLinus Torvalds         vga_mm_w (regbase, VGA_SEQ_I, reg);
3551da177e4SLinus Torvalds         return vga_mm_r (regbase, VGA_SEQ_D);
3561da177e4SLinus Torvalds }
3571da177e4SLinus Torvalds 
vga_mm_wseq(void __iomem * regbase,unsigned char reg,unsigned char val)3581da177e4SLinus Torvalds static inline void vga_mm_wseq (void __iomem *regbase, unsigned char reg, unsigned char val)
3591da177e4SLinus Torvalds {
3601da177e4SLinus Torvalds #ifdef VGA_OUTW_WRITE
3611da177e4SLinus Torvalds 	vga_mm_w_fast (regbase, VGA_SEQ_I, reg, val);
3621da177e4SLinus Torvalds #else
3631da177e4SLinus Torvalds         vga_mm_w (regbase, VGA_SEQ_I, reg);
3641da177e4SLinus Torvalds         vga_mm_w (regbase, VGA_SEQ_D, val);
3651da177e4SLinus Torvalds #endif /* VGA_OUTW_WRITE */
3661da177e4SLinus Torvalds }
3671da177e4SLinus Torvalds 
3681da177e4SLinus Torvalds /*
3691da177e4SLinus Torvalds  * VGA graphics controller register read/write
3701da177e4SLinus Torvalds  */
3711da177e4SLinus Torvalds 
vga_rgfx(void __iomem * regbase,unsigned char reg)3721da177e4SLinus Torvalds static inline unsigned char vga_rgfx (void __iomem *regbase, unsigned char reg)
3731da177e4SLinus Torvalds {
3741da177e4SLinus Torvalds         vga_w (regbase, VGA_GFX_I, reg);
3751da177e4SLinus Torvalds         return vga_r (regbase, VGA_GFX_D);
3761da177e4SLinus Torvalds }
3771da177e4SLinus Torvalds 
vga_wgfx(void __iomem * regbase,unsigned char reg,unsigned char val)3781da177e4SLinus Torvalds static inline void vga_wgfx (void __iomem *regbase, unsigned char reg, unsigned char val)
3791da177e4SLinus Torvalds {
3801da177e4SLinus Torvalds #ifdef VGA_OUTW_WRITE
3811da177e4SLinus Torvalds 	vga_w_fast (regbase, VGA_GFX_I, reg, val);
3821da177e4SLinus Torvalds #else
3831da177e4SLinus Torvalds         vga_w (regbase, VGA_GFX_I, reg);
3841da177e4SLinus Torvalds         vga_w (regbase, VGA_GFX_D, val);
3851da177e4SLinus Torvalds #endif /* VGA_OUTW_WRITE */
3861da177e4SLinus Torvalds }
3871da177e4SLinus Torvalds 
vga_io_rgfx(unsigned char reg)3881da177e4SLinus Torvalds static inline unsigned char vga_io_rgfx (unsigned char reg)
3891da177e4SLinus Torvalds {
3901da177e4SLinus Torvalds         vga_io_w (VGA_GFX_I, reg);
3911da177e4SLinus Torvalds         return vga_io_r (VGA_GFX_D);
3921da177e4SLinus Torvalds }
3931da177e4SLinus Torvalds 
vga_io_wgfx(unsigned char reg,unsigned char val)3941da177e4SLinus Torvalds static inline void vga_io_wgfx (unsigned char reg, unsigned char val)
3951da177e4SLinus Torvalds {
3961da177e4SLinus Torvalds #ifdef VGA_OUTW_WRITE
3971da177e4SLinus Torvalds 	vga_io_w_fast (VGA_GFX_I, reg, val);
3981da177e4SLinus Torvalds #else
3991da177e4SLinus Torvalds         vga_io_w (VGA_GFX_I, reg);
4001da177e4SLinus Torvalds         vga_io_w (VGA_GFX_D, val);
4011da177e4SLinus Torvalds #endif /* VGA_OUTW_WRITE */
4021da177e4SLinus Torvalds }
4031da177e4SLinus Torvalds 
vga_mm_rgfx(void __iomem * regbase,unsigned char reg)4041da177e4SLinus Torvalds static inline unsigned char vga_mm_rgfx (void __iomem *regbase, unsigned char reg)
4051da177e4SLinus Torvalds {
4061da177e4SLinus Torvalds         vga_mm_w (regbase, VGA_GFX_I, reg);
4071da177e4SLinus Torvalds         return vga_mm_r (regbase, VGA_GFX_D);
4081da177e4SLinus Torvalds }
4091da177e4SLinus Torvalds 
vga_mm_wgfx(void __iomem * regbase,unsigned char reg,unsigned char val)4101da177e4SLinus Torvalds static inline void vga_mm_wgfx (void __iomem *regbase, unsigned char reg, unsigned char val)
4111da177e4SLinus Torvalds {
4121da177e4SLinus Torvalds #ifdef VGA_OUTW_WRITE
4131da177e4SLinus Torvalds 	vga_mm_w_fast (regbase, VGA_GFX_I, reg, val);
4141da177e4SLinus Torvalds #else
4151da177e4SLinus Torvalds         vga_mm_w (regbase, VGA_GFX_I, reg);
4161da177e4SLinus Torvalds         vga_mm_w (regbase, VGA_GFX_D, val);
4171da177e4SLinus Torvalds #endif /* VGA_OUTW_WRITE */
4181da177e4SLinus Torvalds }
4191da177e4SLinus Torvalds 
4201da177e4SLinus Torvalds 
4211da177e4SLinus Torvalds /*
4221da177e4SLinus Torvalds  * VGA attribute controller register read/write
4231da177e4SLinus Torvalds  */
4241da177e4SLinus Torvalds 
vga_rattr(void __iomem * regbase,unsigned char reg)4251da177e4SLinus Torvalds static inline unsigned char vga_rattr (void __iomem *regbase, unsigned char reg)
4261da177e4SLinus Torvalds {
4271da177e4SLinus Torvalds         vga_w (regbase, VGA_ATT_IW, reg);
4281da177e4SLinus Torvalds         return vga_r (regbase, VGA_ATT_R);
4291da177e4SLinus Torvalds }
4301da177e4SLinus Torvalds 
vga_wattr(void __iomem * regbase,unsigned char reg,unsigned char val)4311da177e4SLinus Torvalds static inline void vga_wattr (void __iomem *regbase, unsigned char reg, unsigned char val)
4321da177e4SLinus Torvalds {
4331da177e4SLinus Torvalds         vga_w (regbase, VGA_ATT_IW, reg);
4341da177e4SLinus Torvalds         vga_w (regbase, VGA_ATT_W, val);
4351da177e4SLinus Torvalds }
4361da177e4SLinus Torvalds 
vga_io_rattr(unsigned char reg)4371da177e4SLinus Torvalds static inline unsigned char vga_io_rattr (unsigned char reg)
4381da177e4SLinus Torvalds {
4391da177e4SLinus Torvalds         vga_io_w (VGA_ATT_IW, reg);
4401da177e4SLinus Torvalds         return vga_io_r (VGA_ATT_R);
4411da177e4SLinus Torvalds }
4421da177e4SLinus Torvalds 
vga_io_wattr(unsigned char reg,unsigned char val)4431da177e4SLinus Torvalds static inline void vga_io_wattr (unsigned char reg, unsigned char val)
4441da177e4SLinus Torvalds {
4451da177e4SLinus Torvalds         vga_io_w (VGA_ATT_IW, reg);
4461da177e4SLinus Torvalds         vga_io_w (VGA_ATT_W, val);
4471da177e4SLinus Torvalds }
4481da177e4SLinus Torvalds 
vga_mm_rattr(void __iomem * regbase,unsigned char reg)4491da177e4SLinus Torvalds static inline unsigned char vga_mm_rattr (void __iomem *regbase, unsigned char reg)
4501da177e4SLinus Torvalds {
4511da177e4SLinus Torvalds         vga_mm_w (regbase, VGA_ATT_IW, reg);
4521da177e4SLinus Torvalds         return vga_mm_r (regbase, VGA_ATT_R);
4531da177e4SLinus Torvalds }
4541da177e4SLinus Torvalds 
vga_mm_wattr(void __iomem * regbase,unsigned char reg,unsigned char val)4551da177e4SLinus Torvalds static inline void vga_mm_wattr (void __iomem *regbase, unsigned char reg, unsigned char val)
4561da177e4SLinus Torvalds {
4571da177e4SLinus Torvalds         vga_mm_w (regbase, VGA_ATT_IW, reg);
4581da177e4SLinus Torvalds         vga_mm_w (regbase, VGA_ATT_W, val);
4591da177e4SLinus Torvalds }
4601da177e4SLinus Torvalds 
4611da177e4SLinus Torvalds #endif /* __linux_video_vga_h__ */
462