1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
/* $OpenBSD: bhavar.h,v 1.2 2002/03/14 01:26:54 millert Exp $ */
/* $NetBSD: bhavar.h,v 1.12 1998/11/19 21:53:00 thorpej Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Charles M. Hannum and by Jason R. Thorpe of the Numerical Aerospace
* Simulation Facility, NASA Ames Research Center.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/queue.h>
/*
* Mail box defs etc.
* these could be bigger but we need the bha_softc to fit on a single page..
*/
#define BHA_MBX_SIZE 32 /* mail box size (MAX 255 MBxs) */
/* don't need that many really */
#define BHA_CCB_MAX 32 /* store up to 32 CCBs at one time */
#define CCB_HASH_SIZE 32 /* hash table size for phystokv */
#define CCB_HASH_SHIFT 9
#define CCB_HASH(x) ((((long)(x))>>CCB_HASH_SHIFT) & (CCB_HASH_SIZE - 1))
#define bha_nextmbx(wmb, mbx, mbio) \
if ((wmb) == &(mbx)->mbio[BHA_MBX_SIZE - 1]) \
(wmb) = &(mbx)->mbio[0]; \
else \
(wmb)++;
struct bha_mbx {
struct bha_mbx_out mbo[BHA_MBX_SIZE];
struct bha_mbx_in mbi[BHA_MBX_SIZE];
struct bha_mbx_out *cmbo; /* Collection Mail Box out */
struct bha_mbx_out *tmbo; /* Target Mail Box out */
struct bha_mbx_in *tmbi; /* Target Mail Box in */
};
struct bha_control {
struct bha_mbx bc_mbx; /* all our mailboxes */
struct bha_ccb bc_ccbs[BHA_CCB_MAX]; /* all our control blocks */
};
struct bha_softc {
struct device sc_dev;
bus_space_tag_t sc_iot;
bus_space_handle_t sc_ioh;
bus_dma_tag_t sc_dmat;
bus_dmamap_t sc_dmamap_control; /* maps the control structures */
int sc_dmaflags; /* bus-specific dma map flags */
void *sc_ih;
struct bha_control *sc_control; /* control structures */
int sc_iswide;
#define wmbx (&sc->sc_control->bc_mbx)
struct bha_ccb *sc_ccbhash[CCB_HASH_SIZE];
TAILQ_HEAD(, bha_ccb) sc_free_ccb, sc_waiting_ccb;
int sc_mbofull;
struct scsi_link sc_link; /* prototype for devs */
struct scsi_adapter sc_adapter;
LIST_HEAD(, scsi_xfer) sc_queue;
struct scsi_xfer *sc_queuelast;
char sc_model[7],
sc_firmware[6];
};
/*
* Offset of a Mail Box In from the beginning of the control DMA mapping.
*/
#define BHA_MBI_OFF(m) (offsetof(struct bha_control, bc_mbx.mbi[0]) + \
(((u_long)(m)) - ((u_long)&wmbx->mbi[0])))
/*
* Offset of a Mail Box Out from the beginning of the control DMA mapping.
*/
#define BHA_MBO_OFF(m) (offsetof(struct bha_control, bc_mbx.mbo[0]) + \
(((u_long)(m)) - ((u_long)&wmbx->mbo[0])))
/*
* Offset of a CCB from the beginning of the control DMA mapping.
*/
#define BHA_CCB_OFF(c) (offsetof(struct bha_control, bc_ccbs[0]) + \
(((u_long)(c)) - ((u_long)&sc->sc_control->bc_ccbs[0])))
struct bha_probe_data {
int sc_irq, sc_drq;
int sc_scsi_dev; /* adapters scsi id */
int sc_iswide; /* adapter is wide */
};
/*#define ISWIDE(sc) (sc->sc_link.max_target >= 8)*/
int bha_cmd(bus_space_tag_t, bus_space_handle_t, struct bha_softc *,
int, u_char *, int, u_char *);
int bha_find(bus_space_tag_t, bus_space_handle_t,
struct bha_probe_data *);
void bha_attach(struct bha_softc *, struct bha_probe_data *);
int bha_intr(void *);
int bha_disable_isacompat(struct bha_softc *);
void bha_inquire_setup_information(struct bha_softc *);
|