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/ofw/ofbus.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: ofbus.c,v 1.17 2003/01/01 00:10:22 thorpej Exp $       */
    2 
    3 /*
    4  * Copyright (C) 1995, 1996 Wolfgang Solfrank.
    5  * Copyright (C) 1995, 1996 TooLs GmbH.
    6  * All rights reserved.
    7  *
    8  * Redistribution and use in source and binary forms, with or without
    9  * modification, are permitted provided that the following conditions
   10  * are met:
   11  * 1. Redistributions of source code must retain the above copyright
   12  *    notice, this list of conditions and the following disclaimer.
   13  * 2. Redistributions in binary form must reproduce the above copyright
   14  *    notice, this list of conditions and the following disclaimer in the
   15  *    documentation and/or other materials provided with the distribution.
   16  * 3. All advertising materials mentioning features or use of this software
   17  *    must display the following acknowledgement:
   18  *      This product includes software developed by TooLs GmbH.
   19  * 4. The name of TooLs GmbH may not be used to endorse or promote products
   20  *    derived from this software without specific prior written permission.
   21  *
   22  * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR
   23  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   24  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   25  * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   26  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
   27  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
   28  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
   29  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
   30  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
   31  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   32  */
   33 
   34 #include <sys/cdefs.h>
   35 __KERNEL_RCSID(0, "$NetBSD: ofbus.c,v 1.17 2003/01/01 00:10:22 thorpej Exp $");
   36 
   37 #include <sys/param.h>
   38 #include <sys/systm.h>
   39 #include <sys/device.h>
   40 
   41 #include <dev/ofw/openfirm.h>
   42 
   43 int ofbus_match __P((struct device *, struct cfdata *, void *));
   44 void ofbus_attach __P((struct device *, struct device *, void *));
   45 static int ofbus_print __P((void *, const char *));
   46 
   47 CFATTACH_DECL(ofbus, sizeof(struct device),
   48     ofbus_match, ofbus_attach, NULL, NULL);
   49 
   50 static int
   51 ofbus_print(aux, pnp)
   52         void *aux;
   53         const char *pnp;
   54 {
   55         struct ofbus_attach_args *oba = aux;
   56 
   57         if (pnp)
   58                 aprint_normal("%s at %s", oba->oba_ofname, pnp);
   59         else
   60                 aprint_normal(" (%s)", oba->oba_ofname);
   61         return UNCONF;
   62 }
   63 
   64 int
   65 ofbus_match(parent, cf, aux)
   66         struct device *parent;
   67         struct cfdata *cf;
   68         void *aux;
   69 {
   70         struct ofbus_attach_args *oba = aux;
   71 
   72         if (strcmp(oba->oba_busname, "ofw"))
   73                 return (0);
   74         if (!OF_child(oba->oba_phandle))
   75                 return (0);
   76         return (1);
   77 }
   78 
   79 void
   80 ofbus_attach(parent, dev, aux)
   81         struct device *parent, *dev;
   82         void *aux;
   83 {
   84         struct ofbus_attach_args *oba = aux;
   85         struct ofbus_attach_args oba2;
   86         char name[64];
   87         int child, units;
   88 
   89         printf("\n");
   90 
   91         /*
   92          * This is a hack to make the probe work on the scsi (and ide) bus.
   93          * YES, I THINK IT IS A BUG IN THE OPENFIRMWARE TO NOT PROBE ALL
   94          * DEVICES ON THESE BUSSES.
   95          */
   96         units = 1;
   97         name[0] = 0;
   98         if (OF_getprop(oba->oba_phandle, "name", name, sizeof name) > 0) {
   99                 if (!strcmp(name, "scsi"))
  100                         units = 7; /* What about wide or hostid != 7?   XXX */
  101                 else if (!strcmp(name, "ide"))
  102                         units = 2;
  103         }
  104 
  105         for (child = OF_child(oba->oba_phandle); child != 0;
  106              child = OF_peer(child)) {
  107                 oba2.oba_busname = "ofw";
  108                 of_packagename(child, name, sizeof name);
  109                 oba2.oba_phandle = child;
  110                 for (oba2.oba_unit = 0; oba2.oba_unit < units;
  111                      oba2.oba_unit++) {
  112                         if (units > 1) {
  113                                 sprintf(oba2.oba_ofname, "%s@%d", name,
  114                                         oba2.oba_unit);
  115                         } else {
  116                                 strcpy(oba2.oba_ofname, name);
  117                         }
  118                         config_found(dev, &oba2, ofbus_print);
  119                 }
  120         }
  121 }

Cache object: a7587166161016d8cd37bda3bfe1506e


[ 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.