diff options
Diffstat (limited to 'hw/xfree86/os-support/lynxos/lynx_io.c')
-rw-r--r-- | hw/xfree86/os-support/lynxos/lynx_io.c | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/hw/xfree86/os-support/lynxos/lynx_io.c b/hw/xfree86/os-support/lynxos/lynx_io.c new file mode 100644 index 000000000..e0134609e --- /dev/null +++ b/hw/xfree86/os-support/lynxos/lynx_io.c @@ -0,0 +1,172 @@ +/* + * Copyright 1993 by Thomas Mueller + * + * 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 name of Thomas Mueller not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Thomas Mueller makes no representations + * about the suitability of this software for any purpose. It is provided + * "as is" without express or implied warranty. + * + * THOMAS MUELLER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THOMAS MUELLER 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. + * + */ + +/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/lynxos/lynx_io.c,v 3.3 1996/08/10 13:07:36 dawes Exp $ */ + +#define NEED_EVENTS +#include "X.h" +#include "Xproto.h" +#include "inputstr.h" +#include "scrnintstr.h" + +#include "compiler.h" + +#include "xf86Procs.h" +#include "xf86_OSlib.h" + +#if defined(KDMKTONE) || defined(KIOCSOUND) +/* Lynx 2.2.1 has sophisticated atc stuff.... */ +void xf86SoundKbdBell(loudness, pitch, duration) +int loudness; +int pitch; +int duration; +{ + if (loudness && pitch) + { +#ifdef KDMKTONE + /* + * If we have KDMKTONE use it to avoid putting the server + * to sleep + */ + ioctl(xf86Info.consoleFd, KDMKTONE, + (pitch & 0xffff) | + (((unsigned long)duration * + loudness / 50) << 16)); +#else + ioctl(xf86Info.consoleFd, KIOCSOUND, pitch); + usleep(xf86Info.bell_duration * loudness * 20); + ioctl(xf86Info.consoleFd, KIOCSOUND, 0); +#endif + } +} + +#else + +/* this is pulled from /sys/drivers/vt100/atbeep.c */ + +#define SPEAKER_CONTROL 0x61 +#define TIMER_CONTROL 0x43 +#define TIMER_DATA 0x42 +#define TIMER_LOAD_CMD 0xb6 + +#define TIMER_CONSTANT 1193280 +#define FREQ_LO(f) ((TIMER_CONSTANT / (f)) % 256) +#define FREQ_HI(f) ((TIMER_CONSTANT / (f)) / 256) + +void xf86SoundKbdBell(loudness, pitch, duration) +int loudness; +int pitch; +int duration; +{ + int flo = FREQ_LO(pitch); + int fhi = FREQ_HI(pitch); + + outb(TIMER_CONTROL, TIMER_LOAD_CMD); + outb(TIMER_DATA, flo); + outb(TIMER_DATA, fhi); + + /* speaker on */ + outb(SPEAKER_CONTROL, inb(SPEAKER_CONTROL) | 3); + usleep(xf86Info.bell_duration * loudness * 20); + /* speaker off */ + outb(SPEAKER_CONTROL, inb(SPEAKER_CONTROL) & ~3); +} +#endif + +void xf86SetKbdLeds(leds) +int leds; +{ +} + +int xf86GetKbdLeds() +{ + return 0; +} + +void xf86SetKbdRepeat(char rad) +{ +} + +static struct termio kbdtty; + +void xf86KbdInit() +{ + ioctl(xf86Info.consoleFd, TCGETA, &kbdtty); +} + +int xf86KbdOn() +{ + struct termio nTty; + + /* set CAPS_LOCK to behave as CAPS_LOCK not as CTRL */ + write(xf86Info.consoleFd, "\033<", 2); + + /* enable scan mode */ + ioctl(xf86Info.consoleFd, TIO_ENSCANMODE, NULL); + + nTty = kbdtty; + nTty.c_iflag = (IGNPAR | IGNBRK) & (~PARMRK) & (~ISTRIP); + nTty.c_oflag = 0; + nTty.c_cflag = CREAD | CS8; + nTty.c_lflag = 0; + nTty.c_cc[VTIME]=0; + nTty.c_cc[VMIN]=1; + ioctl(xf86Info.consoleFd, TCSETA, &nTty); + + return(xf86Info.consoleFd); +} + +int xf86KbdOff() +{ + /* disable scan mode */ + ioctl(xf86Info.consoleFd, TIO_DISSCANMODE, NULL); + ioctl(xf86Info.consoleFd, TCSETA, &kbdtty); + return(xf86Info.consoleFd); +} + +void xf86MouseInit(mouse) +MouseDevPtr mouse; +{ + return; +} + +int xf86MouseOn(mouse) +MouseDevPtr mouse; +{ + if ((mouse->mseFd = open(mouse->mseDevice, O_RDWR | O_NDELAY)) < 0) + { + if (xf86AllowMouseOpenFail) { + ErrorF("Cannot open mouse (%s) - Continuing...\n", + strerror(errno)); + return(-2); + } + FatalError("Cannot open mouse (%s)\n", strerror(errno)); + } + + /* assert DTR */ + ioctl(mouse->mseFd, TIOCSDTR, NULL); + + xf86SetupMouse(mouse); + + return(mouse->mseFd); +} |