xref: /openbsd/sys/dev/ic/vgavar.h (revision 7b36286a)
1 /* $OpenBSD: vgavar.h,v 1.8 2002/07/12 20:17:03 mickey Exp $ */
2 /* $NetBSD: vgavar.h,v 1.4 2000/06/17 07:11:50 soda Exp $ */
3 
4 /*
5  * Copyright (c) 1995, 1996 Carnegie-Mellon University.
6  * All rights reserved.
7  *
8  * Author: Chris G. Demetriou
9  *
10  * Permission to use, copy, modify and distribute this software and
11  * its documentation is hereby granted, provided that both the copyright
12  * notice and this permission notice appear in all copies of the
13  * software, derivative works or modified versions, and any portions
14  * thereof, and that both notices appear in supporting documentation.
15  *
16  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
17  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
18  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
19  *
20  * Carnegie Mellon requests users of this software to return to
21  *
22  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
23  *  School of Computer Science
24  *  Carnegie Mellon University
25  *  Pittsburgh PA 15213-3890
26  *
27  * any improvements or extensions that they make and grant Carnegie the
28  * rights to redistribute these changes.
29  */
30 
31 #include <sys/timeout.h>
32 
33 struct vga_handle {
34 	struct pcdisplay_handle vh_ph;
35 	bus_space_handle_t vh_ioh_vga, vh_allmemh;
36 	int vh_mono;
37 };
38 #define vh_iot vh_ph.ph_iot
39 #define vh_memt vh_ph.ph_memt
40 #define vh_ioh_6845 vh_ph.ph_ioh_6845
41 #define vh_memh vh_ph.ph_memh
42 
43 struct vga_config {
44 	struct vga_handle hdl;
45 
46 	struct device *vc_softc;
47 	int vc_type;
48 	int nscreens;
49 	LIST_HEAD(, vgascreen) screens;
50 	struct vgascreen *active; /* current display */
51 	const struct wsscreen_descr *currenttype;
52 	int currentfontset1, currentfontset2;
53 
54 	struct vgafont *vc_fonts[8];
55 
56 	struct vgascreen *wantedscreen;
57 	void (*switchcb)(void *, int, int);
58 	void *switchcbarg;
59 
60 	paddr_t (*vc_mmap)(void *, off_t, int);
61 
62 	struct timeout vc_switch_timeout;
63 };
64 
65 static inline u_int8_t _vga_attr_read(struct vga_handle *, int);
66 static inline void _vga_attr_write(struct vga_handle *, int, u_int8_t);
67 static inline u_int8_t _vga_ts_read(struct vga_handle *, int);
68 static inline void _vga_ts_write(struct vga_handle *, int, u_int8_t);
69 static inline u_int8_t _vga_gdc_read(struct vga_handle *, int);
70 static inline void _vga_gdc_write(struct vga_handle *, int, u_int8_t);
71 
72 static inline u_int8_t _vga_attr_read(vh, reg)
73 	struct vga_handle *vh;
74 	int reg;
75 {
76 	u_int8_t res;
77 
78 	/* reset state */
79 	(void) bus_space_read_1(vh->vh_iot, vh->vh_ioh_6845, 10);
80 
81 	bus_space_write_1(vh->vh_iot, vh->vh_ioh_vga, VGA_ATC_INDEX, reg);
82 	res = bus_space_read_1(vh->vh_iot, vh->vh_ioh_vga, VGA_ATC_DATAR);
83 
84 	/* reset state XXX unneeded? */
85 	(void) bus_space_read_1(vh->vh_iot, vh->vh_ioh_6845, 10);
86 
87 	/* enable */
88 	bus_space_write_1(vh->vh_iot, vh->vh_ioh_vga, 0, 0x20);
89 
90 	return (res);
91 }
92 
93 static inline void _vga_attr_write(vh, reg, val)
94 	struct vga_handle *vh;
95 	int reg;
96 	u_int8_t val;
97 {
98 	/* reset state */
99 	(void) bus_space_read_1(vh->vh_iot, vh->vh_ioh_6845, 10);
100 
101 	bus_space_write_1(vh->vh_iot, vh->vh_ioh_vga, VGA_ATC_INDEX, reg);
102 	bus_space_write_1(vh->vh_iot, vh->vh_ioh_vga, VGA_ATC_DATAW, val);
103 
104 	/* reset state XXX unneeded? */
105 	(void) bus_space_read_1(vh->vh_iot, vh->vh_ioh_6845, 10);
106 
107 	/* enable */
108 	bus_space_write_1(vh->vh_iot, vh->vh_ioh_vga, 0, 0x20);
109 }
110 
111 static inline u_int8_t _vga_ts_read(vh, reg)
112 	struct vga_handle *vh;
113 	int reg;
114 {
115 	bus_space_write_1(vh->vh_iot, vh->vh_ioh_vga, VGA_TS_INDEX, reg);
116 	return (bus_space_read_1(vh->vh_iot, vh->vh_ioh_vga, VGA_TS_DATA));
117 }
118 
119 static inline void _vga_ts_write(vh, reg, val)
120 	struct vga_handle *vh;
121 	int reg;
122 	u_int8_t val;
123 {
124 	bus_space_write_1(vh->vh_iot, vh->vh_ioh_vga, VGA_TS_INDEX, reg);
125 	bus_space_write_1(vh->vh_iot, vh->vh_ioh_vga, VGA_TS_DATA, val);
126 }
127 
128 static inline u_int8_t _vga_gdc_read(vh, reg)
129 	struct vga_handle *vh;
130 	int reg;
131 {
132 	bus_space_write_1(vh->vh_iot, vh->vh_ioh_vga, VGA_GDC_INDEX, reg);
133 	return (bus_space_read_1(vh->vh_iot, vh->vh_ioh_vga, VGA_GDC_DATA));
134 }
135 
136 static inline void _vga_gdc_write(vh, reg, val)
137 	struct vga_handle *vh;
138 	int reg;
139 	u_int8_t val;
140 {
141 	bus_space_write_1(vh->vh_iot, vh->vh_ioh_vga, VGA_GDC_INDEX, reg);
142 	bus_space_write_1(vh->vh_iot, vh->vh_ioh_vga, VGA_GDC_DATA, val);
143 }
144 
145 #define vga_attr_read(vh, reg) \
146 	_vga_attr_read(vh, offsetof(struct reg_vgaattr, reg))
147 #define vga_attr_write(vh, reg, val) \
148 	_vga_attr_write(vh, offsetof(struct reg_vgaattr, reg), val)
149 #define vga_ts_read(vh, reg) \
150 	_vga_ts_read(vh, offsetof(struct reg_vgats, reg))
151 #define vga_ts_write(vh, reg, val) \
152 	_vga_ts_write(vh, offsetof(struct reg_vgats, reg), val)
153 #define vga_gdc_read(vh, reg) \
154 	_vga_gdc_read(vh, offsetof(struct reg_vgagdc, reg))
155 #define vga_gdc_write(vh, reg, val) \
156 	_vga_gdc_write(vh, offsetof(struct reg_vgagdc, reg), val)
157 
158 #define vga_6845_read(vh, reg) \
159 	pcdisplay_6845_read(&(vh)->vh_ph, reg)
160 #define vga_6845_write(vh, reg, val) \
161 	pcdisplay_6845_write(&(vh)->vh_ph, reg, val)
162 
163 int	vga_common_probe(bus_space_tag_t, bus_space_tag_t);
164 void	vga_common_attach(struct device *, bus_space_tag_t,
165 			       bus_space_tag_t, int);
166 void	vga_extended_attach(struct device *, bus_space_tag_t,
167     bus_space_tag_t, int, paddr_t (*)(void *, off_t, int));
168 int	vga_is_console(bus_space_tag_t, int);
169 int	vga_cnattach(bus_space_tag_t, bus_space_tag_t, int, int);
170 
171 struct wsscreen_descr;
172 void vga_loadchars(struct vga_handle *, int, int, int, int, char *);
173 void vga_setfontset(struct vga_handle *, int, int);
174 void vga_setscreentype(struct vga_handle *,
175 		       const struct wsscreen_descr *);
176 #if NVGA_PCI > 0
177 int vga_pci_ioctl(void *, u_long, caddr_t, int, struct proc *);
178 #endif
179