1 /* $NetBSD: lsi64854var.h,v 1.11 2008/04/13 04:55:53 tsutsui Exp $ */
4 * Copyright (c) 1998 The NetBSD Foundation, Inc.
7 * This code is derived from software contributed to The NetBSD Foundation
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
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.
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
32 struct lsi64854_softc
{
33 device_t sc_dev
; /* base device */
34 bus_space_tag_t sc_bustag
; /* bus tags */
35 bus_dma_tag_t sc_dmatag
;
37 bus_space_handle_t sc_regs
; /* the registers */
38 u_int sc_rev
; /* revision */
39 int sc_burst
; /* max suported burst size */
42 #define L64854_CHANNEL_SCSI 1
43 #define L64854_CHANNEL_ENET 2
44 #define L64854_CHANNEL_PP 3
47 int sc_active
; /* DMA active ? */
48 bus_dmamap_t sc_dmamap
; /* DMA map for bus_dma_* */
49 void * sc_dvmaaddr
; /* DVMA cookie */
54 void (*reset
)(struct lsi64854_softc
*);/* reset routine */
55 int (*setup
)(struct lsi64854_softc
*, uint8_t **, size_t *,
56 int, size_t *); /* DMA setup */
57 int (*intr
)(void *); /* interrupt handler */
59 int (*sc_intrchain
)(void *); /* next handler in intr chain */
60 void *sc_intrchainarg
; /* arg for next intr handler */
65 #define L64854_GCSR(sc) \
66 (bus_space_read_4((sc)->sc_bustag, (sc)->sc_regs, L64854_REG_CSR))
68 #define L64854_SCSR(sc, csr) \
69 bus_space_write_4((sc)->sc_bustag, (sc)->sc_regs, L64854_REG_CSR, csr)
73 * DMA engine interface functions.
75 #define DMA_RESET(sc) (((sc)->reset)(sc))
76 #define DMA_INTR(sc) (((sc)->intr)(sc))
77 #define DMA_SETUP(sc, a, l, d, s) (((sc)->setup)(sc, a, l, d, s))
79 #define DMA_ISACTIVE(sc) ((sc)->sc_active)
81 #define DMA_ENINTR(sc) do { \
82 uint32_t _csr = L64854_GCSR(sc); \
83 _csr |= L64854_INT_EN; \
84 L64854_SCSR(sc, _csr); \
85 } while (/*CONSTCOND*/0)
87 #define DMA_ISINTR(sc) (L64854_GCSR(sc) & (D_INT_PEND|D_ERR_PEND))
89 #define DMA_GO(sc) do { \
90 uint32_t _csr = L64854_GCSR(sc); \
92 L64854_SCSR(sc, _csr); \
97 void lsi64854_attach(struct lsi64854_softc
*);
98 int lsi64854_scsi_intr(void *);
99 int lsi64854_enet_intr(void *);
100 int lsi64854_pp_intr(void *);