[BACK]Return to i80321var.h CVS log [TXT][DIR] Up to [local] / sys / arch / arm / xscale

Annotation of sys/arch/arm/xscale/i80321var.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: i80321var.h,v 1.3 2006/06/15 21:35:30 drahn Exp $     */
                      2: /*     $NetBSD: i80321var.h,v 1.10 2005/12/15 01:44:00 briggs Exp $    */
                      3:
                      4: /*
                      5:  * Copyright (c) 2002, 2003 Wasabi Systems, Inc.
                      6:  * All rights reserved.
                      7:  *
                      8:  * Written by Jason R. Thorpe for Wasabi Systems, Inc.
                      9:  *
                     10:  * Redistribution and use in source and binary forms, with or without
                     11:  * modification, are permitted provided that the following conditions
                     12:  * are met:
                     13:  * 1. Redistributions of source code must retain the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer.
                     15:  * 2. Redistributions in binary form must reproduce the above copyright
                     16:  *    notice, this list of conditions and the following disclaimer in the
                     17:  *    documentation and/or other materials provided with the distribution.
                     18:  * 3. All advertising materials mentioning features or use of this software
                     19:  *    must display the following acknowledgement:
                     20:  *     This product includes software developed for the NetBSD Project by
                     21:  *     Wasabi Systems, Inc.
                     22:  * 4. The name of Wasabi Systems, Inc. may not be used to endorse
                     23:  *    or promote products derived from this software without specific prior
                     24:  *    written permission.
                     25:  *
                     26:  * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
                     27:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
                     28:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
                     29:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
                     30:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
                     31:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     32:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     33:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     34:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     35:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     36:  * POSSIBILITY OF SUCH DAMAGE.
                     37:  */
                     38:
                     39: #ifndef _ARM_XSCALE_I80321VAR_H_
                     40: #define        _ARM_XSCALE_I80321VAR_H_
                     41:
                     42: #include <sys/queue.h>
                     43: #include <sys/gpio.h>
                     44: #include <sys/evcount.h>
                     45: #include <dev/pci/pcivar.h>
                     46: #include <dev/gpio/gpiovar.h>
                     47:
                     48: /*
                     49:  * There are roughly 32 interrupt sources.
                     50:  */
                     51: #define        NIRQ            32
                     52:
                     53: struct intrhand {
                     54:        TAILQ_ENTRY(intrhand) ih_list;  /* link on intrq list */
                     55:        int (*ih_func)(void *);         /* handler */
                     56:        void *ih_arg;                   /* arg for handler */
                     57:        int ih_ipl;                     /* IPL_* */
                     58:        int ih_irq;                     /* IRQ number */
                     59:        struct evcount          ih_count;
                     60:        char *ih_name;
                     61: };
                     62:
                     63: struct intrq {
                     64:        TAILQ_HEAD(, intrhand) iq_list; /* handler list */
                     65:        int iq_irq;                     /* IRQ to mask while handling */
                     66:        int iq_levels;                  /* IPL_*'s this IRQ has */
                     67:        int iq_ist;                     /* share type */
                     68: };
                     69:
                     70: struct config_bus_space {
                     71:        u_int32_t bus_base;
                     72:        u_int32_t bus_size;
                     73:        int bus_io;
                     74: };
                     75:
                     76: struct i80321_softc {
                     77:        struct device sc_dev;           /* generic device glue */
                     78:
                     79:        int sc_is_host;                 /* indicates if we're a host or
                     80:                                           plugged into another host */
                     81:
                     82:        /*
                     83:         * This is the bus_space and handle used to access the
                     84:         * i80321 itself.  This is filled in by the board-specific
                     85:         * front-end.
                     86:         */
                     87:        bus_space_tag_t sc_st;
                     88:        bus_space_handle_t sc_sh;
                     89:
                     90:        /* Handles for the various subregions. */
                     91:        bus_space_handle_t sc_atu_sh;
                     92:        bus_space_handle_t sc_mcu_sh;
                     93:
                     94: #ifdef BULLSHIT
                     95:        /*
                     96:         * We expect the board-specific front-end to have already mapped
                     97:         * the PCI I/O space .. it is only 64K, and I/O mappings tend to
                     98:         * be smaller than a page size, so it's generally more efficient
                     99:         * to map them all into virtual space in one fell swoop.
                    100:         */
                    101:        vaddr_t sc_iow_vaddr;           /* I/O window vaddr */
                    102: #else
                    103:        bus_space_handle_t sc_io_sh;
                    104: #endif
                    105:
                    106:        /*
                    107:         * Variables that define the Inbound windows.  The base address of
                    108:         * 0-2 are configured by a host via BARs.  The xlate variable
                    109:         * defines the start of the local address space that it maps to.
                    110:         * The size variable defines the byte size.
                    111:         *
                    112:         * The first 3 windows are for incoming PCI memory read/write
                    113:         * cycles from a host.  The 4th window, not configured by the
                    114:         * host (as it outside the normal BAR range) is the inbound
                    115:         * window for PCI devices controlled by the i80321.
                    116:         */
                    117:        struct {
                    118:                uint32_t iwin_base_hi;
                    119:                uint32_t iwin_base_lo;
                    120:                uint32_t iwin_xlate;
                    121:                uint32_t iwin_size;
                    122:        } sc_iwin[4];
                    123:
                    124:        /*
                    125:         * Variables that define the Outbound windows.
                    126:         */
                    127:        struct {
                    128:                uint32_t owin_xlate_lo;
                    129:                uint32_t owin_xlate_hi;
                    130:        } sc_owin[2];
                    131:
                    132:        /*
                    133:         * This is the PCI address that the Outbound I/O window maps to.
                    134:          * The offset is to keep the actual used I/O address away from 0,
                    135:         * which can be bad if, say, an i8254x gig-e chip gets mapped there.
                    136:         * The 0 value apparently looks like "unconfigured" to the controller
                    137:         * and it ignores writes to that region (it doesn't cause a bus fault,
                    138:         * it just ignores them--leading to a non-functional controller).  The
                    139:         * wm(4) driver usually uses memory-mapped regions, but does use the
                    140:         * I/O-mapped region for reset operations in order to work around a
                    141:         * bug in the chip.
                    142:         * Iyonix, while using sc_ioout_xlate 0 needs an offset of 0, too, in
                    143:         * order to function properly.  These values are both set in the
                    144:         * port-specific i80321_mainbus_attach() routine.
                    145:         */
                    146:        uint32_t sc_ioout_xlate;
                    147:        uint32_t sc_ioout_xlate_offset;
                    148:
                    149:        /* Bus space, DMA, and PCI tags for the PCI bus (private devices). */
                    150:        struct bus_space sc_pci_iot;
                    151:        struct bus_space sc_pci_memt;
                    152:        struct arm32_bus_dma_tag sc_pci_dmat;
                    153:        struct arm32_pci_chipset sc_pci_chipset;
                    154:
                    155:        /* DMA window info for PCI DMA. */
                    156:        struct arm32_dma_range sc_pci_dma_range;
                    157:
                    158:        /* GPIO state */
                    159:        uint8_t sc_gpio_dir;    /* GPIO pin direction (1 == output) */
                    160:        uint8_t sc_gpio_val;    /* GPIO output pin value */
                    161:
                    162: #define I80219_GPIO_NPINS 8
                    163:        /* GPIO for 80219 -XXX */
                    164:        struct gpio_chipset_tag sc_gpio_gc;
                    165:         struct gpio_pin sc_gpio_pins[I80219_GPIO_NPINS];
                    166:
                    167:        /* DMA tag for local devices. */
                    168:        struct arm32_bus_dma_tag sc_local_dmat;
                    169:
                    170:        /* Structures to do bus fixup */
                    171:        int nbogus;
                    172:        struct extent *extent_mem;
                    173:        struct extent *extent_port;
                    174:        struct config_bus_space sc_membus_space;
                    175:        struct config_bus_space sc_iobus_space;
                    176:
                    177:
                    178: };
                    179:
                    180: /*
                    181:  * Arguments used to attach IOP built-ins.
                    182:  */
                    183: struct iopxs_attach_args {
                    184:        const char *ia_name;    /* name of device */
                    185:        bus_space_tag_t ia_st;  /* space tag */
                    186:        bus_space_handle_t ia_sh;/* handle of IOP base */
                    187:        bus_dma_tag_t ia_dmat;  /* DMA tag */
                    188:        bus_addr_t ia_offset;   /* offset of device from IOP base */
                    189:        bus_size_t ia_size;     /* size of sub-device */
                    190: };
                    191:
                    192: extern struct bus_space i80321_bs_tag;
                    193: extern struct i80321_softc *i80321_softc;
                    194:
                    195: extern void (*i80321_hardclock_hook)(void);
                    196:
                    197: void   i80321_sdram_bounds(bus_space_tag_t, bus_space_handle_t,
                    198:            paddr_t *, psize_t *);
                    199:
                    200: void   i80321_calibrate_delay(void);
                    201:
                    202: void   i80321intc_init(void);
                    203: void   i80321intc_intr_init(void);
                    204: void   *i80321intc_establish(int, int, int (*)(void *), void *, char *);
                    205: void   i80321intc_disestablish(void *);
                    206:
                    207: void   i80321_gpio_set_direction(uint8_t, uint8_t);
                    208: void   i80321_gpio_set_val(uint8_t, uint8_t);
                    209: uint8_t        i80321_gpio_get_val(void);
                    210:
                    211: void   i80321_bs_init(bus_space_tag_t, void *);
                    212: void   i80321_io_bs_init(bus_space_tag_t, void *);
                    213: void   i80321_mem_bs_init(bus_space_tag_t, void *);
                    214:
                    215: void   i80321_local_dma_init(struct i80321_softc *sc);
                    216:
                    217: void   i80321_pci_init(pci_chipset_tag_t, void *);
                    218:
                    219: void   i80321_attach(struct i80321_softc *);
                    220: #endif /* _ARM_XSCALE_I80321VAR_H_ */

CVSweb