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

Annotation of sys/dev/pcmcia/pcmciavar.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: pcmciavar.h,v 1.20 2005/11/23 11:39:37 mickey Exp $   */
        !             2: /*     $NetBSD: pcmciavar.h,v 1.5 1998/07/19 17:28:17 christos Exp $   */
        !             3:
        !             4: /*
        !             5:  * Copyright (c) 1997 Marc Horowitz.  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:  * 3. All advertising materials mentioning features or use of this software
        !            16:  *    must display the following acknowledgement:
        !            17:  *     This product includes software developed by Marc Horowitz.
        !            18:  * 4. The name of the author may not be used to endorse or promote products
        !            19:  *    derived from this software without specific prior written permission.
        !            20:  *
        !            21:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
        !            22:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
        !            23:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
        !            24:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
        !            25:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
        !            26:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
        !            27:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
        !            28:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
        !            29:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
        !            30:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        !            31:  */
        !            32:
        !            33: #include <sys/types.h>
        !            34: #include <sys/queue.h>
        !            35:
        !            36: #include <machine/bus.h>
        !            37:
        !            38: #include <dev/pcmcia/pcmciachip.h>
        !            39:
        !            40: extern int     pcmcia_verbose;
        !            41:
        !            42: /*
        !            43:  * Contains information about mapped/allocated i/o spaces.
        !            44:  */
        !            45: struct pcmcia_io_handle {
        !            46:        bus_space_tag_t iot;            /* bus space tag (from chipset) */
        !            47:        bus_space_handle_t ioh;         /* mapped space handle */
        !            48:        bus_addr_t      addr;           /* resulting address in bus space */
        !            49:        bus_size_t      size;           /* size of i/o space */
        !            50:        int             flags;          /* misc. information */
        !            51: };
        !            52:
        !            53: #define        PCMCIA_IO_ALLOCATED     0x01    /* i/o space was allocated */
        !            54:
        !            55: /*
        !            56:  * Contains information about allocated memory space.
        !            57:  */
        !            58: struct pcmcia_mem_handle {
        !            59:        bus_space_tag_t memt;           /* bus space tag (from chipset) */
        !            60:        bus_space_handle_t memh;        /* mapped space handle */
        !            61:        bus_addr_t      addr;           /* resulting address in bus space */
        !            62:        bus_size_t      size;           /* size of mem space */
        !            63:        pcmcia_mem_handle_t mhandle;    /* opaque memory handle */
        !            64:        bus_size_t      realsize;       /* how much we really allocated */
        !            65: };
        !            66:
        !            67: /* pcmcia itself */
        !            68:
        !            69: #define PCMCIA_CFE_MWAIT_REQUIRED      0x0001
        !            70: #define PCMCIA_CFE_RDYBSY_ACTIVE       0x0002
        !            71: #define PCMCIA_CFE_WP_ACTIVE           0x0004
        !            72: #define PCMCIA_CFE_BVD_ACTIVE          0x0008
        !            73: #define PCMCIA_CFE_IO8                 0x0010
        !            74: #define PCMCIA_CFE_IO16                        0x0020
        !            75: #define PCMCIA_CFE_IRQSHARE            0x0040
        !            76: #define PCMCIA_CFE_IRQPULSE            0x0080
        !            77: #define PCMCIA_CFE_IRQLEVEL            0x0100
        !            78: #define PCMCIA_CFE_POWERDOWN           0x0200
        !            79: #define PCMCIA_CFE_READONLY            0x0400
        !            80: #define PCMCIA_CFE_AUDIO               0x0800
        !            81:
        !            82: struct pcmcia_config_entry {
        !            83:        int             number;
        !            84:        u_int32_t       flags;
        !            85:        int             iftype;
        !            86:        int             num_iospace;
        !            87:
        !            88:        /*
        !            89:         * The card will only decode this mask in any case, so we can
        !            90:         * do dynamic allocation with this in mind, in case the suggestions
        !            91:         * below are no good.
        !            92:         */
        !            93:        u_long          iomask;
        !            94:        struct {
        !            95:                u_long  length;
        !            96:                u_long  start;
        !            97:        } iospace[4];           /* XXX this could be as high as 16 */
        !            98:        u_int16_t       irqmask;
        !            99:        int             num_memspace;
        !           100:        struct {
        !           101:                u_long  length;
        !           102:                u_long  cardaddr;
        !           103:                u_long  hostaddr;
        !           104:        } memspace[2];          /* XXX this could be as high as 8 */
        !           105:        int             maxtwins;
        !           106:        SIMPLEQ_ENTRY(pcmcia_config_entry) cfe_list;
        !           107: };
        !           108:
        !           109: struct pcmcia_function {
        !           110:        /* read off the card */
        !           111:        int             number;
        !           112:        int             function;
        !           113:        int             last_config_index;
        !           114:        u_long          ccr_base;
        !           115:        u_long          ccr_mask;
        !           116:        SIMPLEQ_HEAD(, pcmcia_config_entry) cfe_head;
        !           117:        SIMPLEQ_ENTRY(pcmcia_function) pf_list;
        !           118:        /* run-time state */
        !           119:        struct pcmcia_softc *sc;
        !           120:        struct device *child;
        !           121:        struct pcmcia_config_entry *cfe;
        !           122:        struct pcmcia_mem_handle pf_pcmh;
        !           123: #define        pf_ccrt         pf_pcmh.memt
        !           124: #define        pf_ccrh         pf_pcmh.memh
        !           125: #define        pf_ccr_mhandle  pf_pcmh.mhandle
        !           126: #define        pf_ccr_realsize pf_pcmh.realsize
        !           127:        bus_size_t      pf_ccr_offset;
        !           128:        int             pf_ccr_window;
        !           129:        bus_addr_t      pf_mfc_iobase;
        !           130:        bus_addr_t      pf_mfc_iomax;
        !           131:        int             (*ih_fct)(void *);
        !           132:        void            *ih_arg;
        !           133:        int             ih_ipl;
        !           134:        int             pf_flags;
        !           135: };
        !           136:
        !           137: /* pf_flags */
        !           138: #define        PFF_ENABLED     0x0001          /* function is enabled */
        !           139: #define        PFF_FAKE        0x0002          /* function is made up (no CIS) */
        !           140:
        !           141: struct pcmcia_card {
        !           142:        int             cis1_major;
        !           143:        int             cis1_minor;
        !           144:        /* XXX waste of space? */
        !           145:        char            cis1_info_buf[256];
        !           146:        char            *cis1_info[4];
        !           147:        u_int16_t       manufacturer;
        !           148: #define        PCMCIA_VENDOR_INVALID   0xffff
        !           149:        u_int16_t       product;
        !           150: #define        PCMCIA_PRODUCT_INVALID  0xffff
        !           151:        u_int16_t       error;
        !           152: #define        PCMCIA_CIS_INVALID              { NULL, NULL, NULL, NULL }
        !           153:        SIMPLEQ_HEAD(, pcmcia_function) pf_head;
        !           154: };
        !           155:
        !           156: struct pcmcia_softc {
        !           157:        struct device   dev;
        !           158:
        !           159:        /* this stuff is for the socket */
        !           160:        pcmcia_chipset_tag_t pct;
        !           161:        pcmcia_chipset_handle_t pch;
        !           162:
        !           163:        /* this stuff is for the card */
        !           164:        struct pcmcia_card card;
        !           165:        void            *ih;
        !           166:        int             sc_enabled_count;       /* how many functions are
        !           167:                                                   enabled */
        !           168:
        !           169:        /*
        !           170:         * These are passed down from the PCMCIA chip, and exist only
        !           171:         * so that cards with Very Special address allocation needs
        !           172:         * know what range they should be dealing with.
        !           173:         */
        !           174:        bus_addr_t iobase;              /* start i/o space allocation here */
        !           175:        bus_size_t iosize;              /* size of the i/o space range */
        !           176: };
        !           177:
        !           178: struct pcmcia_cis_quirk {
        !           179:        u_int16_t manufacturer;
        !           180:        u_int16_t product;
        !           181:        char *cis1_info[4];
        !           182:        struct pcmcia_function *pf;
        !           183:        struct pcmcia_config_entry *cfe;
        !           184: };
        !           185:
        !           186: struct pcmcia_attach_args {
        !           187:        u_int16_t manufacturer;
        !           188:        u_int16_t product;
        !           189:        struct pcmcia_card *card;
        !           190:        struct pcmcia_function *pf;
        !           191: };
        !           192:
        !           193: struct pcmcia_tuple {
        !           194:        unsigned int    code;
        !           195:        unsigned int    length;
        !           196:        u_long          mult;
        !           197:        bus_size_t      ptr;
        !           198:        bus_space_tag_t memt;
        !           199:        bus_space_handle_t memh;
        !           200: };
        !           201:
        !           202: void   pcmcia_read_cis(struct pcmcia_softc *);
        !           203: void   pcmcia_check_cis_quirks(struct pcmcia_softc *);
        !           204: void   pcmcia_print_cis(struct pcmcia_softc *);
        !           205: int    pcmcia_scan_cis(struct device * dev,
        !           206:            int (*) (struct pcmcia_tuple *, void *), void *);
        !           207:
        !           208: #define        pcmcia_cis_read_1(tuple, idx0)                                  \
        !           209:        (bus_space_read_1((tuple)->memt, (tuple)->memh, (tuple)->mult*(idx0)))
        !           210:
        !           211: #define        pcmcia_tuple_read_1(tuple, idx1)                                \
        !           212:        (pcmcia_cis_read_1((tuple), ((tuple)->ptr+(2+(idx1)))))
        !           213:
        !           214: #define        pcmcia_tuple_read_2(tuple, idx2)                                \
        !           215:        (pcmcia_tuple_read_1((tuple), (idx2)) |                         \
        !           216:         (pcmcia_tuple_read_1((tuple), (idx2)+1)<<8))
        !           217:
        !           218: #define        pcmcia_tuple_read_3(tuple, idx3)                                \
        !           219:        (pcmcia_tuple_read_1((tuple), (idx3)) |                         \
        !           220:         (pcmcia_tuple_read_1((tuple), (idx3)+1)<<8) |                  \
        !           221:         (pcmcia_tuple_read_1((tuple), (idx3)+2)<<16))
        !           222:
        !           223: #define        pcmcia_tuple_read_4(tuple, idx4)                                \
        !           224:        (pcmcia_tuple_read_1((tuple), (idx4)) |                         \
        !           225:         (pcmcia_tuple_read_1((tuple), (idx4)+1)<<8) |                  \
        !           226:         (pcmcia_tuple_read_1((tuple), (idx4)+2)<<16) |                 \
        !           227:         (pcmcia_tuple_read_1((tuple), (idx4)+3)<<24))
        !           228:
        !           229: #define        pcmcia_tuple_read_n(tuple, n, idxn)                             \
        !           230:        (((n)==1)?pcmcia_tuple_read_1((tuple), (idxn)) :                \
        !           231:         (((n)==2)?pcmcia_tuple_read_2((tuple), (idxn)) :               \
        !           232:          (((n)==3)?pcmcia_tuple_read_3((tuple), (idxn)) :              \
        !           233:           /* n == 4 */ pcmcia_tuple_read_4((tuple), (idxn)))))
        !           234:
        !           235: #define        PCMCIA_SPACE_MEMORY     1
        !           236: #define        PCMCIA_SPACE_IO         2
        !           237:
        !           238: int    pcmcia_ccr_read(struct pcmcia_function *, int);
        !           239: void   pcmcia_ccr_write(struct pcmcia_function *, int, int);
        !           240:
        !           241: #define        pcmcia_mfc(sc)  (SIMPLEQ_FIRST(&(sc)->card.pf_head) &&          \
        !           242:     SIMPLEQ_NEXT(SIMPLEQ_FIRST(&(sc)->card.pf_head), pf_list))
        !           243:
        !           244: void   pcmcia_function_init(struct pcmcia_function *,
        !           245:            struct pcmcia_config_entry *);
        !           246: int    pcmcia_function_enable(struct pcmcia_function *);
        !           247: void   pcmcia_function_disable(struct pcmcia_function *);
        !           248:
        !           249: #define        pcmcia_io_alloc(pf, start, size, align, pciop)                  \
        !           250:        (pcmcia_chip_io_alloc((pf)->sc->pct, pf->sc->pch, (start),      \
        !           251:         (size), (align), (pciop)))
        !           252:
        !           253: int    pcmcia_io_map(struct pcmcia_function *, int, bus_addr_t,
        !           254:            bus_size_t, struct pcmcia_io_handle *, int *);
        !           255:
        !           256: #define        pcmcia_io_unmap(pf, window)                                     \
        !           257:        (pcmcia_chip_io_unmap((pf)->sc->pct, (pf)->sc->pch, (window)))
        !           258:
        !           259: #define pcmcia_io_free(pf, pciop)                                      \
        !           260:        (pcmcia_chip_io_free((pf)->sc->pct, (pf)->sc->pch, (pciop)))
        !           261:
        !           262: #define pcmcia_mem_alloc(pf, size, pcmhp)                              \
        !           263:        (pcmcia_chip_mem_alloc((pf)->sc->pct, (pf)->sc->pch, (size), (pcmhp)))
        !           264:
        !           265: #define pcmcia_mem_free(pf, pcmhp)                                     \
        !           266:        (pcmcia_chip_mem_free((pf)->sc->pct, (pf)->sc->pch, (pcmhp)))
        !           267:
        !           268: #define pcmcia_mem_map(pf, kind, card_addr, size, pcmhp, offsetp, windowp) \
        !           269:        (pcmcia_chip_mem_map((pf)->sc->pct, (pf)->sc->pch, (kind),      \
        !           270:         (card_addr), (size), (pcmhp), (offsetp), (windowp)))
        !           271:
        !           272: #define        pcmcia_mem_unmap(pf, window)                                    \
        !           273:        (pcmcia_chip_mem_unmap((pf)->sc->pct, (pf)->sc->pch, (window)))
        !           274:
        !           275: void   *pcmcia_intr_establish(struct pcmcia_function *, int,
        !           276:            int (*) (void *), void *, char *);
        !           277: void   pcmcia_intr_disestablish(struct pcmcia_function *, void *);
        !           278: const char *pcmcia_intr_string(struct pcmcia_function *, void *);

CVSweb