Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/isa Provide some defaults. From Felix Deichmann.



details:   https://anonhg.NetBSD.org/src/rev/77cb40289f91
branches:  trunk
changeset: 346193:77cb40289f91
user:      skrll <skrll%NetBSD.org@localhost>
date:      Thu Jun 30 20:39:54 2016 +0000

description:
Provide some defaults.  From Felix Deichmann.

diffstat:

 sys/dev/isa/slhci_isa.c |  33 +++++++++++++++++++++++++++++----
 1 files changed, 29 insertions(+), 4 deletions(-)

diffs (71 lines):

diff -r efc04473e1c1 -r 77cb40289f91 sys/dev/isa/slhci_isa.c
--- a/sys/dev/isa/slhci_isa.c   Thu Jun 30 18:43:43 2016 +0000
+++ b/sys/dev/isa/slhci_isa.c   Thu Jun 30 20:39:54 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: slhci_isa.c,v 1.13 2016/04/23 10:15:31 skrll Exp $     */
+/*     $NetBSD: slhci_isa.c,v 1.14 2016/06/30 20:39:54 skrll Exp $     */
 
 /*
  * Copyright (c) 2001 Kiyoshi Ikehara. All rights reserved.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: slhci_isa.c,v 1.13 2016/04/23 10:15:31 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: slhci_isa.c,v 1.14 2016/06/30 20:39:54 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -74,6 +74,22 @@
        int result = 0;
        uint8_t sltype;
 
+       if (ia->ia_nio < 1)
+               goto out;
+       if (ia->ia_nirq < 1)
+               goto out;
+
+       if (ISA_DIRECT_CONFIG(ia))
+               goto out;
+
+       /* Disallow wildcarded i/o address. */
+       if (ia->ia_io[0].ir_addr == ISA_UNKNOWN_PORT)
+               goto out;
+
+       /* Don't allow wildcarded IRQ. */
+       if (ia->ia_irq[0].ir_irq == ISA_UNKNOWN_IRQ)
+               goto out;
+
        if (bus_space_map(iot, ia->ia_io[0].ir_addr, SL11_PORTSIZE, 0, &ioh))
                goto out;
 
@@ -85,6 +101,15 @@
        bus_space_unmap(iot, ioh, SL11_PORTSIZE);
 
  out:
+       if (result) {
+               ia->ia_nio = 1;
+               ia->ia_io[0].ir_size = SL11_PORTSIZE;
+
+               ia->ia_nirq = 1;
+
+               ia->ia_niomem = 0;
+               ia->ia_ndrq = 0;
+       }
        return (result);
 }
 
@@ -109,11 +134,11 @@
        }
 
        /* Initialize sc XXX power value unconfirmed */
-       slhci_preinit(sc, NULL, iot, ioh, 30, SL11_IDX_DATA);
+       slhci_preinit(sc, NULL, iot, ioh, 500, SL11_IDX_DATA);
 
        /* Establish the interrupt handler */
        isc->sc_ih = isa_intr_establish(ia->ia_ic, ia->ia_irq[0].ir_irq,
-                                       IST_EDGE, IPL_USB, slhci_intr, sc);
+           IST_EDGE, IPL_USB, slhci_intr, sc);
        if (isc->sc_ih == NULL) {
                printf("%s: can't establish interrupt\n", SC_NAME(sc));
                return;



Home | Main Index | Thread Index | Old Index