From f4092abdf94af6a99aff944d6264bc1284e8bdd4 Mon Sep 17 00:00:00 2001 From: Reinhard Tartler Date: Mon, 10 Oct 2011 17:43:39 +0200 Subject: Imported nx-X11-3.1.0-1.tar.gz Summary: Imported nx-X11-3.1.0-1.tar.gz Keywords: Imported nx-X11-3.1.0-1.tar.gz into Git repository --- .../Xserver/hw/xfree86/os-support/qnx4/qnx_init.c | 175 +++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 nx-X11/programs/Xserver/hw/xfree86/os-support/qnx4/qnx_init.c (limited to 'nx-X11/programs/Xserver/hw/xfree86/os-support/qnx4/qnx_init.c') diff --git a/nx-X11/programs/Xserver/hw/xfree86/os-support/qnx4/qnx_init.c b/nx-X11/programs/Xserver/hw/xfree86/os-support/qnx4/qnx_init.c new file mode 100644 index 000000000..b96cc4d30 --- /dev/null +++ b/nx-X11/programs/Xserver/hw/xfree86/os-support/qnx4/qnx_init.c @@ -0,0 +1,175 @@ +/* + * (c) Copyright 1998 by Sebastien Marineau + * + * + * 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, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * 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. IN NO EVENT SHALL + * SEBASTIEN MARINEAU BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF + * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Except as contained in this notice, the name of Sebastien Marineau shall not be + * used in advertising or otherwise to promote the sale, use or other dealings + * in this Software without prior written authorization from Sebastien Marineau. + * + * $XFree86: xc/programs/Xserver/hw/xfree86/os-support/qnx/qnx_init.c,v 1.1.2.2 1999/07/23 13:42:33 hohndel Exp $ + */ + +/* This module contains the qnx-specific functions used at server init. + */ +#ifdef HAVE_XORG_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include +#include + +#include +#include "xf86.h" +#include "xf86Priv.h" +#include "xf86_OSlib.h" + +struct _console_ctrl *QNX_con_ctrl = NULL; +unsigned long QNX_con_mask = 0; +unsigned long QNX_con_bits = 0; +pid_t QNX_console_proxy = -1; +int QNX_our_console = -1; + +void +xf86UseMsg() +{ + ErrorF("No QNX-specific usage options available at this time\n"); + return; +} + +int +xf86ProcessArgument(argc, argv, i) +int argc; +char **argv; +int i; +{ + + return 0; + +} + + +void +xf86OpenConsole() +{ +struct _console_info info; +unsigned event; +int default_console = FALSE; +char con_name[32]; +int active; + + ErrorF("xf86OpenConsole\n"); + + if(QNX_con_ctrl == NULL) { + /* First open a channel to default stdout */ + xf86Info.consoleFd = fileno(stdout); + if((QNX_con_ctrl = console_open (fileno(stdout), O_RDWR)) == NULL){ + /* Hmmm. Didn't work. Try to open con1 as default */ + + if (( xf86Info.consoleFd = open("/dev/con1", O_RDWR)) < 0){ + FatalError("xf86OpenConsole: could not open console driver\n"); + return; + } + if((QNX_con_ctrl = + console_open (xf86Info.consoleFd, O_RDWR)) == NULL){ + FatalError("xf86OpenConsole: could not open console\n"); + } + default_console = TRUE; + } + if(QNX_con_ctrl && console_info(QNX_con_ctrl, 0, &info) == 0 ) { + if( info.type != _CON_TYPE_STANDARD ) { + FatalError("xf86OpenConsole: console is not a standard text console\n"); + return; + } + } + else { + FatalError("xf86OpenConsole: Error querying console\n"); + return; + } + } + + /* We have a console, and it is text. Keep going */ + /* Next, check if Photon has got the screen */ + if(qnx_name_locate(0, "/qnx/crt", 0, NULL) != -1) { + FatalError("xf86OpenConsole: Photon has already grabbed the display\n"); + return; + } + fclose (stdout); + /* We have two cases here: either this is the first time through, + * and QNX_our_console is not set yet, or we're coming here from + * a reset. In that case, make sure our console is now active + * before we go further... + */ + if (QNX_our_console < 0) { + QNX_our_console = console_active(QNX_con_ctrl, -1); + } + else { + console_arm(QNX_con_ctrl, QNX_our_console, -1, _CON_EVENT_ACTIVE); + while ((active = console_active(QNX_con_ctrl, -1)) != + QNX_our_console) { + sleep(2); + ErrorF("Waiting for our console to become active!\n"); + } + } + QNX_con_mask = CONSOLE_INVISIBLE | CONSOLE_NOSWITCH; + QNX_con_bits = console_ctrl (QNX_con_ctrl, QNX_our_console, + QNX_con_mask, QNX_con_mask); + ErrorF("xf86OpenConsole: Locked console %d\n", QNX_our_console); + + /* If we had the wrong console opened in the first place, reopen */ + if(default_console) { + close(xf86Info.consoleFd); + sprintf(con_name, "/dev/con%d", QNX_our_console); + xf86Info.consoleFd = open(con_name, O_RDWR); + ErrorF("xf86OpenConsole: reopened console %d\n", QNX_our_console); + } + + /* Next create the proxy used to notify us of console events */ + if(QNX_console_proxy == -1){ + if((QNX_console_proxy = qnx_proxy_attach(0, 0, 0, -1)) == -1){ + ErrorF("xf86OpenConsole: Could not create proxy for VT switching\n"); + } + } + + return; +} + +void +xf86CloseConsole() +{ + unsigned bits; + int font; + + ErrorF("xf86CloseConsole\n"); + if(QNX_con_ctrl == NULL) return; + QNX_con_bits &= ~QNX_con_mask; /* To make sure */ + bits = console_ctrl(QNX_con_ctrl, 0, QNX_con_bits, QNX_con_mask); + + ErrorF("xf86CloseConsole: unlocked console\n"); + /* For now, dump malloc info as well */ +#if 0 + malloc_dump(2); +#endif + return; +} -- cgit v1.2.3