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

Annotation of sys/dev/cardbus/cardbusvar.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: cardbusvar.h,v 1.12 2006/10/12 16:35:51 grange Exp $  */
                      2: /*     $NetBSD: cardbusvar.h,v 1.17 2000/04/02 19:11:37 mycroft Exp $  */
                      3:
                      4: /*
                      5:  * Copyright (c) 1998, 1999 and 2000
                      6:  *       HAYAKAWA Koichi.  All rights reserved.
                      7:  *
                      8:  * Redistribution and use in source and binary forms, with or without
                      9:  * modification, are permitted provided that the following conditions
                     10:  * are met:
                     11:  * 1. Redistributions of source code must retain the above copyright
                     12:  *    notice, this list of conditions and the following disclaimer.
                     13:  * 2. Redistributions in binary form must reproduce the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer in the
                     15:  *    documentation and/or other materials provided with the distribution.
                     16:  * 3. All advertising materials mentioning features or use of this software
                     17:  *    must display the following acknowledgement:
                     18:  *     This product includes software developed by the author.
                     19:  * 4. The name of the author may not be used to endorse or promote products
                     20:  *    derived from this software without specific prior written permission.
                     21:  *
                     22:  *
                     23:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     24:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
                     25:  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
                     26:  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
                     27:  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
                     28:  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
                     29:  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     30:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
                     31:  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
                     32:  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     33:  * POSSIBILITY OF SUCH DAMAGE.
                     34:  */
                     35:
                     36: #ifndef _DEV_CARDBUS_CARDBUSVAR_H_
                     37: #define _DEV_CARDBUS_CARDBUSVAR_H_
                     38:
                     39: #include <dev/pci/pcivar.h>    /* for pcitag_t */
                     40: #include <dev/cardbus/rbus.h>
                     41:
                     42: typedef void *cardbus_chipset_tag_t;
                     43: typedef int cardbus_intr_handle_t;
                     44:
                     45: /* XXX they must be in cardbusreg.h */
                     46: typedef u_int32_t cardbusreg_t;
                     47: typedef pcitag_t cardbustag_t;
                     48: typedef int cardbus_intr_line_t;
                     49:
                     50: #define CARDBUS_ID_REG          0x00
                     51:
                     52: typedef u_int16_t cardbus_vendor_id_t;
                     53: typedef u_int16_t cardbus_product_id_t;
                     54:
                     55: #  define CARDBUS_VENDOR_SHIFT  0
                     56: #  define CARDBUS_VENDOR_MASK   0xffff
                     57: #  define CARDBUS_VENDOR(id) \
                     58:            (((id) >> CARDBUS_VENDOR_SHIFT) & CARDBUS_VENDOR_MASK)
                     59:
                     60: #  define CARDBUS_PRODUCT_SHIFT  16
                     61: #  define CARDBUS_PRODUCT_MASK   0xffff
                     62: #  define CARDBUS_PRODUCT(id) \
                     63:            (((id) >> CARDBUS_PRODUCT_SHIFT) & CARDBUS_PRODUCT_MASK)
                     64:
                     65:
                     66: #define        CARDBUS_COMMAND_STATUS_REG  0x04
                     67:
                     68: #  define CARDBUS_COMMAND_IO_ENABLE     0x00000001
                     69: #  define CARDBUS_COMMAND_MEM_ENABLE    0x00000002
                     70: #  define CARDBUS_COMMAND_MASTER_ENABLE 0x00000004
                     71:
                     72:
                     73: #define CARDBUS_CLASS_REG       0x08
                     74:
                     75: #define        CARDBUS_CLASS_SHIFT                             24
                     76: #define        CARDBUS_CLASS_MASK                              0xff
                     77: #define        CARDBUS_CLASS(cr) \
                     78:            (((cr) >> CARDBUS_CLASS_SHIFT) & CARDBUS_CLASS_MASK)
                     79:
                     80: #define        CARDBUS_SUBCLASS_SHIFT                  16
                     81: #define        CARDBUS_SUBCLASS_MASK                   0xff
                     82: #define        CARDBUS_SUBCLASS(cr) \
                     83:            (((cr) >> CARDBUS_SUBCLASS_SHIFT) & CARDBUS_SUBCLASS_MASK)
                     84:
                     85: #define        CARDBUS_INTERFACE_SHIFT                 8
                     86: #define        CARDBUS_INTERFACE_MASK                  0xff
                     87: #define        CARDBUS_INTERFACE(cr) \
                     88:            (((cr) >> CARDBUS_INTERFACE_SHIFT) & CARDBUS_INTERFACE_MASK)
                     89:
                     90: #define        CARDBUS_REVISION_SHIFT                  0
                     91: #define        CARDBUS_REVISION_MASK                   0xff
                     92: #define        CARDBUS_REVISION(cr) \
                     93:            (((cr) >> CARDBUS_REVISION_SHIFT) & CARDBUS_REVISION_MASK)
                     94:
                     95: /* base classes */
                     96: #define        CARDBUS_CLASS_PREHISTORIC               0x00
                     97: #define        CARDBUS_CLASS_MASS_STORAGE              0x01
                     98: #define        CARDBUS_CLASS_NETWORK                   0x02
                     99: #define        CARDBUS_CLASS_DISPLAY                   0x03
                    100: #define        CARDBUS_CLASS_MULTIMEDIA                0x04
                    101: #define        CARDBUS_CLASS_MEMORY                    0x05
                    102: #define        CARDBUS_CLASS_BRIDGE                    0x06
                    103: #define        CARDBUS_CLASS_COMMUNICATIONS            0x07
                    104: #define        CARDBUS_CLASS_SYSTEM                    0x08
                    105: #define        CARDBUS_CLASS_INPUT                     0x09
                    106: #define        CARDBUS_CLASS_DOCK                      0x0a
                    107: #define        CARDBUS_CLASS_PROCESSOR                 0x0b
                    108: #define        CARDBUS_CLASS_SERIALBUS                 0x0c
                    109: #define        CARDBUS_CLASS_UNDEFINED                 0xff
                    110:
                    111: /* 0x0c serial bus subclasses */
                    112: #define        CARDBUS_SUBCLASS_SERIALBUS_FIREWIRE     0x00
                    113: #define        CARDBUS_SUBCLASS_SERIALBUS_ACCESS       0x01
                    114: #define        CARDBUS_SUBCLASS_SERIALBUS_SSA          0x02
                    115: #define        CARDBUS_SUBCLASS_SERIALBUS_USB          0x03
                    116: #define        CARDBUS_SUBCLASS_SERIALBUS_FIBER        0x04
                    117:
                    118: /* BIST, Header Type, Latency Timer, Cache Line Size */
                    119: #define CARDBUS_BHLC_REG        0x0c
                    120:
                    121: #define        CARDBUS_BIST_SHIFT        24
                    122: #define        CARDBUS_BIST_MASK       0xff
                    123: #define        CARDBUS_BIST(bhlcr) \
                    124:            (((bhlcr) >> CARDBUS_BIST_SHIFT) & CARDBUS_BIST_MASK)
                    125:
                    126: #define        CARDBUS_HDRTYPE_SHIFT     16
                    127: #define        CARDBUS_HDRTYPE_MASK    0xff
                    128: #define        CARDBUS_HDRTYPE(bhlcr) \
                    129:            (((bhlcr) >> CARDBUS_HDRTYPE_SHIFT) & CARDBUS_HDRTYPE_MASK)
                    130:
                    131: #define        CARDBUS_HDRTYPE_TYPE(bhlcr) \
                    132:            (CARDBUS_HDRTYPE(bhlcr) & 0x7f)
                    133: #define        CARDBUS_HDRTYPE_MULTIFN(bhlcr) \
                    134:            ((CARDBUS_HDRTYPE(bhlcr) & 0x80) != 0)
                    135:
                    136: #define        CARDBUS_LATTIMER_SHIFT      8
                    137: #define        CARDBUS_LATTIMER_MASK    0xff
                    138: #define        CARDBUS_LATTIMER(bhlcr) \
                    139:            (((bhlcr) >> CARDBUS_LATTIMER_SHIFT) & CARDBUS_LATTIMER_MASK)
                    140:
                    141: #define        CARDBUS_CACHELINE_SHIFT     0
                    142: #define        CARDBUS_CACHELINE_MASK   0xff
                    143: #define        CARDBUS_CACHELINE(bhlcr) \
                    144:            (((bhlcr) >> CARDBUS_CACHELINE_SHIFT) & CARDBUS_CACHELINE_MASK)
                    145:
                    146:
                    147: /* Base Registers */
                    148: #define CARDBUS_BASE0_REG  0x10
                    149: #define CARDBUS_BASE1_REG  0x14
                    150: #define CARDBUS_BASE2_REG  0x18
                    151: #define CARDBUS_BASE3_REG  0x1C
                    152: #define CARDBUS_BASE4_REG  0x20
                    153: #define CARDBUS_BASE5_REG  0x24
                    154: #define CARDBUS_CIS_REG    0x28
                    155: #define CARDBUS_ROM_REG           0x30
                    156: #  define CARDBUS_CIS_ASIMASK 0x07
                    157: #    define CARDBUS_CIS_ASI(x) (CARDBUS_CIS_ASIMASK & (x))
                    158: #  define CARDBUS_CIS_ASI_TUPLE 0x00
                    159: #  define CARDBUS_CIS_ASI_BAR0  0x01
                    160: #  define CARDBUS_CIS_ASI_BAR1  0x02
                    161: #  define CARDBUS_CIS_ASI_BAR2  0x03
                    162: #  define CARDBUS_CIS_ASI_BAR3  0x04
                    163: #  define CARDBUS_CIS_ASI_BAR4  0x05
                    164: #  define CARDBUS_CIS_ASI_BAR5  0x06
                    165: #  define CARDBUS_CIS_ASI_ROM   0x07
                    166: #  define CARDBUS_CIS_ADDRMASK 0x0ffffff8
                    167: #    define CARDBUS_CIS_ADDR(x) (CARDBUS_CIS_ADDRMASK & (x))
                    168: #    define CARDBUS_CIS_ASI_BAR(x) (((CARDBUS_CIS_ASIMASK & (x))-1)*4+0x10)
                    169: #    define CARDBUS_CIS_ASI_ROM_IMAGE(x) (((x) >> 28) & 0xf)
                    170:
                    171: #define        CARDBUS_INTERRUPT_REG   0x3c
                    172:
                    173: #define CARDBUS_MAPREG_TYPE_MEM                0x00000000
                    174: #define CARDBUS_MAPREG_TYPE_IO         0x00000001
                    175:
                    176: /* XXX end */
                    177:
                    178: typedef struct cardbus_functions {
                    179:        int (*cardbus_space_alloc)(cardbus_chipset_tag_t, rbus_tag_t,
                    180:            bus_addr_t, bus_size_t, bus_addr_t, bus_size_t, int, bus_addr_t *,
                    181:            bus_space_handle_t *);
                    182:        int (*cardbus_space_free)(cardbus_chipset_tag_t, rbus_tag_t,
                    183:            bus_space_handle_t, bus_size_t);
                    184:        void *(*cardbus_intr_establish)(cardbus_chipset_tag_t, int, int,
                    185:            int (*)(void *), void *, const char *);
                    186:        void (*cardbus_intr_disestablish)(cardbus_chipset_tag_t, void *);
                    187:        int (*cardbus_ctrl)(cardbus_chipset_tag_t, int);
                    188:        int (*cardbus_power)(cardbus_chipset_tag_t, int);
                    189:
                    190:        cardbustag_t (*cardbus_make_tag)(cardbus_chipset_tag_t, int, int, int);
                    191:        void (*cardbus_free_tag)(cardbus_chipset_tag_t, cardbustag_t);
                    192:        cardbusreg_t (*cardbus_conf_read)(cardbus_chipset_tag_t,
                    193:            cardbustag_t, int);
                    194:        void (*cardbus_conf_write)(cardbus_chipset_tag_t, cardbustag_t, int,
                    195:            cardbusreg_t);
                    196: } cardbus_function_t, *cardbus_function_tag_t;
                    197:
                    198: /*
                    199:  * struct cbslot_attach_args is the attach argument for cardbus card.
                    200:  */
                    201: struct cbslot_attach_args {
                    202:        char *cba_busname;
                    203:        bus_space_tag_t cba_iot;        /* cardbus i/o space tag */
                    204:        bus_space_tag_t cba_memt;       /* cardbus mem space tag */
                    205:        bus_dma_tag_t cba_dmat;         /* DMA tag */
                    206:
                    207:        int cba_bus;                    /* cardbus bus number */
                    208:
                    209:        cardbus_chipset_tag_t cba_cc;   /* cardbus chipset */
                    210:        cardbus_function_tag_t cba_cf;  /* cardbus functions */
                    211:        int cba_intrline;               /* interrupt line */
                    212:
                    213:        rbus_tag_t cba_rbus_iot;        /* CardBus i/o rbus tag */
                    214:        rbus_tag_t cba_rbus_memt;       /* CardBus mem rbus tag */
                    215:
                    216:        int cba_cacheline;              /* cache line size */
                    217:        int cba_lattimer;               /* latency timer */
                    218: };
                    219:
                    220:
                    221: #define cbslotcf_dev  cf_loc[0]
                    222: #define cbslotcf_func cf_loc[1]
                    223: #define CBSLOT_UNK_DEV -1
                    224: #define CBSLOT_UNK_FUNC -1
                    225:
                    226:
                    227: struct cardbus_devfunc;
                    228:
                    229: /*
                    230:  * struct cardbus_softc is the softc for cardbus card.
                    231:  */
                    232: struct cardbus_softc {
                    233:        struct device sc_dev;           /* fundamental device structure */
                    234:
                    235:        int sc_bus;                     /* cardbus bus number */
                    236:        int sc_device;                  /* cardbus device number */
                    237:        int sc_intrline;                /* CardBus intrline */
                    238:
                    239:        bus_space_tag_t sc_iot;         /* CardBus I/O space tag */
                    240:        bus_space_tag_t sc_memt;        /* CardBus MEM space tag */
                    241:        bus_dma_tag_t sc_dmat;          /* DMA tag */
                    242:
                    243:        cardbus_chipset_tag_t sc_cc;    /* CardBus chipset */
                    244:        cardbus_function_tag_t sc_cf;   /* CardBus function */
                    245:
                    246:        rbus_tag_t sc_rbus_iot;         /* CardBus i/o rbus tag */
                    247:        rbus_tag_t sc_rbus_memt;        /* CardBus mem rbus tag */
                    248:
                    249:        int sc_cacheline;               /* cache line size */
                    250:        int sc_lattimer;                /* latency timer */
                    251:        int sc_volt;                    /* applied Vcc voltage */
                    252: #define PCCARD_33V  0x02
                    253: #define PCCARD_XXV  0x04
                    254: #define PCCARD_YYV  0x08
                    255:        int sc_poweron_func;
                    256:        struct cardbus_devfunc *sc_funcs;
                    257:                                        /* list of cardbus device functions */
                    258: };
                    259:
                    260:
                    261: /*
                    262:  * struct cardbus_devfunc:
                    263:  *
                    264:  *   This is the data deposit for each function of a CardBus device.
                    265:  *   This structure is used for memory or i/o space allocation and
                    266:  *   disallocation.
                    267:  */
                    268: typedef struct cardbus_devfunc {
                    269:        cardbus_chipset_tag_t ct_cc;
                    270:        cardbus_function_tag_t ct_cf;
                    271:        struct cardbus_softc *ct_sc;    /* pointer to the parent */
                    272:        int ct_bus;                     /* bus number */
                    273:        int ct_dev;                     /* device number */
                    274:        int ct_func;                    /* function number */
                    275:
                    276:        rbus_tag_t ct_rbus_iot;         /* CardBus i/o rbus tag */
                    277:        rbus_tag_t ct_rbus_memt;        /* CardBus mem rbus tag */
                    278:
                    279:        u_int32_t ct_bar[6];            /* Base Address Regs 0 to 6 */
                    280:        u_int32_t ct_lc;                /* Latency timer and cache line size */
                    281:        /* u_int32_t ct_cisreg; */      /* CIS reg: is it needed??? */
                    282:
                    283:        struct device *ct_device;       /* pointer to the device */
                    284:
                    285:        struct cardbus_devfunc *ct_next;
                    286:
                    287:   /* some data structure needed for tuple??? */
                    288: } *cardbus_devfunc_t;
                    289:
                    290:
                    291: /* XXX various things extracted from CIS */
                    292: struct cardbus_cis_info {
                    293:        int32_t         manufacturer;
                    294:        int32_t         product;
                    295:        char            cis1_info_buf[256];
                    296:        char           *cis1_info[4];
                    297:        struct cb_bar_info {
                    298:                unsigned int flags;
                    299:                unsigned int size;
                    300:        } bar[7];
                    301:        unsigned int    funcid;
                    302:        union {
                    303:                struct {
                    304:                        int uart_type;
                    305:                        int uart_present;
                    306:                } serial;
                    307:                struct {
                    308:                        char netid[6];
                    309:                        char netid_present;
                    310:                        char __filler;
                    311:                } network;
                    312:        } funce;
                    313: };
                    314:
                    315: struct cardbus_attach_args {
                    316:        int ca_unit;
                    317:        cardbus_devfunc_t ca_ct;
                    318:
                    319:        bus_space_tag_t ca_iot;         /* CardBus I/O space tag */
                    320:        bus_space_tag_t ca_memt;        /* CardBus MEM space tag */
                    321:        bus_dma_tag_t ca_dmat;          /* DMA tag */
                    322:
                    323:        u_int ca_bus;
                    324:        u_int ca_device;
                    325:        u_int ca_function;
                    326:        cardbustag_t ca_tag;
                    327:        cardbusreg_t ca_id;
                    328:        cardbusreg_t ca_class;
                    329:
                    330:        /* Interrupt information */
                    331:        cardbus_intr_line_t ca_intrline;
                    332:
                    333:        rbus_tag_t ca_rbus_iot;         /* CardBus i/o rbus tag */
                    334:        rbus_tag_t ca_rbus_memt;        /* CardBus mem rbus tag */
                    335:
                    336:        struct cardbus_cis_info ca_cis;
                    337: };
                    338:
                    339:
                    340: #define CARDBUS_ENABLE  1      /* enable the channel */
                    341: #define CARDBUS_DISABLE 2      /* disable the channel */
                    342: #define CARDBUS_RESET   4
                    343: #define CARDBUS_CD     7
                    344: #  define CARDBUS_NOCARD 0
                    345: #  define CARDBUS_5V_CARD 0x01 /* XXX: It must not exist */
                    346: #  define CARDBUS_3V_CARD 0x02
                    347: #  define CARDBUS_XV_CARD 0x04
                    348: #  define CARDBUS_YV_CARD 0x08
                    349: #define CARDBUS_IO_ENABLE    100
                    350: #define CARDBUS_IO_DISABLE   101
                    351: #define CARDBUS_MEM_ENABLE   102
                    352: #define CARDBUS_MEM_DISABLE  103
                    353: #define CARDBUS_BM_ENABLE    104 /* bus master */
                    354: #define CARDBUS_BM_DISABLE   105
                    355:
                    356: #define CARDBUS_VCC_UC  0x0000
                    357: #define CARDBUS_VCC_3V  0x0001
                    358: #define CARDBUS_VCC_XV  0x0002
                    359: #define CARDBUS_VCC_YV  0x0003
                    360: #define CARDBUS_VCC_0V  0x0004
                    361: #define CARDBUS_VCC_5V  0x0005 /* ??? */
                    362: #define CARDBUS_VCCMASK 0x000f
                    363: #define CARDBUS_VPP_UC  0x0000
                    364: #define CARDBUS_VPP_VCC 0x0010
                    365: #define CARDBUS_VPP_12V 0x0030
                    366: #define CARDBUS_VPP_0V  0x0040
                    367: #define CARDBUS_VPPMASK 0x00f0
                    368:
                    369: #define CARDBUSCF_DEV                  0
                    370: #define CARDBUSCF_DEV_DEFAULT          -1
                    371: #define CARDBUSCF_FUNCTION             1
                    372: #define CARDBUSCF_FUNCTION_DEFAULT     -1
                    373:
                    374: /*
                    375:  * Locators devies that attach to 'cardbus', as specified to config.
                    376:  */
                    377: #define cardbuscf_dev cf_loc[CARDBUSCF_DEV]
                    378: #define CARDBUS_UNK_DEV CARDBUSCF_DEV_DEFAULT
                    379:
                    380: #define cardbuscf_function cf_loc[CARDBUSCF_FUNCTION]
                    381: #define CARDBUS_UNK_FUNCTION CARDBUSCF_FUNCTION_DEFAULT
                    382:
                    383: int    cardbus_attach_card(struct cardbus_softc *);
                    384: void   cardbus_detach_card(struct cardbus_softc *);
                    385: void   *cardbus_intr_establish(cardbus_chipset_tag_t, cardbus_function_tag_t,
                    386:            cardbus_intr_handle_t irq, int level, int (*func) (void *),
                    387:            void *arg, const char *);
                    388: void   cardbus_intr_disestablish(cardbus_chipset_tag_t,
                    389:            cardbus_function_tag_t, void *handler);
                    390:
                    391: int    cardbus_mapreg_probe(cardbus_chipset_tag_t, cardbus_function_tag_t,
                    392:            cardbustag_t, int, pcireg_t *);
                    393: int    cardbus_mapreg_map(struct cardbus_softc *, int, int, cardbusreg_t,
                    394:            int, bus_space_tag_t *, bus_space_handle_t *, bus_addr_t *,
                    395:            bus_size_t *);
                    396: int    cardbus_mapreg_unmap(struct cardbus_softc *, int, int,
                    397:            bus_space_tag_t, bus_space_handle_t, bus_size_t);
                    398:
                    399: int    cardbus_save_bar(cardbus_devfunc_t);
                    400: int    cardbus_restore_bar(cardbus_devfunc_t);
                    401:
                    402: int    cardbus_function_enable(struct cardbus_softc *, int function);
                    403: int    cardbus_function_disable(struct cardbus_softc *, int function);
                    404:
                    405: int    cardbus_get_capability(cardbus_chipset_tag_t, cardbus_function_tag_t,
                    406:            cardbustag_t, int, int *, cardbusreg_t *);
                    407:
                    408: struct cardbus_matchid {
                    409:        cardbus_vendor_id_t     cm_vid;
                    410:        cardbus_product_id_t    cm_pid;
                    411: };
                    412:
                    413: int    cardbus_matchbyid(struct cardbus_attach_args *,
                    414:            const struct cardbus_matchid *, int);
                    415:
                    416: #define Cardbus_function_enable(ct)                    \
                    417:     cardbus_function_enable((ct)->ct_sc, (ct)->ct_func)
                    418: #define Cardbus_function_disable(ct)                   \
                    419:     cardbus_function_disable((ct)->ct_sc, (ct)->ct_func)
                    420:
                    421: #define Cardbus_mapreg_map(ct, reg, type, busflags, tagp, handlep, basep, sizep) \
                    422:     cardbus_mapreg_map((ct)->ct_sc, (ct->ct_func),     \
                    423:     (reg), (type), (busflags), (tagp), (handlep), (basep), (sizep))
                    424: #define Cardbus_mapreg_unmap(ct, reg, tag, handle, size)\
                    425:     cardbus_mapreg_unmap((ct)->ct_sc, (ct->ct_func),   \
                    426:     (reg), (tag), (handle), (size))
                    427:
                    428: #define Cardbus_make_tag(ct)                           \
                    429:     (*(ct)->ct_cf->cardbus_make_tag)((ct)->ct_cc,      \
                    430:     (ct)->ct_bus, (ct)->ct_dev, (ct)->ct_func)
                    431: #define cardbus_make_tag(cc, cf, bus, device, function)        \
                    432:     ((cf)->cardbus_make_tag)((cc), (bus), (device), (function))
                    433:
                    434: #define Cardbus_free_tag(ct, tag)                      \
                    435:     (*(ct)->ct_cf->cardbus_free_tag)((ct)->ct_cc, (tag))
                    436: #define cardbus_free_tag(cc, cf, tag)                  \
                    437:     (*(cf)->cardbus_free_tag)(cc, (tag))
                    438:
                    439: #define Cardbus_conf_read(ct, tag, offs)               \
                    440:     (*(ct)->ct_cf->cardbus_conf_read)((ct)->ct_cf, (tag), (offs))
                    441: #define cardbus_conf_read(cc, cf, tag, offs)           \
                    442:     ((cf)->cardbus_conf_read)((cc), (tag), (offs))
                    443: #define Cardbus_conf_write(ct, tag, offs, val)         \
                    444:     (*(ct)->ct_cf->cardbus_conf_write)((ct)->ct_cf, (tag), (offs), (val))
                    445: #define cardbus_conf_write(cc, cf, tag, offs, val)     \
                    446:     ((cf)->cardbus_conf_write)((cc), (tag), (offs), (val))
                    447:
                    448: #endif /* !_DEV_CARDBUS_CARDBUSVAR_H_ */

CVSweb