maplevar.h revision 1.13 1 1.13 tsutsui /* $NetBSD: maplevar.h,v 1.13 2010/10/17 14:13:44 tsutsui Exp $ */
2 1.5 itohy
3 1.5 itohy /*-
4 1.5 itohy * Copyright (c) 2002 The NetBSD Foundation, Inc.
5 1.5 itohy * All rights reserved.
6 1.5 itohy *
7 1.5 itohy * This code is derived from software contributed to The NetBSD Foundation
8 1.5 itohy * by ITOH Yasufumi.
9 1.5 itohy *
10 1.5 itohy * Redistribution and use in source and binary forms, with or without
11 1.5 itohy * modification, are permitted provided that the following conditions
12 1.5 itohy * are met:
13 1.5 itohy * 1. Redistributions of source code must retain the above copyright
14 1.5 itohy * notice, this list of conditions and the following disclaimer.
15 1.5 itohy * 2. Redistributions in binary form must reproduce the above copyright
16 1.5 itohy * notice, this list of conditions and the following disclaimer in the
17 1.5 itohy * documentation and/or other materials provided with the distribution.
18 1.5 itohy *
19 1.5 itohy * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 1.5 itohy * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 1.5 itohy * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 1.5 itohy * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 1.5 itohy * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 1.5 itohy * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 1.5 itohy * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 1.5 itohy * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 1.5 itohy * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 1.5 itohy * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 1.5 itohy * POSSIBILITY OF SUCH DAMAGE.
30 1.5 itohy */
31 1.5 itohy
32 1.2 marcus /*-
33 1.1 marcus * Copyright (c) 2001 Marcus Comstedt
34 1.1 marcus * All rights reserved.
35 1.1 marcus *
36 1.1 marcus * Redistribution and use in source and binary forms, with or without
37 1.1 marcus * modification, are permitted provided that the following conditions
38 1.1 marcus * are met:
39 1.1 marcus * 1. Redistributions of source code must retain the above copyright
40 1.1 marcus * notice, this list of conditions and the following disclaimer.
41 1.1 marcus * 2. Redistributions in binary form must reproduce the above copyright
42 1.1 marcus * notice, this list of conditions and the following disclaimer in the
43 1.1 marcus * documentation and/or other materials provided with the distribution.
44 1.1 marcus * 3. All advertising materials mentioning features or use of this software
45 1.1 marcus * must display the following acknowledgement:
46 1.2 marcus * This product includes software developed by Marcus Comstedt.
47 1.2 marcus * 4. Neither the name of The NetBSD Foundation nor the names of its
48 1.2 marcus * contributors may be used to endorse or promote products derived
49 1.2 marcus * from this software without specific prior written permission.
50 1.1 marcus *
51 1.2 marcus * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
52 1.2 marcus * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
53 1.2 marcus * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
54 1.2 marcus * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
55 1.2 marcus * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
56 1.2 marcus * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
57 1.2 marcus * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
58 1.2 marcus * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
59 1.2 marcus * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
60 1.2 marcus * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
61 1.2 marcus * POSSIBILITY OF SUCH DAMAGE.
62 1.1 marcus */
63 1.1 marcus
64 1.5 itohy #include <sys/queue.h>
65 1.5 itohy
66 1.5 itohy #define MAPLE_PORTS 4
67 1.5 itohy #define MAPLE_SUBUNITS 6
68 1.5 itohy
69 1.5 itohy #define MAPLE_NFUNC 32
70 1.5 itohy
71 1.5 itohy struct maple_func {
72 1.5 itohy int f_funcno;
73 1.5 itohy struct maple_unit *f_unit;
74 1.5 itohy struct device *f_dev;
75 1.5 itohy
76 1.5 itohy /* callback */
77 1.5 itohy void (*f_callback)(void *, struct maple_response *,
78 1.5 itohy int /*len*/, int /*flags*/);
79 1.5 itohy void *f_arg;
80 1.5 itohy
81 1.8 tsutsui uint32_t f_work; /* for periodic GETCOND and ping */
82 1.5 itohy
83 1.5 itohy /* periodic command request */
84 1.5 itohy enum maple_periodic_stat {
85 1.5 itohy MAPLE_PERIODIC_NONE,
86 1.5 itohy MAPLE_PERIODIC_INQ,
87 1.5 itohy MAPLE_PERIODIC_DEFERED
88 1.5 itohy } f_periodic_stat;
89 1.5 itohy TAILQ_ENTRY(maple_func) f_periodicq;
90 1.5 itohy
91 1.5 itohy /* command request */
92 1.5 itohy int f_command;
93 1.5 itohy int f_datalen;
94 1.7 itohy const void *f_dataaddr;
95 1.5 itohy enum maple_command_stat {
96 1.5 itohy MAPLE_CMDSTAT_NONE, /* not in queue */
97 1.5 itohy MAPLE_CMDSTAT_ASYNC, /* process immediately */
98 1.5 itohy MAPLE_CMDSTAT_PERIODIC_DEFERED, /* periodic but process imdtly*/
99 1.5 itohy MAPLE_CMDSTAT_ASYNC_PERIODICQ, /* async but on periodic queue*/
100 1.5 itohy MAPLE_CMDSTAT_PERIODIC /* process on periodic timing */
101 1.5 itohy } f_cmdstat;
102 1.5 itohy TAILQ_ENTRY(maple_func) f_cmdq;
103 1.5 itohy };
104 1.5 itohy
105 1.6 itohy /* work-around problem with 3rd party memory cards */
106 1.6 itohy #define MAPLE_MEMCARD_PING_HACK
107 1.6 itohy
108 1.5 itohy struct maple_unit {
109 1.5 itohy int port, subunit;
110 1.5 itohy struct maple_func u_func[MAPLE_NFUNC];
111 1.8 tsutsui uint32_t getcond_func_set;
112 1.5 itohy int u_ping_func; /* function used for ping */
113 1.8 tsutsui uint32_t u_noping; /* stop ping (bitmap of function) */
114 1.6 itohy #ifdef MAPLE_MEMCARD_PING_HACK
115 1.6 itohy enum maple_ping_stat {
116 1.6 itohy MAPLE_PING_NORMAL, /* ping with GETCOND */
117 1.6 itohy MAPLE_PING_MEMCARD, /* memory card, possibly 3rd party */
118 1.6 itohy MAPLE_PING_MINFO /* poorly implemented 3rd party card */
119 1.6 itohy } u_ping_stat;
120 1.6 itohy #endif
121 1.5 itohy struct maple_devinfo devinfo;
122 1.5 itohy
123 1.5 itohy /* DMA status / function */
124 1.5 itohy enum maple_dma_stat {
125 1.5 itohy MAPLE_DMA_IDLE, /* not in queue */
126 1.5 itohy MAPLE_DMA_RETRY, /* retrying last command (sc_retryq) */
127 1.5 itohy MAPLE_DMA_PERIODIC, /* periodic GETCOND */
128 1.5 itohy MAPLE_DMA_ACMD, /* asynchronous command */
129 1.5 itohy MAPLE_DMA_PCMD, /* command on periodic timing */
130 1.5 itohy MAPLE_DMA_PROBE, /* checking for insertion */
131 1.5 itohy MAPLE_DMA_PING /* checking for removal */
132 1.5 itohy } u_dma_stat;
133 1.5 itohy int u_dma_func;
134 1.5 itohy
135 1.5 itohy SIMPLEQ_ENTRY(maple_unit) u_dmaq;
136 1.5 itohy
137 1.5 itohy /* start of each receive buffer */
138 1.8 tsutsui uint32_t *u_rxbuf;
139 1.8 tsutsui uint32_t u_rxbuf_phys;
140 1.5 itohy
141 1.5 itohy /* for restarting command */
142 1.5 itohy int u_command;
143 1.5 itohy int u_datalen;
144 1.7 itohy const void *u_dataaddr;
145 1.5 itohy enum maple_dma_stat u_saved_dma_stat;
146 1.5 itohy int u_retrycnt;
147 1.5 itohy #define MAPLE_RETRY_MAX 100 /* ~2s */
148 1.5 itohy /*
149 1.5 itohy * The 2s retry is rather too long, but required to avoid
150 1.5 itohy * unwanted detach/attach.
151 1.5 itohy * If a Visual Memory (without cells) is inserted to a controller,
152 1.5 itohy * the controller (including the base device and the other unit
153 1.5 itohy * in the slot) stops responding for near 1 second. If two VM are
154 1.5 itohy * inserted in succession, the period becomes near 2s.
155 1.5 itohy */
156 1.5 itohy
157 1.5 itohy /* queue for probe/ping */
158 1.5 itohy enum maple_queue_stat {
159 1.5 itohy MAPLE_QUEUE_NONE, /* not in queue */
160 1.5 itohy MAPLE_QUEUE_PROBE, /* checking for insertion */
161 1.5 itohy MAPLE_QUEUE_PING /* checking for removal */
162 1.5 itohy } u_queuestat;
163 1.5 itohy TAILQ_ENTRY(maple_unit) u_q;
164 1.5 itohy int u_proberetry; /* retry count (subunit != 0) */
165 1.5 itohy #define MAPLE_PROBERETRY_MAX 5
166 1.5 itohy };
167 1.1 marcus
168 1.1 marcus struct maple_softc {
169 1.13 tsutsui device_t sc_dev;
170 1.1 marcus
171 1.10 ad callout_t maple_callout_ch;
172 1.10 ad lwp_t *event_thread;
173 1.3 marcus
174 1.5 itohy int8_t sc_port_unit_map[MAPLE_PORTS];
175 1.5 itohy int sc_port_units[MAPLE_PORTS];
176 1.5 itohy int sc_port_units_open[MAPLE_PORTS];
177 1.1 marcus
178 1.1 marcus struct maple_unit sc_unit[MAPLE_PORTS][MAPLE_SUBUNITS];
179 1.1 marcus
180 1.8 tsutsui uint32_t *sc_txbuf; /* start of allocated transmit buffer */
181 1.8 tsutsui uint32_t *sc_txpos; /* current write position in tx buffer */
182 1.8 tsutsui uint32_t *sc_txlink; /* start of last written frame */
183 1.1 marcus
184 1.8 tsutsui uint32_t sc_txbuf_phys; /* 29-bit physical address */
185 1.5 itohy
186 1.5 itohy void *sc_intrhand;
187 1.5 itohy int sc_dmadone; /* wchan */
188 1.5 itohy
189 1.5 itohy int sc_event; /* periodic event is active / wchan */
190 1.1 marcus
191 1.5 itohy SIMPLEQ_HEAD(maple_dmaq_head, maple_unit) sc_dmaq, sc_retryq;
192 1.5 itohy TAILQ_HEAD(maple_unitq_head, maple_unit) sc_probeq, sc_pingq;
193 1.5 itohy TAILQ_HEAD(maple_fnq_head, maple_func) sc_periodicq, sc_periodicdeferq;
194 1.5 itohy TAILQ_HEAD(maple_cmdq_head, maple_func) sc_acmdq, sc_pcmdq;
195 1.1 marcus };
196