fwohcireg.h revision 1.1 1 /*-
2 * Copyright (c) 2000 The NetBSD Foundation, Inc.
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to The NetBSD Foundation
6 * by Matt Thomas of 3am Software Foundry.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. All advertising materials mentioning features or use of this software
17 * must display the following acknowledgement:
18 * This product includes software developed by the NetBSD
19 * Foundation, Inc. and its contributors.
20 * 4. Neither the name of The NetBSD Foundation nor the names of its
21 * contributors may be used to endorse or promote products derived
22 * from this software without specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
25 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
26 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
27 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
28 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 * POSSIBILITY OF SUCH DAMAGE.
35 */
36
37 #ifndef _DEV_IEEE1394_FWOHCIREG_H_
38 #define _DEV_IEEE1394_FWOHCIREG_H_
39
40 /* PCI/CardBus-Specific definitions
41 */
42
43 /* In the PCI Class Code Register ...
44 */
45 #define PCI_INTERFACE_OHCI 0x10
46
47 /* The OHCI Regisers are in PCI BAR0.
48 */
49 #define PCI_OHCI_MAP_REGISTER 0x10
50
51 /* HCI Control Register (in PCI config space)
52 */
53 #define PCI_OHCI_CONTROL_REGISTER 0x40
54
55 /* If the following bit, all OHCI register access
56 * and DMA transactions are byte swapped.
57 */
58 #define PCI_GLOBAL_SWAP_BE 0x00000001
59
60 /* Bus Independent Definitions */
61
62 /* OHCI Registers
63 * OHCI Registers are divided into four spaces:
64 * 1) 0x000 .. 0x17C = Control register space
65 * 2) 0x180 .. 0x1FC = Asynchronous DMA context register space
66 * (4 contexts)
67 * 3) 0x200 .. 0x3FC = Isochronous Transmit DMA context register space
68 * (32 contexts)
69 * 4) 0x400 .. 0x7FC = Isochronous Receive DMA context register space
70 * (32 contexts)
71 */
72 #define OHCI_REG_Version 0x000
73 #define OHCI_REG_Guid_Rom 0x004
74 #define OHCI_REG_ATRetries 0x008
75 #define OHCI_REG_CsrReadData 0x00c
76 #define OHCI_REG_CsrCompareData 0x010
77 #define OHCI_REG_CsrControl 0x014
78 #define OHCI_REG_ConfigROMhdr 0x018
79 #define OHCI_REG_BusId 0x01c
80 #define OHCI_REG_BusOptions 0x020
81 #define OHCI_REG_GUIDHi 0x024
82 #define OHCI_REG_GUIDLo 0x028
83 #define OHCI_REG_reserved_02c 0x02c
84 #define OHCI_REG_reserved_030 0x030
85 #define OHCI_REG_ConfigROMmap 0x034
86 #define OHCI_REG_PostedWriteAddressLo 0x038
87 #define OHCI_REG_PostedWriteAddressHi 0x03c
88 #define OHCI_REG_VendorId 0x040
89 #define OHCI_REG_reserved_044 0x044
90 #define OHCI_REG_reserved_048 0x048
91 #define OHCI_REG_reserved_04c 0x04c
92 #define OHCI_REG_HCControlSet 0x050
93 #define OHCI_REG_HCControlClear 0x054
94 #define OHCI_REG_reserved_058 0x058
95 #define OHCI_REG_reserved_05c 0x05c
96 #define OHCI_REG_reserved_060 0x060
97 #define OHCI_REG_SelfIDBuffer 0x064
98 #define OHCI_REG_SelfIDCount 0x068
99 #define OHCI_REG_reserved_06c 0x06c
100 #define OHCI_REG_IRMultiChanMaskHiSet 0x070
101 #define OHCI_REG_IRMultiChanMaskHiClear 0x074
102 #define OHCI_REG_IRMultiChanMaskLoSet 0x078
103 #define OHCI_REG_IRMultiChanMaskLoClear 0x07c
104 #define OHCI_REG_IntEventSet 0x080
105 #define OHCI_REG_IntEventClear 0x084
106 #define OHCI_REG_IntMaskSet 0x088
107 #define OHCI_REG_IntMaskClear 0x08c
108 #define OHCI_REG_IsoXmitIntEventSet 0x090
109 #define OHCI_REG_IsoXmitIntEventClear 0x094
110 #define OHCI_REG_IsoXmitIntMaskSet 0x098
111 #define OHCI_REG_IsoXmitIntMaskClear 0x09c
112 #define OHCI_REG_IsoRecvIntEventSet 0x0a0
113 #define OHCI_REG_IsoRecvIntEventClear 0x0a4
114 #define OHCI_REG_IsoRecvIntMaskSet 0x0a8
115 #define OHCI_REG_IsoRecvIntMaskClear 0x0ac
116 #define OHCI_REG_InitialBandwidthAvailable 0x0b0
117 #define OHCI_REG_InitialChannelsAvailableHi 0x0b4
118 #define OHCI_REG_InitialChannelsAvailableLo 0x0b8
119 #define OHCI_REG_reserved_0bc 0x0bc
120 #define OHCI_REG_reserved_0c0 0x0c0
121 #define OHCI_REG_reserved_0c4 0x0c4
122 #define OHCI_REG_reserved_0c8 0x0c8
123 #define OHCI_REG_reserved_0cc 0x0cc
124 #define OHCI_REG_reserved_0d0 0x0d0
125 #define OHCI_REG_reserved_0d4 0x0d4
126 #define OHCI_REG_reserved_0d8 0x0d8
127 #define OHCI_REG_FairnessConctrol 0x0dc
128 #define OHCI_REG_LinkControlSet 0x0e0
129 #define OHCI_REG_LinkControlClear 0x0e4
130 #define OHCI_REG_NodeId 0x0e8
131 #define OHCI_REG_PhyControl 0x0ec
132 #define OHCI_REG_IsochronousCycleTimer 0x0f0
133 #define OHCI_REG_reserved_0f0 0x0f4
134 #define OHCI_REG_reserved_0f8 0x0f8
135 #define OHCI_REG_reserved_0fc 0x0fc
136 #define OHCI_REG_AsynchronousRequestFilterHiSet 0x100
137 #define OHCI_REG_AsynchronousRequestFilterHiClear 0x104
138 #define OHCI_REG_AsynchronousRequestFilterLoSet 0x108
139 #define OHCI_REG_AsynchronousRequestFilterLoClear 0x10c
140 #define OHCI_REG_PhysicalRequestFilterHiSet 0x110
141 #define OHCI_REG_PhysicalRequestFilterHiClear 0x114
142 #define OHCI_REG_PhysicalRequestFilterLoSet 0x118
143 #define OHCI_REG_PhysicalRequestFilterLoCLear 0x11c
144 #define OHCI_REG_PhysicalUpperBound 0x120
145 #define OHCI_REG_reserved_124 0x124
146 #define OHCI_REG_reserved_128 0x128
147 #define OHCI_REG_reserved_12c 0x12c
148 #define OHCI_REG_reserved_130 0x130
149 #define OHCI_REG_reserved_134 0x134
150 #define OHCI_REG_reserved_138 0x138
151 #define OHCI_REG_reserved_13c 0x13c
152 #define OHCI_REG_reserved_140 0x140
153 #define OHCI_REG_reserved_144 0x144
154 #define OHCI_REG_reserved_148 0x148
155 #define OHCI_REG_reserved_14c 0x14c
156 #define OHCI_REG_reserved_150 0x150
157 #define OHCI_REG_reserved_154 0x154
158 #define OHCI_REG_reserved_158 0x158
159 #define OHCI_REG_reserved_15c 0x15c
160 #define OHCI_REG_reserved_160 0x160
161 #define OHCI_REG_reserved_164 0x164
162 #define OHCI_REG_reserved_168 0x168
163 #define OHCI_REG_reserved_16c 0x16c
164 #define OHCI_REG_reserved_170 0x170
165 #define OHCI_REG_reserved_174 0x174
166 #define OHCI_REG_reserved_178 0x178
167 #define OHCI_REG_reserved_17c 0x17c
168
169
170 #define OHCI_REG_ASYNC_DMA_BASE 0x180
171 #define OHCI_CTX_ASYNC_TX_REQUEST 0
172 #define OHCI_CTX_ASYNC_TX_RESPONSE 1
173 #define OHCI_CTX_ASYNC_RX_REQUEST 2
174 #define OHCI_CTX_ASYNC_RX_RESPONSE 3
175 #define OHCI_SUBREG_ContextControlSet 0x000
176 #define OHCI_SUBREG_ContextControlClear 0x004
177 #define OHCI_SUBREG_reserved_008 0x008
178 #define OHCI_SUBREG_CommandPtr 0x00c
179 #define OHCI_SUBREG_CommandMatch 0x010
180 #define OHCI_SUBREG_reserved_014 0x014
181 #define OHCI_SUBREG_reserved_018 0x018
182 #define OHCI_SUBREG_reserved_01c 0x01c
183 #define OHCI_ASYNC_DMA_WRITE(sc, ctx, reg, val) \
184 OHCI_CSR_WRITE(sc, OHCI_REG_ASYNC_DMA_BASE + 8*(ctx) + (reg), val)
185 #define OHCI_ASYNC_DMA_READ (sc, ctx, reg) \
186 OHCI_CSR_READ (sc, OHCI_REG_ASYNC_DMA_BASE + 8*(ctx) + (reg))
187
188 #define OHCI_REG_SYNC_TX_DMA_BASE 0x200
189 #define OHCI_SYNC_TX_DMA_WRITE(sc, ctx, reg, val) \
190 OHCI_CSR_WRITE(sc, OHCI_REG_SYNC_TX_DMA_BASE + 16*(ctx) + (reg), val)
191 #define OHCI_SYNC_TX_DMA_READ (sc, ctx, reg) \
192 OHCI_CSR_READ (sc, OHCI_REG_SYNC_TX_DMA_BASE + 16*(ctx) + (reg))
193
194 #define OHCI_REG_SYNC_RX_DMA_BASE 0x400
195 #define OHCI_SYNC_RX_DMA_WRITE(sc, ctx, reg, val) \
196 OHCI_CSR_WRITE(sc, OHCI_REG_SYNC_RX_DMA_BASE + 32*(ctx) + (reg), val)
197 #define OHCI_SYNC_RX_DMA_READ (sc, ctx, reg) \
198 OHCI_CSR_READ (sc, OHCI_REG_SYNC_RX_DMA_BASE + 32*(ctx) + (reg))
199
200 /* OHCI_REG_Version
201 */
202 #define OHCI_Version_GUID_ROM 0x01000000
203 #define OHCI_Version_GET_Version(x) ((((x) >> 16) & 0xf) + (((x) >> 20) & 0xf) * 10)
204 #define OHCI_Version_GET_Revision(x) ((((x) >> 4) & 0xf) + ((x) & 0xf) * 10)
205
206 /* OHCI_REG_GUIDxx
207 */
208
209 /* OHCI_REG_BusOptions
210 */
211 #define OHCI_BusOptions_LinkSpd_MASK 0x00000007
212 #define OHCI_BusOptions_LinkSpd_BITPOS 0
213 #define OHCI_BusOptions_G_MASK 0x000000c0
214 #define OHCI_BusOptions_G_BITPOS 6
215 #define OHCI_BusOptions_MaxRec_MASK 0x0000f000
216 #define OHCI_BusOptions_MaxRec_BITPOS 12
217 #define OHCI_BusOptions_CycClkAcc_MASK 0x00ff0000
218 #define OHCI_BusOptions_CycClkAcc_BITPOS 16
219 #define OHCI_BusOptions_PMC 0x08000000
220 #define OHCI_BusOptions_BMC 0x10000000
221 #define OHCI_BusOptions_ISC 0x20000000
222 #define OHCI_BusOptions_CMC 0x40000000
223 #define OHCI_BusOptions_IRMC 0x80000000
224 #define OHCI_BusOptions_reserved 0x07000f38
225
226 /* OCHI_REG_Int{Event|Mask}*
227 */
228 #define OHCI_Int_MasterEnable 0x80000000
229
230 /*
231 * Section 3.1.1: ContextControl register
232 *
233 *
234 */
235 #define OHCI_CTXCTL_RUN 0x00008000
236 #define OHCI_CTXCTL_WAKE 0x00001000
237 #define OHCI_CTXCTL_DEAD 0x00000800
238 #define OHCI_CTXCTL_ACTIVE 0x00000400
239
240 #define OHCI_CTXCTL_SPD_BITLEN 3
241 #define OHCI_CTXCTL_SPD_BITPOS 5
242
243 #define OHCI_CTXCTL_SPD_100 0
244 #define OHCI_CTXCTL_SPD_200 1
245 #define OHCI_CTXCTL_SPD_400 2
246
247 #define OHCI_CTXCTL_EVENT_BITLEN 5
248 #define OHCI_CTXCTL_EVENT_BITPOS 0
249
250 /* Events from 0 to 15 are generated by the OpenHCI controller.
251 * Events from 16 to 31 are four-bit IEEE 1394 ack codes or'ed with bit 4 set.
252 */
253 #define OHCI_CTXCTL_EVENT_NO_STATUS 0
254 #define OHCI_CTXCTL_EVENT_RESERVED1 1
255
256 /* The received data length was greater than the buffer's data_length.
257 */
258 #define OHCI_CTXCTL_EVENT_LONG_PACKET 2
259
260 /* A subaction gap was detected before an ack arrived or the received
261 * ack had a parity error.
262 */
263 #define OHCI_CTXCTL_EVENT_MISSING_ACK 3
264
265 /* Underrun on the corresponding FIFO. The packet was truncated.
266 */
267 #define OHCI_CTXCTL_EVENT_UNDERRUN 4
268
269 /* A receive FIFO overflowed during the reception of an isochronous packet.
270 */
271 #define OHCI_CTXCTL_EVENT_OVERRUN 5
272
273 /* An unrecoverable error occurred while the Host Controller was reading
274 * a descriptor block.
275 */
276 #define OHCI_CTXCTL_EVENT_DESCRIPTOR_READ 6
277
278 /* An error occurred while the Host Controller was attempting to read
279 * from host memory in the data stage of descriptor processing.
280 */
281 #define OHCI_CTXCTL_EVENT_DATA_READ 7
282
283 /* An error occurred while the Host Controller was attempting to write
284 * to host memory either in the data stage of descriptor processing
285 * (AR, IR), or when processing a single 16-bit host * memory write (IT).
286 */
287 #define OHCI_CTXCTL_EVENT_DATA_WRITE 8
288
289 /* Identifies a PHY packet in the receive buffer as being the synthesized
290 * bus reset packet. (See section 8.4.2.3).
291 */
292 #define OHCI_CTXCTL_EVENT_BUS_RESET 9
293
294 /* Indicates that the asynchronous transmit response packet expired and
295 * was not transmitted, or that an IT DMA context experienced a skip
296 * processing overflow (See section 9.3.3).
297 */
298 #define OHCI_CTXCTL_EVENT_TIMEOUT 10
299
300 /* A bad tCode is associated with this packet. The packet was flushed.
301 */
302 #define OHCI_CTXCTL_EVENT_TCODE_ERR 11
303 #define OHCI_CTXCTL_EVENT_RESERVED12 12
304 #define OHCI_CTXCTL_EVENT_RESERVED13 13
305
306 /* An error condition has occurred that cannot be represented
307 * by any other event codes defined herein.
308 */
309 #define OHCI_CTXCTL_EVENT_UNKNOWN 14
310
311 /* Sent by the link side of the output FIFO when asynchronous
312 * packets are being flushed due to a bus reset.
313 */
314 #define OHCI_CTXCTL_EVENT_FLUSHED 15
315
316 /* IEEE1394 derived ACK codes follow
317 */
318 #define OHCI_CTXCTL_EVENT_RESERVED16 16
319
320 /* For asynchronous request and response packets, this event
321 * indicates the destination node has successfully accepted
322 * the packet. If the packet was a request subaction, the
323 * destination node has successfully completed the transaction
324 * and no response subaction shall follow. The event code for
325 * transmitted PHY, isochronous, asynchronous stream and broadcast
326 * packets, none of which yields a 1394 ack code, shall be set
327 * by hardware to ack_complete unless an event occurs.
328 */
329 #define OHCI_CTXCTL_EVENT_ACK_COMPLETE 17
330
331 /* The destination node has successfully accepted the packet.
332 * If the packet was a request subaction, a response subaction
333 * should follow at a later time. This code is not returned for
334 * a response subaction.
335 */
336 #define OHCI_CTXCTL_EVENT_ACK_PENDING 18
337 #define OHCI_CTXCTL_EVENT_RESERVED19 19
338
339 /* The packet could not be accepted after max ATRetries (see
340 * section 5.4) attempts, and the last ack received was ack_busy_X.
341 */
342 #define OHCI_CTXCTL_EVENT_ACK_BUSY_X 20
343
344 /* The packet could not be accepted after max ATRetries (see
345 * section 5.4) attempts, and the last ack received was ack_busy_A.
346 */
347 #define OHCI_CTXCTL_EVENT_ACK_BUSY_A 21
348
349 /* The packet could not be accepted after max AT Retries (see
350 * section 5.4) attempts, and the last ack received was ack_busy_B.
351 */
352 #define OHCI_CTXCTL_EVENT_ACK_BUSY_B 22
353 #define OHCI_CTXCTL_EVENT_RESERVED23 23
354 #define OHCI_CTXCTL_EVENT_RESERVED24 24
355 #define OHCI_CTXCTL_EVENT_RESERVED25 25
356 #define OHCI_CTXCTL_EVENT_RESERVED26 26
357
358 /* The destination node could not accept the packet because
359 * the link and higher layers are in a suspended state.
360 */
361 #define OHCI_CTXCTL_EVENT_ACK_TARDY 27
362 #define OHCI_CTXCTL_EVENT_RESERVED28 28
363
364 /* An AT context received an ack_data_error, or an IR context
365 * in packet-per-buffer mode detected a data field CRC or
366 * data_length error.
367 */
368 #define OHCI_CTXCTL_EVENT_ACK_DATA_ERROR 29
369
370 /* A field in the request packet header was set to an unsupported or
371 * incorrect value, or an invalid transaction was attempted (e.g., a
372 * write to a read-only address).
373 */
374 #define OHCI_CTXCTL_EVENT_ACK_TYPE_ERROR 30
375 #define OHCI_CTXCTL_EVENT_RESERVED31 31
376
377 #endif /* _DEV_IEEE1394_FWOHCIREG_ */
378