root/arch/i386/i386/wscons_machdep.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. wscnprobe
  2. wscninit
  3. wscnputc
  4. wscngetc
  5. wscnpollc

    1 /*      $OpenBSD: wscons_machdep.c,v 1.13 2006/06/11 21:00:48 matthieu Exp $ */
    2 
    3 /*
    4  * Copyright (c) 2001 Aaron Campbell
    5  * All rights reserved.
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 1. Redistributions of source code must retain the above copyright
   11  *    notice, this list of conditions and the following disclaimer.
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in the
   14  *    documentation and/or other materials provided with the distribution.
   15  *
   16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   18  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   19  * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT,
   20  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
   22  * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   24  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
   25  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
   26  * THE POSSIBILITY OF SUCH DAMAGE.
   27  */
   28 
   29 #include <sys/param.h>
   30 #include <sys/systm.h>
   31 #include <sys/kernel.h>
   32 #include <sys/conf.h>
   33 #include <sys/device.h>
   34 #include <sys/extent.h>
   35 
   36 #include <machine/bus.h>
   37 
   38 #include <dev/cons.h>
   39 
   40 #include "vga.h"
   41 #include "ega.h"
   42 #include "pcdisplay.h"
   43 #if (NVGA > 0) || (NEGA > 0) || (NPCDISPLAY > 0)
   44 #include <dev/ic/mc6845reg.h>
   45 #include <dev/ic/pcdisplayvar.h>
   46 #if (NVGA > 0)
   47 #include <dev/ic/vgareg.h>
   48 #include <dev/ic/vgavar.h>
   49 #endif
   50 #if (NEGA > 0)
   51 #include <dev/isa/egavar.h>
   52 #endif
   53 #if (NPCDISPLAY > 0)
   54 #include <dev/isa/pcdisplayvar.h>
   55 #endif
   56 #endif
   57 
   58 #include "wsdisplay.h"
   59 #if NWSDISPLAY > 0
   60 #include <dev/wscons/wsdisplayvar.h>
   61 #endif
   62 
   63 #include "pckbc.h"
   64 #if (NPCKBC > 0)
   65 #include <dev/isa/isareg.h>
   66 #include <dev/ic/i8042reg.h>
   67 #include <dev/ic/pckbcvar.h>
   68 #endif
   69 #include "pckbd.h"
   70 #include "ukbd.h"
   71 #if (NPCKBD > 0) || (NUKBD > 0)
   72 #include <dev/wscons/wskbdvar.h>
   73 #endif
   74 #if (NUKBD > 0)
   75 #include <dev/usb/ukbdvar.h>
   76 #endif
   77 
   78 cons_decl(ws);
   79 
   80 void
   81 wscnprobe(struct consdev *cp)
   82 {
   83         int maj;
   84 
   85         /* locate the major number */
   86         for (maj = 0; maj < nchrdev; maj++) {
   87                 if (cdevsw[maj].d_open == wsdisplayopen)
   88                         break;
   89         }
   90 
   91         if (maj == nchrdev) {
   92                 /* we are not in cdevsw[], give up */
   93                 panic("wsdisplay is not in cdevsw[]");
   94         }
   95 
   96         cp->cn_dev = makedev(maj, 0);
   97         cp->cn_pri = CN_INTERNAL;
   98 }
   99 
  100 void
  101 wscninit(struct consdev *cp)
  102 {
  103         static int initted;
  104 
  105         if (initted)
  106                 return;
  107 
  108         initted = 1;
  109 
  110 #if (NVGA > 0) || (NEGA > 0) || (NPCDISPLAY > 0)
  111 #if (NVGA > 0)
  112         if (!vga_cnattach(I386_BUS_SPACE_IO, I386_BUS_SPACE_MEM, -1, 1))
  113                 goto dokbd;
  114 #endif
  115 #if (NEGA > 0)
  116         if (!ega_cnattach(I386_BUS_SPACE_IO, I386_BUS_SPACE_MEM))
  117                 goto dokbd;
  118 #endif
  119 #if (NPCDISPLAY > 0)
  120         if (!pcdisplay_cnattach(I386_BUS_SPACE_IO, I386_BUS_SPACE_MEM))
  121                 goto dokbd;
  122 #endif
  123         if (0) goto dokbd;      /* XXX stupid gcc */
  124 dokbd:
  125 #if (NPCKBC > 0)
  126         if (!pckbc_cnattach(I386_BUS_SPACE_IO, IO_KBD, KBCMDP, PCKBC_KBD_SLOT))
  127                 return;
  128 #endif
  129 #if (NUKBD > 0)
  130         if (!ukbd_cnattach())
  131                 return;
  132 #endif
  133 #endif  /* VGA | EGA | PCDISPLAY */
  134         return;
  135 }
  136 
  137 void
  138 wscnputc(dev_t dev, int i)
  139 {
  140         wsdisplay_cnputc(dev, i);
  141 }
  142 
  143 int
  144 wscngetc(dev_t dev)
  145 {
  146         return (wskbd_cngetc(dev));
  147 }
  148 
  149 void
  150 wscnpollc(dev_t dev, int on)
  151 {
  152         wskbd_cnpollc(dev, on);
  153 }

/* [<][>][^][v][top][bottom][index][help] */