"Fossies" - the Fresh Open Source Software Archive

Member "xorg-server-1.20.5/hw/xfree86/os-support/bsd/alpha_video.c" (30 May 2019, 6843 Bytes) of package /linux/misc/xorg-server-1.20.5.tar.bz2:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "alpha_video.c" see the Fossies "Dox" file reference documentation.

    1 /*
    2  * Copyright 1992 by Rich Murphey <Rich@Rice.edu>
    3  * Copyright 1993 by David Wexelblat <dwex@goblin.org>
    4  *
    5  * Permission to use, copy, modify, distribute, and sell this software and its
    6  * documentation for any purpose is hereby granted without fee, provided that
    7  * the above copyright notice appear in all copies and that both that
    8  * copyright notice and this permission notice appear in supporting
    9  * documentation, and that the names of Rich Murphey and David Wexelblat
   10  * not be used in advertising or publicity pertaining to distribution of
   11  * the software without specific, written prior permission.  Rich Murphey and
   12  * David Wexelblat make no representations about the suitability of this
   13  * software for any purpose.  It is provided "as is" without express or
   14  * implied warranty.
   15  *
   16  * RICH MURPHEY AND DAVID WEXELBLAT DISCLAIM ALL WARRANTIES WITH REGARD TO
   17  * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
   18  * FITNESS, IN NO EVENT SHALL RICH MURPHEY OR DAVID WEXELBLAT BE LIABLE FOR
   19  * ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
   20  * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
   21  * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
   22  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   23  *
   24  */
   25 
   26 #ifdef HAVE_XORG_CONFIG_H
   27 #include <xorg-config.h>
   28 #endif
   29 
   30 #include <X11/X.h>
   31 #include "xf86.h"
   32 #include "xf86Priv.h"
   33 
   34 #include <sys/param.h>
   35 #ifndef __NetBSD__
   36 #include <sys/sysctl.h>
   37 #endif
   38 
   39 #include "xf86_OSlib.h"
   40 #include "xf86OSpriv.h"
   41 
   42 #if defined(__NetBSD__) && !defined(MAP_FILE)
   43 #define MAP_FLAGS MAP_SHARED
   44 #else
   45 #define MAP_FLAGS (MAP_FILE | MAP_SHARED)
   46 #endif
   47 
   48 #ifndef __NetBSD__
   49 extern unsigned long dense_base(void);
   50 #else                           /* __NetBSD__ */
   51 static struct alpha_bus_window *abw;
   52 static int abw_count = -1;
   53 
   54 static void
   55 init_abw(void)
   56 {
   57     if (abw_count < 0) {
   58         abw_count = alpha_bus_getwindows(ALPHA_BUS_TYPE_PCI_MEM, &abw);
   59         if (abw_count <= 0)
   60             FatalError("init_abw: alpha_bus_getwindows failed\n");
   61     }
   62 }
   63 
   64 static unsigned long
   65 dense_base(void)
   66 {
   67     if (abw_count < 0)
   68         init_abw();
   69 
   70     /* XXX check abst_flags for ABST_DENSE just to be safe? */
   71     xf86Msg(X_INFO, "dense base = %#lx\n", abw[0].abw_abst.abst_sys_start);     /* XXXX */
   72     return abw[0].abw_abst.abst_sys_start;
   73 }
   74 
   75 #endif                          /* __NetBSD__ */
   76 
   77 #define BUS_BASE    dense_base()
   78 
   79 /***************************************************************************/
   80 /* Video Memory Mapping section                                            */
   81 /***************************************************************************/
   82 
   83 #ifdef __OpenBSD__
   84 #define SYSCTL_MSG "\tCheck that you have set 'machdep.allowaperture=1'\n"\
   85                   "\tin /etc/sysctl.conf and reboot your machine\n" \
   86                   "\trefer to xf86(4) for details"
   87 #endif
   88 
   89 static int devMemFd = -1;
   90 
   91 #ifdef HAS_APERTURE_DRV
   92 #define DEV_APERTURE "/dev/xf86"
   93 #endif
   94 
   95 /*
   96  * Check if /dev/mem can be mmap'd.  If it can't print a warning when
   97  * "warn" is TRUE.
   98  */
   99 static void
  100 checkDevMem(Bool warn)
  101 {
  102     static Bool devMemChecked = FALSE;
  103     int fd;
  104     void *base;
  105 
  106     if (devMemChecked)
  107         return;
  108     devMemChecked = TRUE;
  109 
  110 #ifdef HAS_APERTURE_DRV
  111     /* Try the aperture driver first */
  112     if ((fd = open(DEV_APERTURE, O_RDWR)) >= 0) {
  113         /* Try to map a page at the VGA address */
  114         base = mmap((caddr_t) 0, 4096, PROT_READ | PROT_WRITE,
  115                     MAP_FLAGS, fd, (off_t) 0xA0000 + BUS_BASE);
  116 
  117         if (base != MAP_FAILED) {
  118             munmap((caddr_t) base, 4096);
  119             devMemFd = fd;
  120             xf86Msg(X_INFO, "checkDevMem: using aperture driver %s\n",
  121                     DEV_APERTURE);
  122             return;
  123         }
  124         else {
  125             if (warn) {
  126                 xf86Msg(X_WARNING, "checkDevMem: failed to mmap %s (%s)\n",
  127                         DEV_APERTURE, strerror(errno));
  128             }
  129         }
  130     }
  131 #endif
  132     if ((fd = open(DEV_MEM, O_RDWR)) >= 0) {
  133         /* Try to map a page at the VGA address */
  134         base = mmap((caddr_t) 0, 4096, PROT_READ | PROT_WRITE,
  135                     MAP_FLAGS, fd, (off_t) 0xA0000 + BUS_BASE);
  136 
  137         if (base != MAP_FAILED) {
  138             munmap((caddr_t) base, 4096);
  139             devMemFd = fd;
  140             return;
  141         }
  142         else {
  143             if (warn) {
  144                 xf86Msg(X_WARNING, "checkDevMem: failed to mmap %s (%s)\n",
  145                         DEV_MEM, strerror(errno));
  146             }
  147         }
  148     }
  149     if (warn) {
  150 #ifndef HAS_APERTURE_DRV
  151         xf86Msg(X_WARNING, "checkDevMem: failed to open/mmap %s (%s)\n",
  152                 DEV_MEM, strerror(errno));
  153 #else
  154 #ifndef __OpenBSD__
  155         xf86Msg(X_WARNING, "checkDevMem: failed to open %s and %s\n"
  156                 "\t(%s)\n", DEV_APERTURE, DEV_MEM, strerror(errno));
  157 #else                           /* __OpenBSD__ */
  158         xf86Msg(X_WARNING, "checkDevMem: failed to open %s and %s\n"
  159                 "\t(%s)\n%s", DEV_APERTURE, DEV_MEM, strerror(errno),
  160                 SYSCTL_MSG);
  161 #endif                          /* __OpenBSD__ */
  162 #endif
  163         xf86ErrorF("\tlinear framebuffer access unavailable\n");
  164     }
  165     return;
  166 }
  167 
  168 void
  169 xf86OSInitVidMem(VidMemInfoPtr pVidMem)
  170 {
  171     checkDevMem(TRUE);
  172 
  173     pVidMem->initialised = TRUE;
  174 }
  175 
  176 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__)
  177 
  178 extern int ioperm(unsigned long from, unsigned long num, int on);
  179 
  180 Bool
  181 xf86EnableIO()
  182 {
  183     if (!ioperm(0, 65536, TRUE))
  184         return TRUE;
  185     return FALSE;
  186 }
  187 
  188 void
  189 xf86DisableIO()
  190 {
  191     return;
  192 }
  193 
  194 #endif                          /* __FreeBSD_kernel__ || __OpenBSD__ */
  195 
  196 #ifdef USE_ALPHA_PIO
  197 
  198 Bool
  199 xf86EnableIO()
  200 {
  201     alpha_pci_io_enable(1);
  202     return TRUE;
  203 }
  204 
  205 void
  206 xf86DisableIO()
  207 {
  208     alpha_pci_io_enable(0);
  209 }
  210 
  211 #endif                          /* USE_ALPHA_PIO */
  212 
  213 extern int readDense8(void *Base, register unsigned long Offset);
  214 extern int readDense16(void *Base, register unsigned long Offset);
  215 extern int readDense32(void *Base, register unsigned long Offset);
  216 extern void
  217  writeDense8(int Value, void *Base, register unsigned long Offset);
  218 extern void
  219  writeDense16(int Value, void *Base, register unsigned long Offset);
  220 extern void
  221  writeDense32(int Value, void *Base, register unsigned long Offset);
  222 
  223 void (*xf86WriteMmio8) (int Value, void *Base, unsigned long Offset)
  224     = writeDense8;
  225 void (*xf86WriteMmio16) (int Value, void *Base, unsigned long Offset)
  226     = writeDense16;
  227 void (*xf86WriteMmio32) (int Value, void *Base, unsigned long Offset)
  228     = writeDense32;
  229 int (*xf86ReadMmio8) (void *Base, unsigned long Offset)
  230     = readDense8;
  231 int (*xf86ReadMmio16) (void *Base, unsigned long Offset)
  232     = readDense16;
  233 int (*xf86ReadMmio32) (void *Base, unsigned long Offset)
  234     = readDense32;