No empty .Rs/.Re
[netbsd-mini2440.git] / sys / dev / ic / lsi64854var.h
blob2fe678c04dae9ed97c08b56b864ca1f427fb9ec2
1 /* $NetBSD: lsi64854var.h,v 1.11 2008/04/13 04:55:53 tsutsui Exp $ */
3 /*-
4 * Copyright (c) 1998 The NetBSD Foundation, Inc.
5 * All rights reserved.
7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Paul Kranenburg.
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.
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 */
41 int sc_channel;
42 #define L64854_CHANNEL_SCSI 1
43 #define L64854_CHANNEL_ENET 2
44 #define L64854_CHANNEL_PP 3
45 void *sc_client;
47 int sc_active; /* DMA active ? */
48 bus_dmamap_t sc_dmamap; /* DMA map for bus_dma_* */
49 void * sc_dvmaaddr; /* DVMA cookie */
50 size_t sc_dmasize;
51 uint8_t **sc_dmaaddr;
52 size_t *sc_dmalen;
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 */
62 u_int sc_dmactl;
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); \
91 _csr |= D_EN_DMA; \
92 L64854_SCSR(sc, _csr); \
93 sc->sc_active = 1; \
94 } while (0)
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 *);