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/isa/fdc_isa.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: fdc_isa.c,v 1.10 2003/09/25 19:06:19 mycroft Exp $     */
    2 
    3 /*-
    4  * Copyright (c) 1998 The NetBSD Foundation, Inc.
    5  * All rights reserved.
    6  *
    7  * This code is derived from software contributed to The NetBSD Foundation
    8  * by Charles M. Hannum.
    9  *
   10  * Redistribution and use in source and binary forms, with or without
   11  * modification, are permitted provided that the following conditions
   12  * are met:
   13  * 1. Redistributions of source code must retain the above copyright
   14  *    notice, this list of conditions and the following disclaimer.
   15  * 2. Redistributions in binary form must reproduce the above copyright
   16  *    notice, this list of conditions and the following disclaimer in the
   17  *    documentation and/or other materials provided with the distribution.
   18  * 3. All advertising materials mentioning features or use of this software
   19  *    must display the following acknowledgement:
   20  *        This product includes software developed by the NetBSD
   21  *        Foundation, Inc. and its contributors.
   22  * 4. Neither the name of The NetBSD Foundation nor the names of its
   23  *    contributors may be used to endorse or promote products derived
   24  *    from this software without specific prior written permission.
   25  *
   26  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   27  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   28  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   29  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   30  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   31  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   32  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   33  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   34  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   35  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   36  * POSSIBILITY OF SUCH DAMAGE.
   37  */
   38 
   39 /*-
   40  * Copyright (c) 1990 The Regents of the University of California.
   41  * All rights reserved.
   42  *
   43  * This code is derived from software contributed to Berkeley by
   44  * Don Ahn.
   45  *
   46  * Redistribution and use in source and binary forms, with or without
   47  * modification, are permitted provided that the following conditions
   48  * are met:
   49  * 1. Redistributions of source code must retain the above copyright
   50  *    notice, this list of conditions and the following disclaimer.
   51  * 2. Redistributions in binary form must reproduce the above copyright
   52  *    notice, this list of conditions and the following disclaimer in the
   53  *    documentation and/or other materials provided with the distribution.
   54  * 3. Neither the name of the University nor the names of its contributors
   55  *    may be used to endorse or promote products derived from this software
   56  *    without specific prior written permission.
   57  *
   58  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   59  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   60  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   61  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   62  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   63  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   64  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   65  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   66  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   67  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   68  * SUCH DAMAGE.
   69  *
   70  *      @(#)fd.c        7.4 (Berkeley) 5/25/91
   71  */
   72 
   73 #include <sys/cdefs.h>
   74 __KERNEL_RCSID(0, "$NetBSD: fdc_isa.c,v 1.10 2003/09/25 19:06:19 mycroft Exp $");
   75 
   76 #include "rnd.h"
   77 
   78 #include <sys/param.h>
   79 #include <sys/systm.h>
   80 #include <sys/callout.h>
   81 #include <sys/device.h>
   82 #include <sys/buf.h>
   83 #include <sys/queue.h>
   84 #if NRND > 0
   85 #include <sys/rnd.h>
   86 #endif
   87 
   88 #include <machine/bus.h>
   89 #include <machine/intr.h>
   90 
   91 #include <dev/isa/isavar.h>
   92 #include <dev/isa/isadmavar.h>
   93 
   94 #include <dev/isa/fdreg.h>
   95 #include <dev/isa/fdcvar.h>
   96 
   97 int     fdc_isa_probe(struct device *, struct cfdata *, void *);
   98 void    fdc_isa_attach(struct device *, struct device *, void *);
   99 
  100 struct fdc_isa_softc {
  101         struct fdc_softc sc_fdc;        /* base fdc device */
  102 
  103         bus_space_handle_t sc_baseioh;  /* base I/O handle */
  104 };
  105 
  106 CFATTACH_DECL(fdc_isa, sizeof(struct fdc_isa_softc),
  107     fdc_isa_probe, fdc_isa_attach, NULL, NULL);
  108 
  109 #ifdef NEWCONFIG
  110 void    fdc_isa_forceintr(void *);
  111 #endif
  112 
  113 int
  114 fdc_isa_probe(struct device *parent,
  115     struct cfdata *match,
  116     void *aux)
  117 {
  118         struct isa_attach_args *ia = aux;
  119         bus_space_tag_t iot;
  120         bus_space_handle_t ioh, ctl_ioh, base_ioh;
  121         int rv, iobase;
  122 
  123         iot = ia->ia_iot;
  124         rv = 0;
  125 
  126         if (ia->ia_nio < 1)
  127                 return (0);
  128         if (ia->ia_nirq < 1)
  129                 return (0);
  130         if (ia->ia_ndrq < 1)
  131                 return (0);
  132 
  133         if (ISA_DIRECT_CONFIG(ia))
  134                 return (0);
  135 
  136         /* Disallow wildcarded I/O addresses. */
  137         if (ia->ia_io[0].ir_addr == ISACF_PORT_DEFAULT)
  138                 return (0);
  139 
  140         /* Don't allow wildcarded IRQ/DRQ. */
  141         if (ia->ia_irq[0].ir_irq == ISACF_IRQ_DEFAULT)
  142                 return (0);
  143 
  144         if (ia->ia_drq[0].ir_drq == ISACF_DRQ_DEFAULT)
  145                 return (0);
  146 
  147         /* Map the I/O space. */
  148         iobase = ia->ia_io[0].ir_addr;
  149         if (bus_space_map(iot, iobase, 6 /* FDC_NPORT */, 0, &base_ioh))
  150                 return (0);
  151 
  152         if (bus_space_subregion(iot, base_ioh, 2, 4, &ioh)) {
  153                 bus_space_unmap(iot, base_ioh, 6);
  154                 return (0);
  155         }
  156 
  157         if (bus_space_map(iot, iobase + fdctl + 2, 1, 0, &ctl_ioh)) {
  158                 bus_space_unmap(iot, base_ioh, 6);
  159                 return (0);
  160         }
  161 
  162         /* Not needed for the rest of the probe. */
  163         bus_space_unmap(iot, ctl_ioh, 1);
  164 
  165         /* reset */
  166         bus_space_write_1(iot, ioh, fdout, 0);
  167         delay(100);
  168         bus_space_write_1(iot, ioh, fdout, FDO_FRST);
  169 
  170         /* see if it can handle a command */
  171         if (out_fdc(iot, ioh, NE7CMD_SPECIFY) < 0)
  172                 goto out;
  173         out_fdc(iot, ioh, 0xdf);
  174         out_fdc(iot, ioh, 2);
  175 
  176         rv = 1;
  177         ia->ia_nio = 1;
  178         ia->ia_io[0].ir_size = FDC_NPORT;
  179 
  180         ia->ia_nirq = 1;
  181         ia->ia_ndrq = 1;
  182 
  183         ia->ia_niomem = 0;
  184 
  185  out:
  186         bus_space_unmap(iot, base_ioh, 6 /* FDC_NPORT */);
  187         return (rv);
  188 }
  189 
  190 void
  191 fdc_isa_attach(struct device *parent,
  192     struct device *self,
  193     void *aux)
  194 {
  195         struct fdc_softc *fdc = (void *) self;
  196         struct fdc_isa_softc *isc = (void *) self;
  197         struct isa_attach_args *ia = aux;
  198 
  199         printf("\n");
  200 
  201         fdc->sc_iot = ia->ia_iot;
  202         fdc->sc_ic = ia->ia_ic;
  203         fdc->sc_drq = ia->ia_drq[0].ir_drq;
  204 
  205         if (bus_space_map(fdc->sc_iot, ia->ia_io[0].ir_addr,
  206             6 /* FDC_NPORT */, 0, &isc->sc_baseioh)) {
  207                 printf("%s: unable to map I/O space\n", fdc->sc_dev.dv_xname);
  208                 return;
  209         }
  210 
  211         if (bus_space_subregion(fdc->sc_iot, isc->sc_baseioh, 2, 4,
  212             &fdc->sc_ioh)) {
  213                 printf("%s: unable to subregion I/O space\n",
  214                     fdc->sc_dev.dv_xname);
  215                 return;
  216         }
  217 
  218         if (bus_space_map(fdc->sc_iot, ia->ia_io[0].ir_addr + fdctl + 2, 1, 0,
  219             &fdc->sc_fdctlioh)) {
  220                 printf("%s: unable to map CTL I/O space\n",
  221                     fdc->sc_dev.dv_xname);
  222                 return;
  223         }
  224 
  225         fdc->sc_ih = isa_intr_establish(ia->ia_ic, ia->ia_irq[0].ir_irq,
  226             IST_EDGE, IPL_BIO, fdcintr, fdc);
  227 
  228         fdcattach(fdc);
  229 }

Cache object: 88c10e86e925a41e92b590e8902723d7


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