2003-11-14 17:48:57 +01:00
|
|
|
/*
|
|
|
|
* Copyright 1992 by Rich Murphey <Rich@Rice.edu>
|
|
|
|
* Copyright 1993 by David Wexelblat <dwex@goblin.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
|
2014-10-31 00:45:12 +01:00
|
|
|
* documentation, and that the names of Rich Murphey and David Wexelblat
|
|
|
|
* not be used in advertising or publicity pertaining to distribution of
|
2003-11-14 17:48:57 +01:00
|
|
|
* the software without specific, written prior permission. Rich Murphey and
|
2014-10-31 00:45:12 +01:00
|
|
|
* David Wexelblat make no representations about the suitability of this
|
|
|
|
* software for any purpose. It is provided "as is" without express or
|
2003-11-14 17:48:57 +01:00
|
|
|
* implied warranty.
|
|
|
|
*
|
2014-10-31 00:45:12 +01:00
|
|
|
* RICH MURPHEY AND DAVID WEXELBLAT DISCLAIM ALL WARRANTIES WITH REGARD TO
|
|
|
|
* THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
|
|
* FITNESS, IN NO EVENT SHALL RICH MURPHEY OR DAVID WEXELBLAT 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
|
2003-11-14 17:48:57 +01:00
|
|
|
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
* The ARM32 code here carries the following copyright:
|
|
|
|
*
|
|
|
|
* Copyright 1997
|
|
|
|
* Digital Equipment Corporation. All rights reserved.
|
2014-10-31 00:45:12 +01:00
|
|
|
* This software is furnished under license and may be used and copied only in
|
2003-11-14 17:48:57 +01:00
|
|
|
* accordance with the following terms and conditions. Subject to these
|
|
|
|
* conditions, you may download, copy, install, use, modify and distribute
|
|
|
|
* this software in source and/or binary form. No title or ownership is
|
|
|
|
* transferred hereby.
|
|
|
|
*
|
|
|
|
* 1) Any source code used, modified or distributed must reproduce and retain
|
|
|
|
* this copyright notice and list of conditions as they appear in the
|
|
|
|
* source file.
|
|
|
|
*
|
2014-10-31 00:45:12 +01:00
|
|
|
* 2) No right is granted to use any trade name, trademark, or logo of Digital
|
2003-11-14 17:48:57 +01:00
|
|
|
* Equipment Corporation. Neither the "Digital Equipment Corporation"
|
|
|
|
* name nor any trademark or logo of Digital Equipment Corporation may be
|
|
|
|
* used to endorse or promote products derived from this software without
|
|
|
|
* the prior written permission of Digital Equipment Corporation.
|
|
|
|
*
|
|
|
|
* 3) This software is provided "AS-IS" and any express or implied warranties,
|
|
|
|
* including but not limited to, any implied warranties of merchantability,
|
|
|
|
* fitness for a particular purpose, or non-infringement are disclaimed.
|
|
|
|
* In no event shall DIGITAL be liable for any damages whatsoever, and in
|
|
|
|
* particular, DIGITAL shall not be liable for special, indirect,
|
|
|
|
* consequential, or incidental damages or damages for lost profits, loss
|
2014-10-31 00:45:12 +01:00
|
|
|
* of revenue or loss of use, whether such damages arise in contract,
|
2003-11-14 17:48:57 +01:00
|
|
|
* negligence, tort, under statute, in equity, at law or otherwise, even
|
2014-10-31 00:45:12 +01:00
|
|
|
* if advised of the possibility of such damage.
|
2003-11-14 17:48:57 +01:00
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2005-07-03 09:02:09 +02:00
|
|
|
#ifdef HAVE_XORG_CONFIG_H
|
|
|
|
#include <xorg-config.h>
|
|
|
|
#endif
|
|
|
|
|
2005-04-20 14:25:48 +02:00
|
|
|
#include <X11/X.h>
|
2003-11-14 17:48:57 +01:00
|
|
|
#include "xf86.h"
|
|
|
|
#include "xf86Priv.h"
|
|
|
|
#include "xf86_OSlib.h"
|
|
|
|
#include "xf86OSpriv.h"
|
|
|
|
|
|
|
|
#if defined(__NetBSD__) && !defined(MAP_FILE)
|
|
|
|
#define MAP_FLAGS MAP_SHARED
|
|
|
|
#else
|
|
|
|
#define MAP_FLAGS (MAP_FILE | MAP_SHARED)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define BUS_BASE 0L
|
|
|
|
#define BUS_BASE_BWX 0L
|
|
|
|
|
|
|
|
/***************************************************************************/
|
|
|
|
/* Video Memory Mapping section */
|
|
|
|
/***************************************************************************/
|
|
|
|
|
2012-03-21 20:55:09 +01:00
|
|
|
static int devMemFd = -1;
|
2003-11-14 17:48:57 +01:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Check if /dev/mem can be mmap'd. If it can't print a warning when
|
|
|
|
* "warn" is TRUE.
|
|
|
|
*/
|
|
|
|
static void
|
|
|
|
checkDevMem(Bool warn)
|
|
|
|
{
|
2012-03-21 20:55:09 +01:00
|
|
|
static Bool devMemChecked = FALSE;
|
|
|
|
int fd;
|
2013-12-15 10:05:51 +01:00
|
|
|
void *base;
|
2012-03-21 20:55:09 +01:00
|
|
|
|
|
|
|
if (devMemChecked)
|
|
|
|
return;
|
|
|
|
devMemChecked = TRUE;
|
|
|
|
|
|
|
|
if ((fd = open(DEV_MEM, O_RDWR)) >= 0) {
|
|
|
|
/* Try to map a page at the VGA address */
|
|
|
|
base = mmap((caddr_t) 0, 4096, PROT_READ | PROT_WRITE,
|
|
|
|
MAP_FLAGS, fd, (off_t) 0xA0000 + BUS_BASE);
|
|
|
|
|
|
|
|
if (base != MAP_FAILED) {
|
|
|
|
munmap((caddr_t) base, 4096);
|
|
|
|
devMemFd = fd;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
/* This should not happen */
|
|
|
|
if (warn) {
|
|
|
|
xf86Msg(X_WARNING, "checkDevMem: failed to mmap %s (%s)\n",
|
|
|
|
DEV_MEM, strerror(errno));
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (warn) {
|
|
|
|
xf86Msg(X_WARNING, "checkDevMem: failed to open %s (%s)\n",
|
|
|
|
DEV_MEM, strerror(errno));
|
|
|
|
}
|
|
|
|
return;
|
2003-11-14 17:48:57 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
xf86OSInitVidMem(VidMemInfoPtr pVidMem)
|
|
|
|
{
|
2012-03-21 20:55:09 +01:00
|
|
|
checkDevMem(TRUE);
|
2003-11-14 17:48:57 +01:00
|
|
|
|
2012-03-21 20:55:09 +01:00
|
|
|
pVidMem->initialised = TRUE;
|
2003-11-14 17:48:57 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
#ifdef USE_DEV_IO
|
|
|
|
static int IoFd = -1;
|
|
|
|
|
Rework symbol visibility for easier maintenance
Save in a few special cases, _X_EXPORT should not be used in C source
files. Instead, it should be used in headers, and the proper C source
include that header. Some special cases are symbols that need to be
shared between modules, but not expected to be used by external drivers,
and symbols that are accessible via LoaderSymbol/dlopen.
This patch also adds conditionally some new sdk header files, depending
on extensions enabled. These files were added to match pattern for
other extensions/modules, that is, have the headers "deciding" symbol
visibility in the sdk. These headers are:
o Xext/panoramiXsrv.h, Xext/panoramiX.h
o fbpict.h (unconditionally)
o vidmodeproc.h
o mioverlay.h (unconditionally, used only by xaa)
o xfixes.h (unconditionally, symbols required by dri2)
LoaderSymbol and similar functions now don't have different prototypes,
in loaderProcs.h and xf86Module.h, so that both headers can be included,
without the need of defining IN_LOADER.
xf86NewInputDevice() device prototype readded to xf86Xinput.h, but
not exported (and with a comment about it).
2008-12-03 08:43:34 +01:00
|
|
|
Bool
|
2003-11-14 17:48:57 +01:00
|
|
|
xf86EnableIO()
|
|
|
|
{
|
2012-03-21 20:55:09 +01:00
|
|
|
if (IoFd >= 0)
|
|
|
|
return TRUE;
|
|
|
|
|
|
|
|
if ((IoFd = open("/dev/io", O_RDWR)) == -1) {
|
|
|
|
xf86Msg(X_WARNING, "xf86EnableIO: "
|
|
|
|
"Failed to open /dev/io for extended I/O\n");
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
return TRUE;
|
2003-11-14 17:48:57 +01:00
|
|
|
}
|
|
|
|
|
Rework symbol visibility for easier maintenance
Save in a few special cases, _X_EXPORT should not be used in C source
files. Instead, it should be used in headers, and the proper C source
include that header. Some special cases are symbols that need to be
shared between modules, but not expected to be used by external drivers,
and symbols that are accessible via LoaderSymbol/dlopen.
This patch also adds conditionally some new sdk header files, depending
on extensions enabled. These files were added to match pattern for
other extensions/modules, that is, have the headers "deciding" symbol
visibility in the sdk. These headers are:
o Xext/panoramiXsrv.h, Xext/panoramiX.h
o fbpict.h (unconditionally)
o vidmodeproc.h
o mioverlay.h (unconditionally, used only by xaa)
o xfixes.h (unconditionally, symbols required by dri2)
LoaderSymbol and similar functions now don't have different prototypes,
in loaderProcs.h and xf86Module.h, so that both headers can be included,
without the need of defining IN_LOADER.
xf86NewInputDevice() device prototype readded to xf86Xinput.h, but
not exported (and with a comment about it).
2008-12-03 08:43:34 +01:00
|
|
|
void
|
2003-11-14 17:48:57 +01:00
|
|
|
xf86DisableIO()
|
|
|
|
{
|
2012-03-21 20:55:09 +01:00
|
|
|
if (IoFd < 0)
|
|
|
|
return;
|
2003-11-14 17:48:57 +01:00
|
|
|
|
2012-03-21 20:55:09 +01:00
|
|
|
close(IoFd);
|
|
|
|
IoFd = -1;
|
|
|
|
return;
|
2003-11-14 17:48:57 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if defined(USE_ARC_MMAP) || defined(__arm32__)
|
|
|
|
|
2005-01-28 17:13:00 +01:00
|
|
|
Bool
|
2003-11-14 17:48:57 +01:00
|
|
|
xf86EnableIO()
|
|
|
|
{
|
2012-03-21 20:55:09 +01:00
|
|
|
int fd;
|
2013-12-15 10:05:51 +01:00
|
|
|
void *base;
|
2012-03-21 20:55:09 +01:00
|
|
|
|
|
|
|
if (ExtendedEnabled)
|
|
|
|
return TRUE;
|
|
|
|
|
|
|
|
if ((fd = open("/dev/ttyC0", O_RDWR)) >= 0) {
|
|
|
|
/* Try to map a page at the pccons I/O space */
|
2013-12-15 10:05:51 +01:00
|
|
|
base = (void *) mmap((caddr_t) 0, 65536, PROT_READ | PROT_WRITE,
|
|
|
|
MAP_FLAGS, fd, (off_t) 0x0000);
|
2012-03-21 20:55:09 +01:00
|
|
|
|
2013-12-15 10:05:51 +01:00
|
|
|
if (base != (void *) -1) {
|
2012-03-21 20:55:09 +01:00
|
|
|
IOPortBase = base;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
xf86Msg(X_WARNING, "EnableIO: failed to mmap %s (%s)\n",
|
|
|
|
"/dev/ttyC0", strerror(errno));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
xf86Msg("EnableIO: failed to open %s (%s)\n",
|
|
|
|
"/dev/ttyC0", strerror(errno));
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
ExtendedEnabled = TRUE;
|
|
|
|
|
|
|
|
return TRUE;
|
2003-11-14 17:48:57 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
xf86DisableIO()
|
|
|
|
{
|
2012-03-21 20:55:09 +01:00
|
|
|
return;
|
2003-11-14 17:48:57 +01:00
|
|
|
}
|
|
|
|
|
2012-03-21 20:55:09 +01:00
|
|
|
#endif /* USE_ARC_MMAP */
|