1 /*
2  * Copyright 1990, 1991 by Thomas Roell, Dinkelscherben, Germany
3  * Copyright 1992 by David Dawes <dawes@XFree86.org>
4  * Copyright 1992 by Jim Tsillas <jtsilla@damon.ccs.northeastern.edu>
5  * Copyright 1992 by Rich Murphey <Rich@Rice.edu>
6  * Copyright 1992 by Robert Baron <Robert.Baron@ernst.mach.cs.cmu.edu>
7  * Copyright 1992 by Orest Zborowski <obz@eskimo.com>
8  * Copyright 1993 by Vrije Universiteit, The Netherlands
9  * Copyright 1993 by David Wexelblat <dwex@XFree86.org>
10  * Copyright 1994, 1996 by Holger Veit <Holger.Veit@gmd.de>
11  * Copyright 1997 by Takis Psarogiannakopoulos <takis@dpmms.cam.ac.uk>
12  * Copyright 1994-2003 by The XFree86 Project, Inc
13  *
14  * Permission to use, copy, modify, distribute, and sell this software and its
15  * documentation for any purpose is hereby granted without fee, provided that
16  * the above copyright notice appear in all copies and that both that
17  * copyright notice and this permission notice appear in supporting
18  * documentation, and that the names of the above listed copyright holders
19  * not be used in advertising or publicity pertaining to distribution of
20  * the software without specific, written prior permission.  The above listed
21  * copyright holders make no representations about the suitability of this
22  * software for any purpose.  It is provided "as is" without express or
23  * implied warranty.
24  *
25  * THE ABOVE LISTED COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD
26  * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
27  * AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDERS BE
28  * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
29  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
30  * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
31  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
32  *
33  */
34 
35 /*
36  * The ARM32 code here carries the following copyright:
37  *
38  * Copyright 1997
39  * Digital Equipment Corporation. All rights reserved.
40  * This software is furnished under license and may be used and copied only in
41  * accordance with the following terms and conditions.  Subject to these
42  * conditions, you may download, copy, install, use, modify and distribute
43  * this software in source and/or binary form. No title or ownership is
44  * transferred hereby.
45  *
46  * 1) Any source code used, modified or distributed must reproduce and retain
47  *    this copyright notice and list of conditions as they appear in the
48  *    source file.
49  *
50  * 2) No right is granted to use any trade name, trademark, or logo of Digital
51  *    Equipment Corporation. Neither the "Digital Equipment Corporation"
52  *    name nor any trademark or logo of Digital Equipment Corporation may be
53  *    used to endorse or promote products derived from this software without
54  *    the prior written permission of Digital Equipment Corporation.
55  *
56  * 3) This software is provided "AS-IS" and any express or implied warranties,
57  *    including but not limited to, any implied warranties of merchantability,
58  *    fitness for a particular purpose, or non-infringement are disclaimed.
59  *    In no event shall DIGITAL be liable for any damages whatsoever, and in
60  *    particular, DIGITAL shall not be liable for special, indirect,
61  *    consequential, or incidental damages or damages for lost profits, loss
62  *    of revenue or loss of use, whether such damages arise in contract,
63  *    negligence, tort, under statute, in equity, at law or otherwise, even
64  *    if advised of the possibility of such damage.
65  *
66  */
67 
68 /*
69  * This is private, and should not be included by any drivers.  Drivers
70  * may include xf86_OSproc.h to get prototypes for public interfaces.
71  */
72 
73 #ifndef _XF86_OSLIB_H
74 #define _XF86_OSLIB_H
75 
76 #include <X11/Xos.h>
77 #include <X11/Xfuncproto.h>
78 
79 #include <stdio.h>
80 #include <ctype.h>
81 #include <stddef.h>
82 
83 /**************************************************************************/
84 /* SYSV386 (SVR3, SVR4), including Solaris                                */
85 /**************************************************************************/
86 #if (defined(SYSV) || defined(SVR4)) && \
87     (defined(__sun) || defined(__i386__))
88 #include <sys/ioctl.h>
89 #include <signal.h>
90 #include <termio.h>
91 #include <sys/stat.h>
92 #include <sys/types.h>
93 
94 #include <errno.h>
95 
96 #if defined(_NEED_SYSI86)
97 #if !(defined (__sun) && defined (SVR4))
98 #include <sys/immu.h>
99 #include <sys/region.h>
100 #include <sys/proc.h>
101 #endif
102 #include <sys/tss.h>
103 #include <sys/sysi86.h>
104 #if defined(SVR4) && !defined(__sun)
105 #include <sys/seg.h>
106 #endif                          /* SVR4 && !__sun */
107 /* V86SC_IOPL was moved to <sys/sysi86.h> on Solaris 7 and later */
108 #if !defined(V86SC_IOPL)        /* Solaris 7 or later? */
109 #include <sys/v86.h>            /* Nope */
110 #endif
111 #if defined(__sun) && (defined (__i386__) || defined(__i386) || defined(__x86))  && defined (SVR4)
112 #include <sys/psw.h>
113 #endif
114 #endif                          /* _NEED_SYSI86 */
115 
116 #if defined(HAS_SVR3_MMAPDRV)
117 #include <sys/sysmacros.h>
118 #if !defined(_NEED_SYSI86)
119 #include <sys/immu.h>
120 #include <sys/region.h>
121 #endif
122 #include <sys/mmap.h>           /* MMAP driver header */
123 #endif
124 
125 #if !defined(__sun) || defined(HAVE_SYS_VT_H)
126 #define HAS_USL_VTS
127 #endif
128 #if !defined(__sun)
129 #include <sys/emap.h>
130 #endif
131 #if   defined(HAS_USL_VTS)
132 #if !defined(__sun)
133 #include <sys/at_ansi.h>
134 #endif
135 #include <sys/kd.h>
136 #include <sys/vt.h>
137 
138 extern _X_HIDDEN void xf86VTAcquire(int);
139 extern _X_HIDDEN void xf86VTRelease(int);
140 #endif
141 
142 #if defined(__sun)
143 #include <sys/fbio.h>
144 extern _X_HIDDEN char xf86SolarisFbDev[PATH_MAX];
145 
146 #include <sys/kbd.h>
147 #include <sys/kbio.h>
148 
149 /* undefine symbols from <sys/kbd.h> we don't need that conflict with enum
150    definitions in parser/xf86tokens.h */
151 #undef STRING
152 #undef LEFTALT
153 #undef RIGHTALT
154 
155 #define LED_CAP LED_CAPS_LOCK
156 #define LED_NUM LED_NUM_LOCK
157 #define LED_SCR LED_SCROLL_LOCK
158 #define LED_COMP LED_COMPOSE
159 #endif                          /* __sun */
160 
161 #if !defined(VT_ACKACQ)
162 #define VT_ACKACQ 2
163 #endif                          /* !VT_ACKACQ */
164 
165 #if defined(SVR4)
166 #include <sys/mman.h>
167 #if !(defined(__sun) && defined (SVR4))
168 #define DEV_MEM "/dev/pmem"
169 #endif
170 #define CLEARDTR_SUPPORT
171 #define POSIX_TTY
172 #endif                          /* SVR4 */
173 
174 #endif                          /* (SYSV || SVR4) */
175 
176 /**************************************************************************/
177 /* Linux or Glibc-based system                                            */
178 /**************************************************************************/
179 #if defined(__linux__) || defined(__GLIBC__) || defined(__CYGWIN__)
180 #include <sys/ioctl.h>
181 #include <signal.h>
182 #include <stdlib.h>
183 #include <sys/types.h>
184 #include <assert.h>
185 
186 #include <termios.h>
187 #ifdef __sparc__
188 #include <sys/param.h>
189 #endif
190 
191 #include <errno.h>
192 
193 #include <sys/stat.h>
194 
195 #include <sys/mman.h>
196 #ifdef __linux__
197 #define HAS_USL_VTS
198 #include <sys/kd.h>
199 #include <sys/vt.h>
200 #define LDGMAP GIO_SCRNMAP
201 #define LDSMAP PIO_SCRNMAP
202 #define LDNMAP LDSMAP
203 #define CLEARDTR_SUPPORT
204 #endif
205 
206 #define POSIX_TTY
207 
208 #endif                          /* __linux__ || __GLIBC__ */
209 
210 /**************************************************************************/
211 /* System is BSD-like                                                     */
212 /**************************************************************************/
213 
214 #ifdef CSRG_BASED
215 #include <sys/ioctl.h>
216 #include <signal.h>
217 
218 #include <termios.h>
219 #define termio termios
220 #define POSIX_TTY
221 
222 #include <errno.h>
223 
224 #include <sys/types.h>
225 #include <sys/mman.h>
226 #include <sys/stat.h>
227 
228 #endif                          /* CSRG_BASED */
229 
230 /**************************************************************************/
231 /* Kernel of *BSD                                                         */
232 /**************************************************************************/
233 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \
234  defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
235 
236 #include <sys/param.h>
237 #if defined(__FreeBSD_version) && !defined(__FreeBSD_kernel_version)
238 #define __FreeBSD_kernel_version __FreeBSD_version
239 #endif
240 
241 #ifdef SYSCONS_SUPPORT
242 #define COMPAT_SYSCONS
243 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
244 #if defined(__DragonFly__)  || (__FreeBSD_kernel_version >= 410000)
245 #include <sys/consio.h>
246 #include <sys/kbio.h>
247 #else
248 #include <machine/console.h>
249 #endif                          /* FreeBSD 4.1 RELEASE or lator */
250 #else
251 #include <sys/console.h>
252 #endif
253 #endif                          /* SYSCONS_SUPPORT */
254 #if defined(PCVT_SUPPORT) && !defined(__NetBSD__) && !defined(__OpenBSD__)
255 #if !defined(SYSCONS_SUPPORT)
256       /* no syscons, so include pcvt specific header file */
257 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
258 #include <machine/pcvt_ioctl.h>
259 #else
260 #include <sys/pcvt_ioctl.h>
261 #endif                          /* __FreeBSD_kernel__ */
262 #else                           /* pcvt and syscons: hard-code the ID magic */
263 #define VGAPCVTID _IOWR('V',113, struct pcvtid)
264 struct pcvtid {
265     char name[16];
266     int rmajor, rminor;
267 };
268 #endif                          /* PCVT_SUPPORT && SYSCONS_SUPPORT */
269 #endif                          /* PCVT_SUPPORT */
270 #ifdef WSCONS_SUPPORT
271 #include <dev/wscons/wsconsio.h>
272 #include <dev/wscons/wsdisplay_usl_io.h>
273 #endif                          /* WSCONS_SUPPORT */
274 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
275 #include <sys/mouse.h>
276 #endif
277     /* Include these definitions in case ioctl_pc.h didn't get included */
278 #ifndef CONSOLE_X_MODE_ON
279 #define CONSOLE_X_MODE_ON _IO('t',121)
280 #endif
281 #ifndef CONSOLE_X_MODE_OFF
282 #define CONSOLE_X_MODE_OFF _IO('t',122)
283 #endif
284 #ifndef CONSOLE_X_BELL
285 #define CONSOLE_X_BELL _IOW('t',123,int[2])
286 #endif
287 #ifndef CONSOLE_X_TV_ON
288 #define CONSOLE_X_TV_ON _IOW('t',155,int)
289 #define XMODE_RGB   0
290 #define XMODE_NTSC  1
291 #define XMODE_PAL   2
292 #define XMODE_SECAM 3
293 #endif
294 #ifndef CONSOLE_X_TV_OFF
295 #define CONSOLE_X_TV_OFF _IO('t',156)
296 #endif
297 #ifndef CONSOLE_GET_LINEAR_INFO
298 #define CONSOLE_GET_LINEAR_INFO         _IOR('t',157,struct map_info)
299 #endif
300 #ifndef CONSOLE_GET_IO_INFO
301 #define CONSOLE_GET_IO_INFO             _IOR('t',158,struct map_info)
302 #endif
303 #ifndef CONSOLE_GET_MEM_INFO
304 #define CONSOLE_GET_MEM_INFO            _IOR('t',159,struct map_info)
305 #endif
306 
307 #if defined(USE_I386_IOPL) || defined(USE_AMD64_IOPL)
308 #include <machine/sysarch.h>
309 #endif
310 
311 #define CLEARDTR_SUPPORT
312 
313 #endif                          /* __FreeBSD__ || __NetBSD__ || __OpenBSD__ || __DragonFly__ */
314 
315 /**************************************************************************/
316 /* IRIX                                                                   */
317 /**************************************************************************/
318 
319 /**************************************************************************/
320 /* Generic                                                                */
321 /**************************************************************************/
322 
323 #include <sys/wait.h>           /* May need to adjust this for other OSs */
324 
325 /* For PATH_MAX */
326 #include "misc.h"
327 
328 /*
329  * Hack originally for ISC 2.2 POSIX headers, but may apply elsewhere,
330  * and it's safe, so just do it.
331  */
332 #if !defined(O_NDELAY) && defined(O_NONBLOCK)
333 #define O_NDELAY O_NONBLOCK
334 #endif                          /* !O_NDELAY && O_NONBLOCK */
335 
336 #if !defined(MAXHOSTNAMELEN)
337 #define MAXHOSTNAMELEN 32
338 #endif                          /* !MAXHOSTNAMELEN */
339 
340 #include <limits.h>
341 
342 #ifndef DEV_MEM
343 #define DEV_MEM "/dev/mem"
344 #endif
345 
346 #ifndef MAP_FAILED
347 #define MAP_FAILED ((void *)-1)
348 #endif
349 
350 #define SYSCALL(call) while(((call) == -1) && (errno == EINTR))
351 
352 #define XF86_OS_PRIVS
353 #include "xf86_OSproc.h"
354 
355 #endif                          /* _XF86_OSLIB_H */
356