[BACK]Return to isavar.h CVS log [TXT][DIR] Up to [local] / sys / dev / isa

Annotation of sys/dev/isa/isavar.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: isavar.h,v 1.52 2007/01/06 20:17:43 miod Exp $        */
                      2: /*     $NetBSD: isavar.h,v 1.26 1997/06/06 23:43:57 thorpej 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 Christos Zoulas.  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 Christos Zoulas.
                     55:  * 4. The name of the author may not be used to endorse or promote products
                     56:  *    derived from this software without specific prior written permission.
                     57:  *
                     58:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     59:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     60:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     61:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     62:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     63:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     64:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     65:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     66:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     67:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     68:  */
                     69:
                     70: /*
                     71:  * Copyright (c) 1995 Chris G. Demetriou
                     72:  * Copyright (c) 1992 Berkeley Software Design, Inc.
                     73:  * All rights reserved.
                     74:  *
                     75:  * Redistribution and use in source and binary forms, with or without
                     76:  * modification, are permitted provided that the following conditions
                     77:  * are met:
                     78:  * 1. Redistributions of source code must retain the above copyright
                     79:  *    notice, this list of conditions and the following disclaimer.
                     80:  * 2. Redistributions in binary form must reproduce the above copyright
                     81:  *    notice, this list of conditions and the following disclaimer in the
                     82:  *    documentation and/or other materials provided with the distribution.
                     83:  * 3. All advertising materials mentioning features or use of this software
                     84:  *    must display the following acknowledgement:
                     85:  *     This product includes software developed by Berkeley Software
                     86:  *     Design, Inc.
                     87:  * 4. The name of Berkeley Software Design must not be used to endorse
                     88:  *    or promote products derived from this software without specific
                     89:  *    prior written permission.
                     90:  *
                     91:  * THIS SOFTWARE IS PROVIDED BY BERKELEY SOFTWARE DESIGN, INC. ``AS IS'' AND
                     92:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     93:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     94:  * ARE DISCLAIMED.  IN NO EVENT SHALL BERKELEY SOFTWARE DESIGN, INC. BE LIABLE
                     95:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     96:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     97:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     98:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     99:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                    100:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                    101:  * SUCH DAMAGE.
                    102:  *
                    103:  *     BSDI Id: isavar.h,v 1.5 1992/12/01 18:06:00 karels Exp
                    104:  */
                    105:
                    106: #ifndef _DEV_ISA_ISAVAR_H_
                    107: #define        _DEV_ISA_ISAVAR_H_
                    108:
                    109: /*
                    110:  * Definitions for ISA and ISA PnP autoconfiguration.
                    111:  */
                    112:
                    113: #include <sys/queue.h>
                    114: #include <machine/bus.h>
                    115:
                    116: #ifndef NISADMA
                    117: #include "isadma.h"
                    118: #endif
                    119:
                    120: /*
                    121:  * Structures and definitions needed by the machine-dependent header.
                    122:  */
                    123: struct isabus_attach_args;
                    124:
                    125: #if defined(__alpha__)
                    126: #include <alpha/isa/isa_machdep.h>
                    127: #elif defined(__cats__)
                    128: #include <cats/isa/isa_machdep.h>
                    129: #elif defined(hp300)
                    130: #include <hp300/dev/isa_machdep.h>
                    131: #elif defined(__i386__)
                    132: #include <i386/isa/isa_machdep.h>
                    133: #elif defined(__mvmeppc__)
                    134: #include <mvmeppc/isa/isa_machdep.h>
                    135: #elif defined(__powerpc__)
                    136: #include <powerpc/isa/isa_machdep.h>
                    137: #else
                    138: #include <machine/isa_machdep.h>
                    139: #endif
                    140:
                    141: #include "isapnp.h"
                    142:
                    143: #if NISAPNP > 0
                    144: /*
                    145:  * Structures and definitions needed by the machine-dependent header.
                    146:  */
                    147: struct isapnp_softc;
                    148:
                    149: #if defined(__alpha__)
                    150: #include <alpha/isa/isapnp_machdep.h>
                    151: #elif defined(__i386__)
                    152: #include <i386/isa/isapnp_machdep.h>
                    153: #else
                    154: #error COMPILING ISAPNP FOR UNSUPPORTED MACHINE.
                    155: #endif
                    156: #endif /* NISAPNP */
                    157:
                    158: # define ISAPNP_WRITE_ADDR(sc, v) \
                    159:     bus_space_write_1(sc->sc_iot, sc->sc_addr_ioh, 0, v)
                    160: # define ISAPNP_WRITE_DATA(sc, v) \
                    161:     bus_space_write_1(sc->sc_iot, sc->sc_wrdata_ioh, 0, v)
                    162: # define ISAPNP_READ_DATA(sc) \
                    163:     bus_space_read_1(sc->sc_iot, sc->sc_read_ioh, 0)
                    164:
                    165: # define ISAPNP_MALLOC(a) malloc(a, M_DEVBUF, M_WAITOK)
                    166: # define ISAPNP_FREE(a) free(a, M_DEVBUF)
                    167: # define ISAPNP_CLONE_SETUP(dest, src) \
                    168:        do { \
                    169:                bzero((dest), sizeof(*(dest))); \
                    170:                (dest)->ia_ic = (src)->ia_ic; \
                    171:        } while (0)
                    172:
                    173: #ifndef _DEV_ISA_ISAPNPREG_H_
                    174: /*
                    175:  * `reg' defines needed only for these structures.
                    176:  */
                    177: #define ISAPNP_MAX_CARDS       8
                    178: #define ISAPNP_MAX_IDENT       32
                    179: #define ISAPNP_MAX_DEVCLASS    16
                    180: #define ISAPNP_SERIAL_SIZE     9
                    181:
                    182: #define ISAPNP_NUM_MEM         4
                    183: #define ISAPNP_NUM_IO          8
                    184: #define ISAPNP_NUM_IRQ         16
                    185: #define ISAPNP_NUM_DRQ         8
                    186: #define ISAPNP_NUM_MEM32       4
                    187: #endif /* _DEV_ISA_ISAPNPREG_H_ */
                    188:
                    189: /*
                    190:  * ISA PnP-specific structures.
                    191:  */
                    192: struct isapnp_softc {
                    193:        struct device           sc_dev;
                    194:        TAILQ_HEAD(, isadev)
                    195:                sc_subdevs;             /* list of all children */
                    196:
                    197:        bus_space_tag_t sc_iot;         /* isa io space tag */
                    198:        bus_space_tag_t sc_memt;        /* isa mem space tag */
                    199: #if NISADMA > 0
                    200:        bus_dma_tag_t sc_dmat;          /* isa DMA tag */
                    201: #endif /* NISADMA > 0 */
                    202:
                    203:        int                     sc_read_port;
                    204:        bus_space_handle_t      sc_addr_ioh;
                    205:        bus_space_handle_t      sc_wrdata_ioh;
                    206:        bus_space_handle_t      sc_read_ioh;
                    207:        bus_space_handle_t      sc_memh;
                    208:        u_int8_t                sc_ncards;
                    209:        u_int8_t                sc_id[ISAPNP_MAX_CARDS][ISAPNP_SERIAL_SIZE];
                    210: };
                    211:
                    212: struct isapnp_region {
                    213:        bus_space_handle_t h;
                    214:        u_int32_t base;
                    215:
                    216:        u_int32_t minbase;
                    217:        u_int32_t maxbase;
                    218:        u_int32_t length;
                    219:        u_int32_t align;
                    220:        u_int8_t  flags;
                    221: };
                    222:
                    223: struct isapnp_pin {
                    224:        int16_t   num;
                    225:        u_int8_t  flags:4;
                    226:        u_int8_t  type:4;
                    227:        u_int16_t bits;
                    228: };
                    229:
                    230: struct isapnp_knowndev {
                    231:        const char pnpid[8];
                    232:        const char driver[5];
                    233: };
                    234:
                    235: /*
                    236:  * ISA bus attach arguments
                    237:  */
                    238: struct isabus_attach_args {
                    239:        char    *iba_busname;           /* XXX should be common */
                    240:        bus_space_tag_t iba_iot;        /* isa i/o space tag */
                    241:        bus_space_tag_t iba_memt;       /* isa mem space tag */
                    242: #if NISADMA > 0
                    243:        bus_dma_tag_t iba_dmat;         /* isa DMA tag */
                    244: #endif
                    245:        isa_chipset_tag_t iba_ic;
                    246: };
                    247:
                    248: /*
                    249:  * ISA/ISA PnP shared driver attach arguments
                    250:  */
                    251: struct isa_attach_args {
                    252:        struct device  *ia_isa;         /* isa device */
                    253:        bus_space_tag_t ia_iot;         /* isa i/o space tag */
                    254:        bus_space_tag_t ia_memt;        /* isa mem space tag */
                    255: #if NISADMA > 0
                    256:        bus_dma_tag_t ia_dmat;          /* DMA tag */
                    257: #endif
                    258:        bus_space_handle_t ia_delaybah; /* i/o handle for `delay port' */
                    259:
                    260:        isa_chipset_tag_t ia_ic;
                    261:
                    262:        /*
                    263:         * ISA PnP configuration support.  `ipa_' prefixes are used to denote
                    264:         * PnP specific members of this structure.
                    265:         */
                    266:        struct isa_attach_args  *ipa_sibling;
                    267:        struct isa_attach_args  *ipa_child;
                    268:
                    269:        char    ipa_devident[ISAPNP_MAX_IDENT];
                    270:        char    ipa_devlogic[ISAPNP_MAX_DEVCLASS];
                    271:        char    ipa_devcompat[ISAPNP_MAX_DEVCLASS];
                    272:        char    ipa_devclass[ISAPNP_MAX_DEVCLASS];
                    273:
                    274:        u_char  ipa_pref;
                    275:        u_char  ipa_devnum;
                    276:
                    277:        u_char  ipa_nio;
                    278:        u_char  ipa_nirq;
                    279:        u_char  ipa_ndrq;
                    280:        u_char  ipa_nmem;
                    281:        u_char  ipa_nmem32;
                    282:
                    283:        struct isapnp_region    ipa_io[ISAPNP_NUM_IO];
                    284:        struct isapnp_region    ipa_mem[ISAPNP_NUM_MEM];
                    285:        struct isapnp_region    ipa_mem32[ISAPNP_NUM_MEM32];
                    286:        struct isapnp_pin       ipa_irq[ISAPNP_NUM_IRQ];
                    287:        struct isapnp_pin       ipa_drq[ISAPNP_NUM_DRQ];
                    288:
                    289:        /*
                    290:         * Compatibility defines for ISA drivers.
                    291:         */
                    292: #define ia_iobase      ipa_io[0].base
                    293: #define ia_iosize      ipa_io[0].length
                    294: #define ia_ioh         ipa_io[0].h
                    295: #define ia_irq         ipa_irq[0].num
                    296: #define        ia_drq          ipa_drq[0].num
                    297: #define        ia_drq2         ipa_drq[1].num
                    298: #define ia_maddr       ipa_mem[0].base
                    299: #define ia_msize       ipa_mem[0].length
                    300: #define ia_memh                ipa_mem[0].h
                    301:
                    302:        void    *ia_aux;                /* driver specific */
                    303: };
                    304:
                    305: #define        IOBASEUNK       -1              /* i/o address is unknown */
                    306: #define        IRQUNK          -1              /* interrupt request line is unknown */
                    307: #define        DRQUNK          -1              /* DMA request line is unknown */
                    308: #define        MADDRUNK        -1              /* shared memory address is unknown */
                    309:
                    310: /*
                    311:  * Per-device ISA variables
                    312:  */
                    313: struct isadev {
                    314:        struct  device *id_dev;         /* back pointer to generic */
                    315:        TAILQ_ENTRY(isadev)
                    316:                id_bchain;              /* bus chain */
                    317: };
                    318:
                    319: /*
                    320:  * ISA master bus
                    321:  */
                    322: struct isa_softc {
                    323:        struct  device sc_dev;          /* base device */
                    324:        TAILQ_HEAD(, isadev)
                    325:                sc_subdevs;             /* list of all children */
                    326:
                    327:        bus_space_tag_t sc_iot;         /* isa io space tag */
                    328:        bus_space_tag_t sc_memt;        /* isa mem space tag */
                    329: #if NISADMA > 0
                    330:        bus_dma_tag_t sc_dmat;          /* isa DMA tag */
                    331: #endif /* NISADMA > 0 */
                    332:
                    333:        isa_chipset_tag_t sc_ic;
                    334:
                    335: #if NISADMA > 0
                    336:        /*
                    337:         * Bitmap representing the DRQ channels available
                    338:         * for ISA.
                    339:         */
                    340:        int     sc_drqmap;
                    341: #define sc_drq sc_drqmap               /* XXX compatibility mode */
                    342:
                    343:        bus_space_handle_t sc_dma1h;    /* i/o handle for DMA controller #1 */
                    344:        bus_space_handle_t sc_dma2h;    /* i/o handle for DMA controller #2 */
                    345:        bus_space_handle_t sc_dmapgh;   /* i/o handle for DMA page registers */
                    346:
                    347:        /*
                    348:         * DMA maps used for the 8 DMA channels.
                    349:         */
                    350:        bus_dmamap_t    sc_dmamaps[8];
                    351:        bus_size_t      sc_dmalength[8];
                    352:
                    353:        int     sc_dmareads;            /* state for isa_dmadone() */
                    354:        int     sc_dmafinished;         /* DMA completion state */
                    355: #endif /* NISADMA > 0 */
                    356:
                    357:        /*
                    358:         * This i/o handle is used to map port 0x84, which is
                    359:         * read to provide a 1.25us delay.  This access handle
                    360:         * is mapped in isaattach(), and exported to drivers
                    361:         * via isa_attach_args.
                    362:         */
                    363:        bus_space_handle_t   sc_delaybah;
                    364: };
                    365:
                    366: #define        ISA_DRQ_ISFREE(isadev, drq) \
                    367:        ((((struct isa_softc *)(isadev))->sc_drqmap & (1 << (drq))) == 0)
                    368:
                    369: #define        ISA_DRQ_ALLOC(isadev, drq) \
                    370:        ((struct isa_softc *)(isadev))->sc_drqmap |= (1 << (drq))
                    371:
                    372: #define        ISA_DRQ_FREE(isadev, drq) \
                    373:        ((struct isa_softc *)(isadev))->sc_drqmap &= ~(1 << (drq))
                    374:
                    375: #define                cf_iobase               cf_loc[0]
                    376: #define                cf_iosize               cf_loc[1]
                    377: #define                cf_maddr                cf_loc[2]
                    378: #define                cf_msize                cf_loc[3]
                    379: #define                cf_irq                  cf_loc[4]
                    380: #define                cf_drq                  cf_loc[5]
                    381: #define                cf_drq2                 cf_loc[6]
                    382:
                    383: /*
                    384:  * ISA interrupt handler manipulation.
                    385:  *
                    386:  * To establish an ISA interrupt handler, a driver calls isa_intr_establish()
                    387:  * with the interrupt number, type, level, function, and function argument of
                    388:  * the interrupt it wants to handle.  Isa_intr_establish() returns an opaque
                    389:  * handle to an event descriptor if it succeeds, and invokes panic() if it
                    390:  * fails.  (XXX It should return NULL, then drivers should handle that, but
                    391:  * what should they do?)  Interrupt handlers should return 0 for "interrupt
                    392:  * not for me", 1  for "I took care of it", or -1 for "I guess it was mine,
                    393:  * but I wasn't expecting it."
                    394:  *
                    395:  * To remove an interrupt handler, the driver calls isa_intr_disestablish()
                    396:  * with the handle returned by isa_intr_establish() for that handler.
                    397:  */
                    398:
                    399: /* ISA interrupt sharing types */
                    400: char   *isa_intr_typename(int type);
                    401:
                    402: void   isascan(struct device *parent, void *match);
                    403: int    isaprint(void *, const char *);
                    404:
                    405: /*
                    406:  * Some ISA devices (e.g. on a VLB) can perform 32-bit DMA.  This
                    407:  * flag is passed to bus_dmamap_create() to indicate that fact.
                    408:  */
                    409: #define        ISABUS_DMA_32BIT        BUS_DMA_BUS1
                    410:
                    411: /*
                    412:  * ISA PnP prototypes and support macros.
                    413:  */
                    414: static __inline void isapnp_write_reg(struct isapnp_softc *, int, u_char);
                    415: static __inline u_char isapnp_read_reg(struct isapnp_softc *, int);
                    416:
                    417: static __inline void
                    418: isapnp_write_reg(sc, r, v)
                    419:        struct isapnp_softc *sc;
                    420:        int r;
                    421:        u_char v;
                    422: {
                    423:        ISAPNP_WRITE_ADDR(sc, r);
                    424:        ISAPNP_WRITE_DATA(sc, v);
                    425: }
                    426:
                    427: static __inline u_char
                    428: isapnp_read_reg(sc, r)
                    429:        struct isapnp_softc *sc;
                    430:        int r;
                    431: {
                    432:        ISAPNP_WRITE_ADDR(sc, r);
                    433:        return ISAPNP_READ_DATA(sc);
                    434: }
                    435:
                    436: struct isa_attach_args *
                    437:     isapnp_get_resource(struct isapnp_softc *, int, struct isa_attach_args *);
                    438: char *isapnp_id_to_vendor(char *, const u_char *);
                    439:
                    440: int isapnp_config(bus_space_tag_t, bus_space_tag_t,
                    441:     struct isa_attach_args *);
                    442: void isapnp_unconfig(bus_space_tag_t, bus_space_tag_t,
                    443:     struct isa_attach_args *);
                    444:
                    445: void isapnp_isa_attach_hook(struct isa_softc *);
                    446: #ifdef DEBUG_ISAPNP
                    447: void isapnp_print_mem(const char *, const struct isapnp_region *);
                    448: void isapnp_print_io(const char *, const struct isapnp_region *);
                    449: void isapnp_print_irq(const char *, const struct isapnp_pin *);
                    450: void isapnp_print_drq(const char *, const struct isapnp_pin *);
                    451: void isapnp_print_dep_start(const char *, const u_char);
                    452: void isapnp_print_attach(const struct isa_attach_args *);
                    453: void isapnp_get_config(struct isapnp_softc *,
                    454:        struct isa_attach_args *);
                    455: void isapnp_print_config(const struct isa_attach_args *);
                    456: #endif /* DEBUG_ISAPNP */
                    457: #endif /* _DEV_ISA_ISAVAR_H_ */

CVSweb