The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/bi/bi.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: bi.c,v 1.18 2003/01/01 00:10:16 thorpej Exp $ */
    2 /*
    3  * Copyright (c) 1996 Ludd, University of Lule}, Sweden.
    4  * All rights reserved.
    5  *
    6  * Redistribution and use in source and binary forms, with or without
    7  * modification, are permitted provided that the following conditions
    8  * are met:
    9  * 1. Redistributions of source code must retain the above copyright
   10  *    notice, this list of conditions and the following disclaimer.
   11  * 2. Redistributions in binary form must reproduce the above copyright
   12  *    notice, this list of conditions and the following disclaimer in the
   13  *    documentation and/or other materials provided with the distribution.
   14  * 3. All advertising materials mentioning features or use of this software
   15  *    must display the following acknowledgement:
   16  *      This product includes software developed at Ludd, University of 
   17  *      Lule}, Sweden and its contributors.
   18  * 4. The name of the author may not be used to endorse or promote products
   19  *    derived from this software without specific prior written permission
   20  *
   21  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   22  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   23  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   24  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   26  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   30  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   31  */
   32 
   33 
   34 
   35 /*
   36  * VAXBI specific routines.
   37  */
   38 /*
   39  * TODO
   40  *   handle BIbus errors more gracefully.
   41  */
   42 
   43 #include <sys/cdefs.h>
   44 __KERNEL_RCSID(0, "$NetBSD: bi.c,v 1.18 2003/01/01 00:10:16 thorpej Exp $");
   45 
   46 #include <sys/param.h>
   47 #include <sys/systm.h>
   48 
   49 #include <machine/bus.h>
   50 #include <machine/cpu.h>
   51 
   52 #include <dev/bi/bireg.h>
   53 #include <dev/bi/bivar.h>
   54 
   55 static int bi_print __P((void *, const char *));
   56 
   57 struct bi_list bi_list[] = {
   58         {BIDT_MS820, DT_HAVDRV, "ms820"},
   59         {BIDT_DRB32, DT_UNSUPP, "drb32"},
   60         {BIDT_DWBUA, DT_HAVDRV|DT_ADAPT, "dwbua"},
   61         {BIDT_KLESI, DT_HAVDRV|DT_ADAPT, "klesi"},
   62         {BIDT_KA820, DT_HAVDRV, "ka820"},
   63         {BIDT_DB88,  DT_HAVDRV|DT_QUIET, "db88"},
   64         {BIDT_CIBCA, DT_UNSUPP, "cibca"},
   65         {BIDT_DMB32, DT_UNSUPP, "dmb32"},
   66         {BIDT_CIBCI, DT_UNSUPP, "cibci"},
   67         {BIDT_KA800, DT_UNSUPP, "ka800"},
   68         {BIDT_KDB50, DT_HAVDRV|DT_VEC, "kdb50"},
   69         {BIDT_DWMBA, DT_HAVDRV|DT_QUIET, "dwmba"},
   70         {BIDT_KFBTA, DT_UNSUPP, "kfbta"},
   71         {BIDT_DEBNK, DT_HAVDRV|DT_VEC, "debnk"},
   72         {BIDT_DEBNA, DT_HAVDRV|DT_VEC, "debna"},
   73         {0,0,0}
   74 };
   75 
   76 int
   77 bi_print(aux, name)
   78         void *aux;
   79         const char *name;
   80 {
   81         struct bi_attach_args *ba = aux;
   82         struct bi_list *bl;
   83         u_int16_t nr;
   84 
   85         nr = bus_space_read_2(ba->ba_iot, ba->ba_ioh, 0);
   86         for (bl = &bi_list[0]; bl->bl_nr; bl++)
   87                 if (bl->bl_nr == nr)
   88                         break;
   89 
   90         if (name) {
   91                 if (bl->bl_nr == 0)
   92                         aprint_normal("unknown device 0x%x", nr);
   93                 else
   94                         aprint_normal(bl->bl_name);
   95                 aprint_normal(" at %s", name);
   96         }
   97         aprint_normal(" node %d", ba->ba_nodenr);
   98         if (bl->bl_havedriver & DT_VEC)
   99                 aprint_normal(" vec %o", ba->ba_ivec & 511);
  100 #ifdef DEBUG
  101         if (bus_space_read_4(ba->ba_iot, ba->ba_ioh, BIREG_SADR) &&
  102             bus_space_read_4(ba->ba_iot, ba->ba_ioh, BIREG_EADR))
  103                 aprint_debug(" [sadr %x eadr %x]",
  104                     bus_space_read_4(ba->ba_iot, ba->ba_ioh, BIREG_SADR),
  105                     bus_space_read_4(ba->ba_iot, ba->ba_ioh, BIREG_EADR));
  106 #endif
  107         if (bl->bl_havedriver & DT_QUIET)
  108                 aprint_normal("\n");
  109         return bl->bl_havedriver & DT_QUIET ? QUIET :
  110             bl->bl_havedriver & DT_HAVDRV ? UNCONF : UNSUPP;
  111 }
  112 
  113 void
  114 bi_attach(sc)
  115         struct bi_softc *sc;
  116 {
  117         struct bi_attach_args ba;
  118         int nodenr;
  119 
  120         printf("\n");
  121 
  122         ba.ba_iot = sc->sc_iot;
  123         ba.ba_busnr = sc->sc_busnr;
  124         ba.ba_dmat = sc->sc_dmat;
  125         ba.ba_intcpu = sc->sc_intcpu;
  126         ba.ba_icookie = sc;
  127         /*
  128          * Interrupt numbers. Assign them as described in 
  129          * VAX 8800 system maintenance manual; this means like nexus
  130          * adapters have them assigned.
  131          * XXX - must address Unibus adapters.
  132          */
  133         for (nodenr = 0; nodenr < NNODEBI; nodenr++) {
  134                 if (bus_space_map(sc->sc_iot, sc->sc_addr + BI_NODE(nodenr),
  135                     BI_NODESIZE, 0, &ba.ba_ioh)) {
  136                         printf("bi_attach: bus_space_map failed, node %d\n", 
  137                             nodenr);
  138                         return;
  139                 }
  140                 if (badaddr((caddr_t)ba.ba_ioh, 4) ||
  141                     (bus_space_read_2(ba.ba_iot, ba.ba_ioh, 0) == 0)) {
  142                         bus_space_unmap(ba.ba_iot, ba.ba_ioh, BI_NODESIZE);
  143                         continue;
  144                 }
  145                 ba.ba_nodenr = nodenr;
  146                 ba.ba_ivec = sc->sc_lastiv + 64 + 4 * nodenr; /* all on spl5 */
  147                 config_found(&sc->sc_dev, &ba, bi_print);
  148         }
  149 }

Cache object: 08a4ad3be998e51e2a6466d43d218a7a


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.