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

Annotation of sys/dev/pci/pcivar.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: pcivar.h,v 1.54 2007/08/01 21:43:03 deraadt Exp $     */
                      2: /*     $NetBSD: pcivar.h,v 1.23 1997/06/06 23:48:05 thorpej Exp $      */
                      3:
                      4: /*
                      5:  * Copyright (c) 1996 Christopher G. Demetriou.  All rights reserved.
                      6:  * Copyright (c) 1994 Charles Hannum.  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 Charles Hannum.
                     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:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     23:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     24:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     25:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     26:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     27:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     28:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     29:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     30:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     31:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     32:  */
                     33:
                     34: #ifndef _DEV_PCI_PCIVAR_H_
                     35: #define        _DEV_PCI_PCIVAR_H_
                     36:
                     37: /*
                     38:  * Definitions for PCI autoconfiguration.
                     39:  *
                     40:  * This file describes types and functions which are used for PCI
                     41:  * configuration.  Some of this information is machine-specific, and is
                     42:  * provided by pci_machdep.h.
                     43:  */
                     44:
                     45: #include <sys/device.h>
                     46: #include <machine/bus.h>
                     47: #include <dev/pci/pcireg.h>
                     48:
                     49: /*
                     50:  * Structures and definitions needed by the machine-dependent header.
                     51:  */
                     52: typedef u_int32_t pcireg_t;            /* configuration space register XXX */
                     53:
                     54: /*
                     55:  * Power Management (PCI 2.2)
                     56:  */
                     57: #define PCI_PWR_D0     0
                     58: #define PCI_PWR_D1     1
                     59: #define PCI_PWR_D2     2
                     60: #define PCI_PWR_D3     3
                     61:
                     62: #ifdef _KERNEL
                     63:
                     64: struct pcibus_attach_args;
                     65: struct pci_softc;
                     66:
                     67: /*
                     68:  * Machine-dependent definitions.
                     69:  */
                     70: #if defined(__alpha__)
                     71: #include <alpha/pci/pci_machdep.h>
                     72: #elif defined(__i386__)
                     73: #include <i386/pci/pci_machdep.h>
                     74: #elif defined(__powerpc__)
                     75: #include <powerpc/pci/pci_machdep.h>
                     76: #elif defined(__sgi__)
                     77: #include <sgi/pci/pci_machdep.h>
                     78: #else
                     79: #include <machine/pci_machdep.h>
                     80: #endif
                     81:
                     82: /*
                     83:  * PCI bus attach arguments.
                     84:  */
                     85: struct pcibus_attach_args {
                     86:        char    *pba_busname;           /* XXX should be common */
                     87:        bus_space_tag_t pba_iot;        /* pci i/o space tag */
                     88:        bus_space_tag_t pba_memt;       /* pci mem space tag */
                     89:        bus_dma_tag_t pba_dmat;         /* DMA tag */
                     90:        pci_chipset_tag_t pba_pc;
                     91:
                     92:        int             pba_domain;     /* PCI domain */
                     93:        int             pba_bus;        /* PCI bus number */
                     94:
                     95:        /*
                     96:         * Pointer to the pcitag of our parent bridge.  If there is no
                     97:         * parent bridge, then we assume we are a root bus.
                     98:         */
                     99:        pcitag_t        *pba_bridgetag;
                    100:        pci_intr_handle_t *pba_bridgeih;
                    101:
                    102:        /*
                    103:         * Interrupt swizzling information.  These fields
                    104:         * are only used by secondary busses.
                    105:         */
                    106:        u_int           pba_intrswiz;   /* how to swizzle pins */
                    107:        pcitag_t        pba_intrtag;    /* intr. appears to come from here */
                    108: };
                    109:
                    110: /*
                    111:  * PCI device attach arguments.
                    112:  */
                    113: struct pci_attach_args {
                    114:        bus_space_tag_t pa_iot;         /* pci i/o space tag */
                    115:        bus_space_tag_t pa_memt;        /* pci mem space tag */
                    116:        bus_dma_tag_t pa_dmat;          /* DMA tag */
                    117:        pci_chipset_tag_t pa_pc;
                    118:        int             pa_flags;       /* flags; see below */
                    119:
                    120:        u_int           pa_domain;
                    121:        u_int           pa_bus;
                    122:        u_int           pa_device;
                    123:        u_int           pa_function;
                    124:        pcitag_t        pa_tag;
                    125:        pcireg_t        pa_id, pa_class;
                    126:
                    127:        pcitag_t        *pa_bridgetag;
                    128:        pci_intr_handle_t *pa_bridgeih;
                    129:
                    130:        /*
                    131:         * Interrupt information.
                    132:         *
                    133:         * "Intrline" is used on systems whose firmware puts
                    134:         * the right routing data into the line register in
                    135:         * configuration space.  The rest are used on systems
                    136:         * that do not.
                    137:         */
                    138:        u_int           pa_intrswiz;    /* how to swizzle pins if ppb */
                    139:        pcitag_t        pa_intrtag;     /* intr. appears to come from here */
                    140:        pci_intr_pin_t  pa_intrpin;     /* intr. appears on this pin */
                    141:        pci_intr_line_t pa_intrline;    /* intr. routing information */
                    142:        pci_intr_pin_t  pa_rawintrpin;  /* unswizzled pin */
                    143: };
                    144:
                    145: /*
                    146:  * Flags given in the bus and device attachment args.
                    147:  *
                    148:  * OpenBSD doesn't actually use them yet -- csapuntz@cvs.openbsd.org
                    149:  */
                    150: #define        PCI_FLAGS_IO_ENABLED    0x01            /* I/O space is enabled */
                    151: #define        PCI_FLAGS_MEM_ENABLED   0x02            /* memory space is enabled */
                    152: #define        PCI_FLAGS_MRL_OKAY      0x04            /* Memory Read Line okay */
                    153: #define        PCI_FLAGS_MRM_OKAY      0x08            /* Memory Read Multiple okay */
                    154: #define        PCI_FLAGS_MWI_OKAY      0x10            /* Memory Write and Invalidate
                    155:                                                   okay */
                    156:
                    157: /*
                    158:  *
                    159:  */
                    160: struct pci_quirkdata {
                    161:        pci_vendor_id_t         vendor;         /* Vendor ID */
                    162:        pci_product_id_t        product;        /* Product ID */
                    163:        int                     quirks;         /* quirks; see below */
                    164: };
                    165: #define        PCI_QUIRK_MULTIFUNCTION         1
                    166: #define        PCI_QUIRK_MONOFUNCTION          2
                    167:
                    168: struct pci_softc {
                    169:        struct device sc_dev;
                    170:        bus_space_tag_t sc_iot, sc_memt;
                    171:        bus_dma_tag_t sc_dmat;
                    172:        pci_chipset_tag_t sc_pc;
                    173:        void *sc_powerhook;
                    174:        LIST_HEAD(, pci_dev) sc_devs;
                    175:        int sc_domain, sc_bus, sc_maxndevs;
                    176:        pcitag_t *sc_bridgetag;
                    177:        pci_intr_handle_t *sc_bridgeih;
                    178:        u_int sc_intrswiz;
                    179:        pcitag_t sc_intrtag;
                    180: };
                    181:
                    182: extern int pci_ndomains;
                    183:
                    184: /*
                    185:  * Locators devices that attach to 'pcibus', as specified to config.
                    186:  */
                    187: #define        pcibuscf_bus            cf_loc[0]
                    188: #define        PCIBUS_UNK_BUS          -1              /* wildcarded 'bus' */
                    189:
                    190: /*
                    191:  * Locators for PCI devices, as specified to config.
                    192:  */
                    193: #define        pcicf_dev               cf_loc[0]
                    194: #define        PCI_UNK_DEV             -1              /* wildcarded 'dev' */
                    195:
                    196: #define        pcicf_function          cf_loc[1]
                    197: #define        PCI_UNK_FUNCTION        -1              /* wildcarded 'function' */
                    198:
                    199: /*
                    200:  * Configuration space access and utility functions.  (Note that most,
                    201:  * e.g. make_tag, conf_read, conf_write are declared by pci_machdep.h.)
                    202:  */
                    203: int    pci_mapreg_probe(pci_chipset_tag_t, pcitag_t, int, pcireg_t *);
                    204: pcireg_t pci_mapreg_type(pci_chipset_tag_t, pcitag_t, int);
                    205: int    pci_mapreg_info(pci_chipset_tag_t, pcitag_t, int, pcireg_t,
                    206:            bus_addr_t *, bus_size_t *, int *);
                    207: int    pci_mapreg_map(struct pci_attach_args *, int, pcireg_t, int,
                    208:            bus_space_tag_t *, bus_space_handle_t *, bus_addr_t *,
                    209:            bus_size_t *, bus_size_t);
                    210:
                    211:
                    212: int    pci_io_find(pci_chipset_tag_t, pcitag_t, int, bus_addr_t *,
                    213:            bus_size_t *);
                    214: int    pci_mem_find(pci_chipset_tag_t, pcitag_t, int, bus_addr_t *,
                    215:            bus_size_t *, int *);
                    216:
                    217: int pci_get_capability(pci_chipset_tag_t, pcitag_t, int,
                    218:                            int *, pcireg_t *);
                    219:
                    220: struct pci_matchid {
                    221:        pci_vendor_id_t         pm_vid;
                    222:        pci_product_id_t        pm_pid;
                    223: };
                    224:
                    225: int pci_matchbyid(struct pci_attach_args *, const struct pci_matchid *, int);
                    226:
                    227: /*
                    228:  * Helper functions for autoconfiguration.
                    229:  */
                    230: const char *pci_findvendor(pcireg_t);
                    231: const char *pci_findproduct(pcireg_t);
                    232: int    pci_find_device(struct pci_attach_args *pa,
                    233:                        int (*match)(struct pci_attach_args *));
                    234: int    pci_probe_device(struct pci_softc *, pcitag_t tag,
                    235:            int (*)(struct pci_attach_args *), struct pci_attach_args *);
                    236: void   pci_devinfo(pcireg_t, pcireg_t, int, char *, size_t);
                    237: const struct pci_quirkdata *
                    238:        pci_lookup_quirkdata(pci_vendor_id_t, pci_product_id_t);
                    239: void   pciagp_set_pchb(struct pci_attach_args *);
                    240:
                    241: #endif /* _KERNEL */
                    242: #endif /* _DEV_PCI_PCIVAR_H_ */

CVSweb