diff options
Diffstat (limited to 'nx-X11/programs/Xserver/hw/xfree86/os-support/sunos/sun_io.c')
-rw-r--r-- | nx-X11/programs/Xserver/hw/xfree86/os-support/sunos/sun_io.c | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/nx-X11/programs/Xserver/hw/xfree86/os-support/sunos/sun_io.c b/nx-X11/programs/Xserver/hw/xfree86/os-support/sunos/sun_io.c new file mode 100644 index 000000000..2269ef3c9 --- /dev/null +++ b/nx-X11/programs/Xserver/hw/xfree86/os-support/sunos/sun_io.c @@ -0,0 +1,160 @@ +/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/sunos/sun_io.c,v 1.2 2002/10/11 01:40:37 dawes Exp $ */ +/* $XdotOrg: xc/programs/Xserver/hw/xfree86/os-support/sunos/sun_io.c,v 1.4 2005/08/13 00:11:28 alanc Exp $ */ +/* + * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany + * Copyright 1993 by David Dawes <dawes@xfree86.org> + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the names of Thomas Roell and David Dawes + * not be used in advertising or publicity pertaining to distribution of + * the software without specific, written prior permission. Thomas Roell and + * David Dawes makes no representations about the suitability of this + * software for any purpose. It is provided "as is" without express or + * implied warranty. + * + * THOMAS ROELL AND DAVID DAWES DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, + * IN NO EVENT SHALL THOMAS ROELL OR DAVID DAWES BE LIABLE FOR ANY SPECIAL, + * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + * + */ +/* Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. + */ + +/* Solaris support routines for builtin "keyboard" driver */ + +#ifdef HAVE_XORG_CONFIG_H +#include <xorg-config.h> +#endif + +#include "xf86Priv.h" +#include "xf86_OSlib.h" +#include "sun_kbd.h" + +static sunKbdPrivRec sunKeyboardPriv; + +_X_HIDDEN void +xf86KbdInit(void) +{ + const char *kbdName = "keyboard"; + pointer *kbdOptions = NULL; + IDevPtr pDev; + + /* There should be a better way to find the keyboard device name, but + this seems to work for now. */ + for (pDev = xf86ConfigLayout.inputs; pDev && pDev->identifier; pDev++) { + if (!xf86NameCmp(pDev->driver, "keyboard")) { + kbdName = pDev->identifier; + kbdOptions = pDev->commonOptions; + break; + } + } + + if (xf86Info.kbdFd < 0) { + xf86Info.kbdFd = sunKbdOpen(kbdName, kbdOptions); + if (xf86Info.kbdFd < 0) { + FatalError("Unable to open keyboard: /dev/kbd\n"); + } + } + + memset(&sunKeyboardPriv, 0, sizeof(sunKbdPrivRec)); + if (sunKbdInit(&sunKeyboardPriv, xf86Info.kbdFd, + kbdName, kbdOptions) != Success) { + FatalError("Unable to initialize keyboard driver\n"); + } +} + +_X_HIDDEN int +xf86KbdOn(void) +{ + if (sunKbdOn(&sunKeyboardPriv) != Success) { + FatalError("Enabling keyboard"); + } + + return xf86Info.kbdFd; +} + +_X_HIDDEN int +xf86KbdOff(void) +{ + if (sunKbdOff(&sunKeyboardPriv) != Success) { + FatalError("Disabling keyboard"); + } + + return xf86Info.kbdFd; +} + +_X_EXPORT void +xf86SoundKbdBell(int loudness, int pitch, int duration) +{ + sunKbdSoundBell(&sunKeyboardPriv, loudness, pitch, duration); +} + +_X_HIDDEN void +xf86SetKbdLeds(int leds) +{ + sunKbdSetLeds(&sunKeyboardPriv, leds); +} + +_X_HIDDEN int +xf86GetKbdLeds(void) +{ + return sunKbdGetLeds(&sunKeyboardPriv); +} + +_X_HIDDEN void +xf86SetKbdRepeat(char rad) +{ + sunKbdSetRepeat(&sunKeyboardPriv, rad); +} + +/* + * Lets try reading more than one keyboard event at a time in the hopes that + * this will be slightly more efficient. Or we could just try the MicroSoft + * method, and forget about efficiency. :-) + */ +_X_HIDDEN void +xf86KbdEvents(void) +{ + Firm_event event[64]; + int nBytes, i; + + /* I certainly hope its not possible to read partial events */ + + if ((nBytes = read(xf86Info.kbdFd, (char *)event, sizeof(event))) > 0) + { + for (i = 0; i < (nBytes / sizeof(Firm_event)); i++) + sunPostKbdEvent(sunKeyboardPriv.ktype, &event[i]); + } +} |