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/isapnp/if_cs_isapnp.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: if_cs_isapnp.c,v 1.5 2002/10/02 16:34:00 thorpej Exp $ */
    2 
    3 /*-
    4  * Copyright (c)2001 YAMAMOTO Takashi,
    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 AND CONTRIBUTORS ``AS IS'' AND
   17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   26  * SUCH DAMAGE.
   27  */
   28 
   29 #include <sys/cdefs.h>
   30 __KERNEL_RCSID(0, "$NetBSD: if_cs_isapnp.c,v 1.5 2002/10/02 16:34:00 thorpej Exp $");
   31 
   32 #include <sys/param.h>
   33 #include <sys/systm.h>
   34 #include <sys/device.h>
   35 #include <sys/socket.h> 
   36 
   37 #include "rnd.h"
   38 #if NRND > 0
   39 #include <sys/rnd.h>
   40 #endif
   41 
   42 #include <net/if.h>
   43 #include <net/if_ether.h>
   44 #include <net/if_media.h>
   45 
   46 #include <machine/bus.h>
   47 #include <machine/intr.h>
   48 
   49 #include <dev/isa/isavar.h>
   50 
   51 #include <dev/ic/cs89x0reg.h>
   52 #include <dev/ic/cs89x0var.h>
   53 
   54 #include <dev/isapnp/isapnpreg.h>
   55 #include <dev/isapnp/isapnpvar.h>
   56 #include <dev/isapnp/isapnpdevs.h>
   57 
   58 #define DEVNAME(sc) (sc)->sc_dev.dv_xname
   59 
   60 int cs_isapnp_match(struct device *, struct cfdata *, void *);
   61 void cs_isapnp_attach(struct device *, struct device *, void *);
   62 
   63 CFATTACH_DECL(cs_isapnp, sizeof(struct cs_softc),
   64     cs_isapnp_match, cs_isapnp_attach, NULL, NULL);
   65 
   66 int
   67 cs_isapnp_match(parent, match, aux)
   68         struct device *parent;
   69         struct cfdata *match;
   70         void *aux;
   71 {
   72         int pri, variant;
   73 
   74         pri = isapnp_devmatch(aux, &isapnp_cs_devinfo, &variant);
   75         if (pri && variant > 0)
   76                 pri = 0;
   77         return pri;
   78 }
   79 
   80 void
   81 cs_isapnp_attach(parent, self, aux)
   82         struct device *parent, *self;
   83         void *aux;
   84 {
   85         struct cs_softc *sc = (void *)self;
   86         struct isapnp_attach_args *ipa = aux;
   87 #ifdef notyet
   88         struct cs_softc_isa *isc = (void *)sc;
   89         int i;
   90 #endif
   91 
   92         printf("\n");
   93 
   94         if (ipa->ipa_nio != 1 || ipa->ipa_nirq != 1 || ipa->ipa_ndrq) {
   95                 printf("%s: unexpected resource requirements\n",
   96                         DEVNAME(sc));
   97                 return;
   98         }
   99 
  100         if (ipa->ipa_io[0].length != CS8900_IOSIZE) {
  101                 printf("%s: unexpected io size\n", DEVNAME(sc));
  102                 return;
  103         }
  104 
  105         if (isapnp_config(ipa->ipa_iot, ipa->ipa_memt, ipa)) {
  106                 printf("%s: unable to allocate resources\n", DEVNAME(sc));
  107                 return;
  108         }
  109 
  110         printf("%s: %s %s\n", DEVNAME(sc), ipa->ipa_devident,
  111                 ipa->ipa_devclass);
  112 
  113 #ifdef notyet
  114 #ifdef DEBUG
  115         printf("%s: nio=%u, nmem=%u, nmem32=%u, ndrq=%u, nirq=%u\n", DEVNAME(sc), 
  116                 ipa->ipa_nio, ipa->ipa_nmem, ipa->ipa_nmem32, ipa->ipa_ndrq, ipa->ipa_nirq);
  117 #endif
  118         isc->sc_ic = ipa->ipa_ic;
  119         isc->sc_drq = ISACF_DRQ_DEFAULT;
  120 #endif
  121         sc->sc_iot = ipa->ipa_iot;
  122         sc->sc_ioh = ipa->ipa_io[0].h;
  123         sc->sc_irq = ipa->ipa_irq[0].num;
  124 
  125 #ifdef notyet
  126         for (i = 0; i < ipa->ipa_nmem; i++) {
  127                 if (ipa->ipa_mem[i].length == CS8900_MEMSIZE) {
  128 #if 0
  129                         u_int16_t id;
  130 
  131                         id = CS_READ_PACKET_PAGE_MEM(sc, PKTPG_EISA_NUM);
  132                         if (id != EISA_NUM_CRYSTAL) {
  133                                 printf("%s: unexpected id(%u)\n",
  134                                          DEVNAME(sc), id);
  135                                 continue;
  136                         }
  137                         printf("%s: correct id(%u) from mem=%u\n",
  138                                  DEVNAME(sc), id, (u_int)ipa->ipa_mem[i].h);
  139 #endif
  140                         
  141                         sc->sc_memt = ipa->ipa_memt;
  142                         sc->sc_memh = ipa->ipa_mem[i].h;
  143                         sc->sc_pktpgaddr = ipa->ipa_mem[i].base;
  144                         sc->sc_cfgflags |= CFGFLG_MEM_MODE;
  145                         printf("%s: memory mode\n", DEVNAME(sc));
  146                         break;
  147                 }
  148         }
  149 #endif
  150 
  151         sc->sc_ih = isa_intr_establish(ipa->ipa_ic, ipa->ipa_irq[0].num,
  152                 ipa->ipa_irq[0].type, IPL_NET, cs_intr, sc);
  153         if (sc->sc_ih == 0) {
  154                 printf("%s: unable to establish interrupt\n",
  155                         DEVNAME(sc));
  156                 goto fail;
  157         }
  158 
  159         if (cs_attach(sc, 0, 0, 0, 0)) {
  160                 printf("%s: unable to attach\n", DEVNAME(sc));
  161                 goto fail;
  162         }
  163 
  164         return;
  165 
  166 fail:
  167         if (sc->sc_ih)
  168                 isa_intr_disestablish(ipa->ipa_ic, sc->sc_ih);
  169         isapnp_unconfig(ipa->ipa_iot, ipa->ipa_memt, ipa);
  170 }

Cache object: 4b165b42826e0da8db1cf242f5f8eac7


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