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