[BACK]Return to eisa_machdep.c CVS log [TXT][DIR] Up to [local] / sys / arch / i386 / eisa

Annotation of sys/arch/i386/eisa/eisa_machdep.c, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: eisa_machdep.c,v 1.10 2006/09/19 11:06:33 jsg Exp $   */
                      2: /*     $NetBSD: eisa_machdep.c,v 1.10.22.2 2000/06/25 19:36:58 sommerfeld Exp $        */
                      3:
                      4: /*-
                      5:  * Copyright (c) 1997 The NetBSD Foundation, Inc.
                      6:  * All rights reserved.
                      7:  *
                      8:  * This code is derived from software contributed to The NetBSD Foundation
                      9:  * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
                     10:  * NASA Ames Research Center.
                     11:  *
                     12:  * Redistribution and use in source and binary forms, with or without
                     13:  * modification, are permitted provided that the following conditions
                     14:  * are met:
                     15:  * 1. Redistributions of source code must retain the above copyright
                     16:  *    notice, this list of conditions and the following disclaimer.
                     17:  * 2. Redistributions in binary form must reproduce the above copyright
                     18:  *    notice, this list of conditions and the following disclaimer in the
                     19:  *    documentation and/or other materials provided with the distribution.
                     20:  * 3. All advertising materials mentioning features or use of this software
                     21:  *    must display the following acknowledgement:
                     22:  *     This product includes software developed by the NetBSD
                     23:  *     Foundation, Inc. and its contributors.
                     24:  * 4. Neither the name of The NetBSD Foundation nor the names of its
                     25:  *    contributors may be used to endorse or promote products derived
                     26:  *    from this software without specific prior written permission.
                     27:  *
                     28:  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
                     29:  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
                     30:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
                     31:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
                     32:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
                     33:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     34:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     35:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     36:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     37:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     38:  * POSSIBILITY OF SUCH DAMAGE.
                     39:  */
                     40:
                     41: /*
                     42:  * Copyright (c) 1996 Christopher G. Demetriou.  All rights reserved.
                     43:  *
                     44:  * Redistribution and use in source and binary forms, with or without
                     45:  * modification, are permitted provided that the following conditions
                     46:  * are met:
                     47:  * 1. Redistributions of source code must retain the above copyright
                     48:  *    notice, this list of conditions and the following disclaimer.
                     49:  * 2. Redistributions in binary form must reproduce the above copyright
                     50:  *    notice, this list of conditions and the following disclaimer in the
                     51:  *    documentation and/or other materials provided with the distribution.
                     52:  * 3. All advertising materials mentioning features or use of this software
                     53:  *    must display the following acknowledgement:
                     54:  *      This product includes software developed by Christopher G. Demetriou
                     55:  *     for the NetBSD Project.
                     56:  * 4. The name of the author may not be used to endorse or promote products
                     57:  *    derived from this software without specific prior written permission
                     58:  *
                     59:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     60:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     61:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     62:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     63:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     64:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     65:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     66:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     67:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     68:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     69:  */
                     70:
                     71: /*
                     72:  * Machine-specific functions for EISA autoconfiguration.
                     73:  */
                     74:
                     75: #include <sys/types.h>
                     76: #include <sys/param.h>
                     77: #include <sys/time.h>
                     78: #include <sys/systm.h>
                     79: #include <sys/errno.h>
                     80: #include <sys/device.h>
                     81:
                     82: #define _I386_BUS_DMA_PRIVATE
                     83: #include <machine/bus.h>
                     84: #include <machine/i8259.h>
                     85:
                     86: #include <dev/isa/isavar.h>
                     87: #include <dev/eisa/eisavar.h>
                     88:
                     89: /*
                     90:  * EISA doesn't have any special needs; just use the generic versions
                     91:  * of these funcions.
                     92:  */
                     93: struct i386_bus_dma_tag eisa_bus_dma_tag = {
                     94:        NULL,                   /* _cookie */
                     95:        _bus_dmamap_create,
                     96:        _bus_dmamap_destroy,
                     97:        _bus_dmamap_load,
                     98:        _bus_dmamap_load_mbuf,
                     99:        _bus_dmamap_load_uio,
                    100:        _bus_dmamap_load_raw,
                    101:        _bus_dmamap_unload,
                    102:        NULL,                   /* _dmamap_sync */
                    103:        _bus_dmamem_alloc,
                    104:        _bus_dmamem_free,
                    105:        _bus_dmamem_map,
                    106:        _bus_dmamem_unmap,
                    107:        _bus_dmamem_mmap,
                    108: };
                    109:
                    110: void
                    111: eisa_attach_hook(struct device *parent, struct device *self,
                    112:     struct eisabus_attach_args *eba)
                    113: {
                    114:        /* Nothing to do */
                    115: }
                    116:
                    117: int
                    118: eisa_maxslots(eisa_chipset_tag_t ec)
                    119: {
                    120:        /*
                    121:         * Always try 16 slots.
                    122:         */
                    123:        return (16);
                    124: }
                    125:
                    126: int
                    127: eisa_intr_map(eisa_chipset_tag_t ec, u_int irq, eisa_intr_handle_t *ihp)
                    128: {
                    129: #if NIOAPIC > 0
                    130:        struct mp_intr_map *mip;
                    131: #endif
                    132:
                    133:        if (irq >= ICU_LEN) {
                    134:                printf("eisa_intr_map: bad IRQ %d\n", irq);
                    135:                *ihp = -1;
                    136:                return (1);
                    137:        }
                    138:        if (irq == 2) {
                    139:                printf("eisa_intr_map: changed IRQ 2 to IRQ 9\n");
                    140:                irq = 9;
                    141:        }
                    142:
                    143: #if NIOAPIC > 0
                    144:        if (mp_busses != NULL) {
                    145:                /*
                    146:                 * Assumes 1:1 mapping between PCI bus numbers and
                    147:                 * the numbers given by the MP bios.
                    148:                 * XXX Is this a valid assumption?
                    149:                 */
                    150:
                    151:                for (mip = mp_busses[bus].mb_intrs; mip != NULL;
                    152:                    mip = mip->next) {
                    153:                        if (mip->bus_pin == irq) {
                    154:                                *ihp = mip->ioapic_ih | irq;
                    155:                                return (0);
                    156:                        }
                    157:                }
                    158:                if (mip == NULL)
                    159:                        printf("eisa_intr_map: no MP mapping found\n");
                    160:        }
                    161: #endif
                    162:
                    163:        *ihp = irq;
                    164:        return (0);
                    165: }
                    166:
                    167: const char *
                    168: eisa_intr_string(eisa_chipset_tag_t ec, eisa_intr_handle_t ih)
                    169: {
                    170:        static char irqstr[64];
                    171:
                    172:        if (ih == 0 || (ih & 0xff) >= ICU_LEN || ih == 2)
                    173:                panic("eisa_intr_string: bogus handle 0x%x", ih);
                    174:
                    175: #if NIOAPIC > 0
                    176:        if (ih & APIC_INT_VIA_APIC) {
                    177:                snprintf(irqstr, sizeof irqstr, "apic %d int %d (irq %d)",
                    178:                    APIC_IRQ_APIC(ih), APIC_IRQ_PIN(ih), ih & 0xff);
                    179:                return (irqstr);
                    180:        }
                    181: #endif
                    182:
                    183:        snprintf(irqstr, sizeof irqstr, "irq %d", ih);
                    184:        return (irqstr);
                    185:
                    186: }
                    187:
                    188: void *
                    189: eisa_intr_establish(eisa_chipset_tag_t ec, eisa_intr_handle_t ih, int type,
                    190:     int level, int (*func)(void *), void *arg, char *what)
                    191: {
                    192: #if NIOAPIC > 0
                    193:        if (ih != -1) {
                    194:                if (ih != -1 && (ih & APIC_INT_VIA_APIC)) {
                    195:                        return (apic_intr_establish(ih, type, level, func, arg,
                    196:                            what));
                    197:                }
                    198:        }
                    199: #endif
                    200:        if (ih == 0 || ih >= ICU_LEN || ih == 2)
                    201:                panic("eisa_intr_establish: bogus handle 0x%x", ih);
                    202:
                    203:        return (isa_intr_establish(NULL, ih, type, level, func, arg, what));
                    204: }
                    205:
                    206: void
                    207: eisa_intr_disestablish(eisa_chipset_tag_t ec, void *cookie)
                    208: {
                    209:        return (isa_intr_disestablish(NULL, cookie));
                    210: }

CVSweb