1 /* SVGAlib, Copyright 1993 Harm Hanemaayer */
2 /* VGAlib version 1.2 - (c) 1993 Tommy Frandsen */
3 /* partially copyrighted (C) 1993 by Hartmut Schirmer */
4 
5 /* Internal definitions. */
6 
7 #ifndef _LIBVGA_H
8 #define _LIBVGA_H
9 
10 #include <string.h>
11 # if defined __GLIBC__ && __GLIBC__ >= 2
12 #include <sys/io.h>
13 #endif
14 
15 /* --------------------- Macro definitions shared by library modules */
16 
17 /* VGA index register ports */
18 #define CRT_IC  0x3D4		/* CRT Controller Index - color emulation */
19 #define CRT_IM  0x3B4		/* CRT Controller Index - mono emulation */
20 #define ATT_IW  0x3C0		/* Attribute Controller Index & Data Write Register */
21 #define GRA_I   0x3CE		/* Graphics Controller Index */
22 #define SEQ_I   0x3C4		/* Sequencer Index */
23 #define PEL_IW  0x3C8		/* PEL Write Index */
24 #define PEL_IR  0x3C7		/* PEL Read Index */
25 
26 /* VGA data register ports */
27 #define CRT_DC  0x3D5		/* CRT Controller Data Register - color emulation */
28 #define CRT_DM  0x3B5		/* CRT Controller Data Register - mono emulation */
29 #define ATT_R   0x3C1		/* Attribute Controller Data Read Register */
30 #define GRA_D   0x3CF		/* Graphics Controller Data Register */
31 #define SEQ_D   0x3C5		/* Sequencer Data Register */
32 #define MIS_R   0x3CC		/* Misc Output Read Register */
33 #define MIS_W   0x3C2		/* Misc Output Write Register */
34 #define IS1_RC  0x3DA		/* Input Status Register 1 - color emulation */
35 #define IS1_RM  0x3BA		/* Input Status Register 1 - mono emulation */
36 #define PEL_D   0x3C9		/* PEL Data Register */
37 #define PEL_MSK 0x3C6		/* PEL mask register */
38 
39 /* 8514/MACH regs we need outside of the mach32 driver.. */
40 #define PEL8514_D	0x2ED
41 #define PEL8514_IW	0x2EC
42 #define PEL8514_IR	0x2EB
43 #define PEL8514_MSK	0x2EA
44 
45 /* EGA-specific registers */
46 
47 #define GRA_E0	0x3CC		/* Graphics enable processor 0 */
48 #define GRA_E1	0x3CA		/* Graphics enable processor 1 */
49 
50 /* standard VGA indexes max counts */
51 #define CRT_C   24		/* 24 CRT Controller Registers */
52 #define ATT_C   21		/* 21 Attribute Controller Registers */
53 #define GRA_C   9		/* 9  Graphics Controller Registers */
54 #define SEQ_C   5		/* 5  Sequencer Registers */
55 #define MIS_C   1		/* 1  Misc Output Register */
56 
57 /* VGA registers saving indexes */
58 #define CRT     0		/* CRT Controller Registers start */
59 #define ATT     (CRT+CRT_C)	/* Attribute Controller Registers start */
60 #define GRA     (ATT+ATT_C)	/* Graphics Controller Registers start */
61 #define SEQ     (GRA+GRA_C)	/* Sequencer Registers */
62 #define MIS     (SEQ+SEQ_C)	/* General Registers */
63 #define EXT     (MIS+MIS_C)	/* SVGA Extended Registers */
64 
65 /* Shorthands for chipset (driver) specific calls */
66 #define chipset_saveregs __svgalib_driverspecs->saveregs
67 #define chipset_setregs __svgalib_driverspecs->setregs
68 #define chipset_unlock __svgalib_driverspecs->unlock
69 #define chipset_test __svgalib_driverspecs->test
70 #define chipset_setpage __svgalib_driverspecs->__svgalib_setpage
71 #define chipset_setmode __svgalib_driverspecs->setmode
72 #define chipset_modeavailable __svgalib_driverspecs->modeavailable
73 #define chipset_getmodeinfo __svgalib_driverspecs->getmodeinfo
74 
75 /* Shorthands for internal variables and functions */
76 #define CI	__svgalib_cur_info
77 #ifdef __alpha__
78 #define SM	__svgalib_sparse_mem
79 #endif
80 #define GM	__svgalib_graph_mem
81 #define CM	__svgalib_cur_mode
82 #define VMEM	__svgalib_videomemoryused
83 #define DREP	__svgalib_driver_report
84 #define CRITICAL __svgalib_critical
85 #define COL	__svgalib_cur_color
86 #define CHIPSET __svgalib_chipset
87 #define SCREENON __svgalib_screenon
88 #define MODEX 	__svgalib_modeX
89 #define MODEFLAGS __svgalib_modeflags
90 #define infotable __svgalib_infotable
91 
92 #define SVGADRV		 2
93 #define STDVGADRV	 1
94 #define STDVGAMODE(mode) (chipset_modeavailable(mode) == STDVGADRV)
95 #define SVGAMODE(mode)   (chipset_modeavailable(mode) == SVGADRV)
96 
97 #ifdef __alpha__
98 #include <asm/io.h>
99 #include <linux/autoconf.h>
100 #if defined(CONFIG_ALPHA_JENSEN)
101 #define DENSE_MEM_BASE  EISA_MEM
102 #define SPARSE_MEM_BASE EISA_MEM
103 #define MEM_SHIFT       7
104 #define MEM_TYPE_BYTE   0x00
105 #define MEM_TYPE_WORD   0x20
106 #define MEM_TYPE_LONG   0x60
107 #elif defined(CONFIG_ALPHA_CABRIOLET)
108 #define DENSE_MEM_BASE  APECS_DENSE_MEM
109 #define SPARSE_MEM_BASE APECS_SPARSE_MEM
110 #define MEM_SHIFT       5
111 #define MEM_TYPE_BYTE   0x00
112 #define MEM_TYPE_WORD   0x08
113 #define MEM_TYPE_LONG   0x18
114 #elif defined(CONFIG_ALPHA_NONAME)
115 #define DENSE_MEM_BASE  LCA_DENSE_MEM
116 #define SPARSE_MEM_BASE LCA_SPARSE_MEM
117 #define MEM_SHIFT       5
118 #define MEM_TYPE_BYTE   0x00
119 #define MEM_TYPE_WORD   0x08
120 #define MEM_TYPE_LONG   0x18
121 #endif
122 #define SPARSE_GRAPH_BASE (SPARSE_MEM_BASE + (0xA0000 << MEM_SHIFT))
123 #define GRAPH_BASE (DENSE_MEM_BASE + 0xA0000)	/* this is wrong for */
124 #define FONT_BASE  (DENSE_MEM_BASE + 0xA0000)	/* jensen type hardware */
125 #else
126 #define GRAPH_BASE 0xA0000
127 #define FONT_BASE  0xA0000
128 #endif
129 #define GRAPH_SIZE 0x10000
130 #define FONT_SIZE  (0x2000 * 4) /* 2.0.x kernel can use 2 512 char. fonts */
131 #define GPLANE16   G640x350x16
132 
133 /* graphics mode information */
134 struct info {
135     int xdim;
136     int ydim;
137     int colors;
138     int xbytes;
139     int bytesperpixel;
140 };
141 
142 /* --------------------- Variable definitions shared by library modules */
143 
144 extern int __svgalib_CRT_I;		/* current CRT index register address */
145 extern int __svgalib_CRT_D;		/* current CRT data register address */
146 extern int __svgalib_IS1_R;		/* current input status register address */
147 extern unsigned char * BANKED_MEM_POINTER, * LINEAR_MEM_POINTER, * MMIO_POINTER;
148 extern unsigned long int __svgalib_banked_mem_base, __svgalib_banked_mem_size;
149 extern unsigned long int __svgalib_mmio_base, __svgalib_mmio_size;
150 extern unsigned long int __svgalib_linear_mem_base, __svgalib_linear_mem_size;
151 extern unsigned long int __svgalib_mmio_base, __svgalib_mmio_size;
152 extern struct info CI;		/* current video parameters */
153 extern int COL;			/* current color            */
154 extern int CM;			/* current video mode       */
155 extern struct info infotable[];
156 extern int SCREENON;		/* screen visible if != 0 */
157 extern unsigned long __svgalib_graph_base;
158 extern unsigned char *GM;	/* graphics memory frame */
159 #ifdef __alpha__
160 extern unsigned char *SM;	/* sparse graphics memory frame */
161 #endif
162 extern int MODEX;		/* TRUE after vga_setmodeX() */
163 extern int MODEFLAGS;		/* copy of flags of current modeinfo->flags */
164 
165 #ifdef BACKGROUND
166 extern int __svgalib_virtual_mem_fd;
167 #endif
168 extern int __svgalib_mem_fd;
169 extern int __svgalib_tty_fd;
170 extern int __svgalib_nosigint;
171 extern int __svgalib_mouse_fd;
172 extern int __svgalib_kbd_fd;
173 extern int __svgalib_runinbackground;
174 
175 extern unsigned char __svgalib_novga;
176 extern unsigned char __svgalib_textprog;
177 extern unsigned char __svgalib_secondary;
178 extern unsigned char __svgalib_novccontrol;
179 extern unsigned char __svgalib_m_ignore_dx;
180 extern unsigned char __svgalib_m_ignore_dy;
181 extern unsigned char __svgalib_m_ignore_dz;
182 
183 extern char *__joystick_devicenames[4];
184 
185 /* --------------------- Function definitions shared by library modules */
186 
187 extern int __svgalib_inmisc(void);
188 extern void __svgalib_outmisc(int);
189 
190 extern int __svgalib_setregs(const unsigned char *regs);
191 extern int __svgalib_saveregs(unsigned char *regs);
192 extern void __svgalib_dumpregs(const unsigned char regs[], int n);
193 extern void __svgalib_get_perm(void);
194 extern int __svgalib_getchipset(void);
195 extern int __svgalib_name2number(char *modename);
196 extern void __svgalib_delay(void);
197 extern int __svgalib_addmode(int xdim, int ydim, int cols, int xbytes, int bytespp);
198 extern unsigned long __svgalib_physmem(void);
199 extern void __svgalib_waitvtactive(void);
200 extern void __svgalib_open_devconsole(void);
201 extern void __svgalib_flipaway(void);
202 extern void (*__svgalib_mouse_eventhandler) (int, int, int, int, int, int, int);
203 extern void (*__svgalib_keyboard_eventhandler) (int, int);
204 extern void __joystick_flip_vc(int acquire);
205 extern char *__svgalib_TextProg_argv[16]; /* should be enough */
206 extern char *__svgalib_TextProg;
207 extern int __svgalib_VESA_savebitmap;
208 extern int __svgalib_VESA_textmode;
209 extern unsigned char __svgalib_vesatext;
210 extern int __svgalib_mapkeyname(const char *keyname);
211 extern void __svgalib_mouse_update_keymap(void);
212 
213 #if 0
214 /* remove this part ? */
215 extern void __svgalib_releasevt_signal(int n);
216 extern void __svgalib_acquirevt_signal(int n);
217 #endif
218 
219 #ifdef __alpha__
220 
221 #include <asm/io.h>
222 
port_out(int value,int port)223 static __inline__ void port_out(int value, int port)
224 {
225     _outb(value, port);
226 }
227 
port_outw(int value,int port)228 static __inline__ void port_outw(int value, int port)
229 {
230     _outw(value, port);
231 }
232 
port_in(int port)233 static __inline__ int port_in(int port)
234 {
235     return _inb(port);
236 }
237 
port_inw(int port)238 static __inline__ int port_inw(int port)
239 {
240     return _inw(port);
241 }
242 
243 #undef inb
244 #undef inw
245 #undef outb
246 #undef outw
247 
248 extern unsigned long vga_readb(unsigned long base, unsigned long off);
249 extern unsigned long vga_readw(unsigned long base, unsigned long off);
250 extern void vga_writeb(unsigned char b, unsigned long base, unsigned long off);
251 extern void vga_writew(unsigned short b, unsigned long base, unsigned long off);
252 
253 #define gr_readb(off)		(vga_readb((unsigned long)SM, (off)))
254 #define gr_readw(off)		(vga_readw((unsigned long)SM, (off)))
255 
256 #if defined(CONFIG_ALPHA_JENSEN)
257 #define gr_readl(off)		(vga_readl((unsigned long)SM, (off)))
258 #else
259 #define gr_readl(off)		(*(((unsigned int*)GM)+(off)))
260 #endif
261 
262 #define gr_writeb(v,off)	(vga_writeb((v), (unsigned long)SM, (off)))
263 #define gr_writew(v,off)	(vga_writew((v), (unsigned long)SM, (off)))
264 
265 #if defined(CONFIG_ALPHA_JENSEN)
266 #define gr_writel(v,off)	(vga_writel((v), (unsigned long)SM, (off)))
267 #else
268 #define gr_writel(v,off)	(*(((unsigned int*)GM)+(off)) = (v))
269 #endif
270 
271 #else
272 
port_out(int value,int port)273 static __inline__ void port_out(int value, int port)
274 {
275     __asm__ volatile ("outb %0,%1"
276 	      ::"a" ((unsigned char) value), "d"((unsigned short) port));
277 }
278 
port_outw(int value,int port)279 static __inline__ void port_outw(int value, int port)
280 {
281     __asm__ volatile ("outw %0,%1"
282 	     ::"a" ((unsigned short) value), "d"((unsigned short) port));
283 }
284 
port_outl(int value,int port)285 static __inline__ void port_outl(int value, int port)
286 {
287     __asm__ volatile ("outl %0,%w1"
288              ::"a" ((unsigned int)value), "Nd" ((unsigned short) port));
289 }
290 
port_in(int port)291 static __inline__ int port_in(int port)
292 {
293     unsigned char value;
294     __asm__ volatile ("inb %1,%0"
295 		      :"=a" (value)
296 		      :"d"((unsigned short) port));
297     return value;
298 }
299 
port_inw(int port)300 static __inline__ int port_inw(int port)
301 {
302     unsigned short value;
303     __asm__ volatile ("inw %1,%0"
304 		      :"=a" (value)
305 		      :"d"((unsigned short) port));
306     return value;
307 }
308 
port_inl(int port)309 static __inline__ int port_inl(int port)
310 {
311     unsigned int value;
312     __asm__ volatile("inl %w1,%0" :
313                	     "=a" (value) :
314                      "Nd" ((unsigned short)port));
315     return value;
316 }
317 
318 #define gr_readb(off)		(((volatile unsigned char *)GM)[(off)])
319 #define gr_readw(off)		(*(volatile unsigned short*)((GM)+(off)))
320 #define gr_readl(off)		(*(volatile unsigned long*)((GM)+(off)))
321 #define gr_writeb(v,off)	(GM[(off)] = (v))
322 #define gr_writew(v,off)	(*(unsigned short*)((GM)+(off)) = (v))
323 #define gr_writel(v,off)	(*(unsigned long*)((GM)+(off)) = (v))
324 
325 
326 #endif
327 
328 /* Note that the arguments of outb/w are reversed compared with the */
329 /* kernel sources. The XFree86 drivers also use this format. */
330 #undef inb
331 #undef inw
332 #undef inl
333 #undef outb
334 #undef outw
335 #undef outl
336 
337 #define inb port_in
338 #define inw port_inw
339 #define inl port_inl
340 #define outb(port, value) port_out(value, port)
341 #define outw(port, value) port_outw(value, port)
342 #define outl(port, value) port_outl(value, port)
343 
344 /* Background things */
345 
346 extern unsigned char *__svgalib_give_graph_red(void);
347 extern unsigned char *__svgalib_give_graph_green(void);
348 extern unsigned char *__svgalib_give_graph_blue(void);
349 
350 #endif
351 
352 #define zero_sa_mask(maskptr) memset(maskptr, 0, sizeof(sigset_t))
353 
354 #if 0
355 
356 #define SVGALIB_ACQUIRE_SIG SIGUSR2
357 #define SVGALIB_RELEASE_SIG SIGUSR1
358 
359 #else
360 
361 #define SVGALIB_ACQUIRE_SIG SIGUSR2
362 #define SVGALIB_RELEASE_SIG SIGPROF
363 
364 #endif
365