xref: /netbsd/sys/dev/ieee1394/fwohcireg.h (revision c4a72b64)
1 /*	$NetBSD: fwohcireg.h,v 1.12 2002/12/04 00:28:41 haya Exp $	*/
2 
3 /*-
4  * Copyright (c) 2000 The NetBSD Foundation, Inc.
5  * All rights reserved.
6  *
7  * This code is derived from software contributed to The NetBSD Foundation
8  * by Matt Thomas of 3am Software Foundry.
9  *
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.
18  * 3. All advertising materials mentioning features or use of this software
19  *    must display the following acknowledgement:
20  *        This product includes software developed by the NetBSD
21  *        Foundation, Inc. and its contributors.
22  * 4. Neither the name of The NetBSD Foundation nor the names of its
23  *    contributors may be used to endorse or promote products derived
24  *    from this software without specific prior written permission.
25  *
26  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
27  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
28  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
30  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36  * POSSIBILITY OF SUCH DAMAGE.
37  */
38 
39 #ifndef _DEV_IEEE1394_FWOHCIREG_H_
40 #define	_DEV_IEEE1394_FWOHCIREG_H_
41 
42 /* PCI/CardBus-Specific definitions
43  */
44 
45 /* In the PCI Class Code Register ...
46  */
47 #define	PCI_INTERFACE_OHCI		0x10
48 
49 /* The OHCI Regisers are in PCI BAR0.
50  */
51 #define	PCI_OHCI_MAP_REGISTER		0x10
52 
53 /* HCI Control Register (in PCI config space)
54  */
55 #define	PCI_OHCI_CONTROL_REGISTER	0x40
56 
57 /* If the following bit, all OHCI register access
58  * and DMA transactions are byte swapped.
59  */
60 #define	PCI_GLOBAL_SWAP_BE		0x00000001
61 
62 /* Bus Independent Definitions */
63 
64 #define	OHCI_CONFIG_SIZE		1024
65 #define	OHCI_CONFIG_ALIGNMENT		1024
66 
67 /* OHCI Registers
68  * OHCI Registers are divided into four spaces:
69  *   1) 0x000 .. 0x17C = Control register space
70  *   2) 0x180 .. 0x1FC = Asynchronous DMA context register space
71  *			 (4 contexts)
72  *   3) 0x200 .. 0x3FC = Isochronous Transmit DMA context register space
73  *			 (32 contexts)
74  *   4) 0x400 .. 0x7FC = Isochronous Receive DMA context register space
75  *			 (32 contexts)
76  */
77 #define	OHCI_REG_Version			0x000
78 #define	OHCI_REG_Guid_Rom			0x004
79 #define	OHCI_REG_ATRetries			0x008
80 #define	OHCI_REG_CsrReadData			0x00c
81 #define	OHCI_REG_CsrCompareData			0x010
82 #define	OHCI_REG_CsrControl			0x014
83 #define	OHCI_REG_ConfigROMhdr			0x018
84 #define	OHCI_REG_BusId				0x01c
85 #define	OHCI_REG_BusOptions			0x020
86 #define	OHCI_REG_GUIDHi				0x024
87 #define	OHCI_REG_GUIDLo				0x028
88 #define	OHCI_REG_reserved_02c			0x02c
89 #define	OHCI_REG_reserved_030			0x030
90 #define	OHCI_REG_ConfigROMmap			0x034
91 #define	OHCI_REG_PostedWriteAddressLo		0x038
92 #define	OHCI_REG_PostedWriteAddressHi		0x03c
93 #define	OHCI_REG_VendorId			0x040
94 #define	OHCI_REG_reserved_044			0x044
95 #define	OHCI_REG_reserved_048			0x048
96 #define	OHCI_REG_reserved_04c			0x04c
97 #define	OHCI_REG_HCControlSet			0x050
98 #define	OHCI_REG_HCControlClear			0x054
99 #define	OHCI_REG_reserved_058			0x058
100 #define	OHCI_REG_reserved_05c			0x05c
101 #define	OHCI_REG_reserved_060			0x060
102 #define	OHCI_REG_SelfIDBuffer			0x064
103 #define	OHCI_REG_SelfIDCount			0x068
104 #define	OHCI_REG_reserved_06c			0x06c
105 #define	OHCI_REG_IRMultiChanMaskHiSet		0x070
106 #define	OHCI_REG_IRMultiChanMaskHiClear		0x074
107 #define	OHCI_REG_IRMultiChanMaskLoSet		0x078
108 #define	OHCI_REG_IRMultiChanMaskLoClear		0x07c
109 #define	OHCI_REG_IntEventSet			0x080
110 #define	OHCI_REG_IntEventClear			0x084
111 #define	OHCI_REG_IntMaskSet			0x088
112 #define	OHCI_REG_IntMaskClear			0x08c
113 #define	OHCI_REG_IsoXmitIntEventSet		0x090
114 #define	OHCI_REG_IsoXmitIntEventClear		0x094
115 #define	OHCI_REG_IsoXmitIntMaskSet		0x098
116 #define	OHCI_REG_IsoXmitIntMaskClear		0x09c
117 #define	OHCI_REG_IsoRecvIntEventSet		0x0a0
118 #define	OHCI_REG_IsoRecvIntEventClear		0x0a4
119 #define	OHCI_REG_IsoRecvIntMaskSet		0x0a8
120 #define	OHCI_REG_IsoRecvIntMaskClear		0x0ac
121 #define	OHCI_REG_InitialBandwidthAvailable	0x0b0
122 #define	OHCI_REG_InitialChannelsAvailableHi	0x0b4
123 #define	OHCI_REG_InitialChannelsAvailableLo	0x0b8
124 #define	OHCI_REG_reserved_0bc			0x0bc
125 #define	OHCI_REG_reserved_0c0			0x0c0
126 #define	OHCI_REG_reserved_0c4			0x0c4
127 #define	OHCI_REG_reserved_0c8			0x0c8
128 #define	OHCI_REG_reserved_0cc			0x0cc
129 #define	OHCI_REG_reserved_0d0			0x0d0
130 #define	OHCI_REG_reserved_0d4			0x0d4
131 #define	OHCI_REG_reserved_0d8			0x0d8
132 #define	OHCI_REG_FairnessConctrol		0x0dc
133 #define	OHCI_REG_LinkControlSet			0x0e0
134 #define	OHCI_REG_LinkControlClear		0x0e4
135 #define	OHCI_REG_NodeId				0x0e8
136 #define	OHCI_REG_PhyControl			0x0ec
137 #define	OHCI_REG_IsochronousCycleTimer		0x0f0
138 #define	OHCI_REG_reserved_0f0			0x0f4
139 #define	OHCI_REG_reserved_0f8			0x0f8
140 #define	OHCI_REG_reserved_0fc			0x0fc
141 #define	OHCI_REG_AsynchronousRequestFilterHiSet	0x100
142 #define	OHCI_REG_AsynchronousRequestFilterHiClear	0x104
143 #define	OHCI_REG_AsynchronousRequestFilterLoSet	0x108
144 #define	OHCI_REG_AsynchronousRequestFilterLoClear	0x10c
145 #define	OHCI_REG_PhysicalRequestFilterHiSet	0x110
146 #define	OHCI_REG_PhysicalRequestFilterHiClear	0x114
147 #define	OHCI_REG_PhysicalRequestFilterLoSet	0x118
148 #define	OHCI_REG_PhysicalRequestFilterLoClear	0x11c
149 #define	OHCI_REG_PhysicalUpperBound		0x120
150 #define	OHCI_REG_reserved_124			0x124
151 #define	OHCI_REG_reserved_128			0x128
152 #define	OHCI_REG_reserved_12c			0x12c
153 #define	OHCI_REG_reserved_130			0x130
154 #define	OHCI_REG_reserved_134			0x134
155 #define	OHCI_REG_reserved_138			0x138
156 #define	OHCI_REG_reserved_13c			0x13c
157 #define	OHCI_REG_reserved_140			0x140
158 #define	OHCI_REG_reserved_144			0x144
159 #define	OHCI_REG_reserved_148			0x148
160 #define	OHCI_REG_reserved_14c			0x14c
161 #define	OHCI_REG_reserved_150			0x150
162 #define	OHCI_REG_reserved_154			0x154
163 #define	OHCI_REG_reserved_158			0x158
164 #define	OHCI_REG_reserved_15c			0x15c
165 #define	OHCI_REG_reserved_160			0x160
166 #define	OHCI_REG_reserved_164			0x164
167 #define	OHCI_REG_reserved_168			0x168
168 #define	OHCI_REG_reserved_16c			0x16c
169 #define	OHCI_REG_reserved_170			0x170
170 #define	OHCI_REG_reserved_174			0x174
171 #define	OHCI_REG_reserved_178			0x178
172 #define	OHCI_REG_reserved_17c			0x17c
173 
174 
175 #define	OHCI_REG_ASYNC_DMA_BASE			0x180
176 #define	OHCI_CTX_ASYNC_TX_REQUEST		0
177 #define	OHCI_CTX_ASYNC_TX_RESPONSE		1
178 #define	OHCI_CTX_ASYNC_RX_REQUEST		2
179 #define	OHCI_CTX_ASYNC_RX_RESPONSE		3
180 #define	OHCI_SUBREG_ContextControlSet		0x000
181 #define	OHCI_SUBREG_ContextControlClear		0x004
182 #define	OHCI_SUBREG_reserved_008		0x008
183 #define	OHCI_SUBREG_CommandPtr			0x00c
184 #define	OHCI_SUBREG_ContextMatch		0x010
185 #define	OHCI_SUBREG_reserved_014		0x014
186 #define	OHCI_SUBREG_reserved_018		0x018
187 #define	OHCI_SUBREG_reserved_01c		0x01c
188 #define	OHCI_ASYNC_DMA_WRITE(sc, ctx, reg, val) \
189 	OHCI_CSR_WRITE(sc, OHCI_REG_ASYNC_DMA_BASE + 32*(ctx) + (reg), val)
190 #define	OHCI_ASYNC_DMA_READ(sc, ctx, reg) \
191 	OHCI_CSR_READ(sc, OHCI_REG_ASYNC_DMA_BASE + 32*(ctx) + (reg))
192 
193 #define	OHCI_REG_SYNC_TX_DMA_BASE		0x200
194 #define	OHCI_SYNC_TX_DMA_WRITE(sc, ctx, reg, val) \
195 	OHCI_CSR_WRITE(sc, OHCI_REG_SYNC_TX_DMA_BASE + 16*(ctx) + (reg), val)
196 #define	OHCI_SYNC_TX_DMA_READ(sc, ctx, reg) \
197 	OHCI_CSR_READ(sc, OHCI_REG_SYNC_TX_DMA_BASE + 16*(ctx) + (reg))
198 
199 #define	OHCI_REG_SYNC_RX_DMA_BASE	0x400
200 #define	OHCI_SYNC_RX_DMA_WRITE(sc, ctx, reg, val) \
201 	OHCI_CSR_WRITE(sc, OHCI_REG_SYNC_RX_DMA_BASE + 32*(ctx) + (reg), val)
202 #define	OHCI_SYNC_RX_DMA_READ(sc, ctx, reg) \
203 	OHCI_CSR_READ(sc, OHCI_REG_SYNC_RX_DMA_BASE + 32*(ctx) + (reg))
204 
205 #define	OHCI_BITVAL(val, name) \
206 	((((val) & name##_MASK) >> name##_BITPOS))
207 
208 /* OHCI_REG_Version
209  */
210 #define	OHCI_Version_GUID_ROM		0x01000000
211 #define	OHCI_Version_GET_Version(x) \
212 	((((x) >> 16) & 0xf) + (((x) >> 20) & 0xf) * 10)
213 #define	OHCI_Version_GET_Revision(x) \
214 	((((x) >> 4) & 0xf) + ((x) & 0xf) * 10)
215 
216 /* OHCI_REG_Guid_Rom
217  */
218 #define	OHCI_Guid_AddrReset		0x80000000
219 #define	OHCI_Guid_RdStart		0x02000000
220 #define	OHCI_Guid_RdData_MASK		0x00ff0000
221 #define	OHCI_Guid_RdData_BITPOS		16
222 #define	OHCI_Guid_MiniROM_MASK		0x000000ff
223 #define	OHCI_Guid_MiniROM_BITPOS	0
224 
225 /* OHCI_REG_GUIDxx
226  */
227 
228 /* OHCI_REG_CsrControl
229  */
230 #define	OHCI_CsrControl_Done		0x80000000
231 #define	OHCI_CsrControl_SelMASK		0x00000003
232 #define	OHCI_CsrControl_BusManId		0
233 #define	OHCI_CsrControl_BWAvail			1
234 #define	OHCI_CsrControl_ChanAvailHi		2
235 #define	OHCI_CsrControl_ChanAvailLo		3
236 
237 /* OHCI_REG_BusOptions
238  */
239 #define	OHCI_BusOptions_LinkSpd_MASK	0x00000007
240 #define	OHCI_BusOptions_LinkSpd_BITPOS	0
241 #define	OHCI_BusOptions_G_MASK		0x000000c0
242 #define	OHCI_BusOptions_G_BITPOS	6
243 #define	OHCI_BusOptions_MaxRec_MASK	0x0000f000
244 #define	OHCI_BusOptions_MaxRec_BITPOS	12
245 #define	OHCI_BusOptions_CycClkAcc_MASK	0x00ff0000
246 #define	OHCI_BusOptions_CycClkAcc_BITPOS 16
247 #define	OHCI_BusOptions_PMC		0x08000000
248 #define	OHCI_BusOptions_BMC		0x10000000
249 #define	OHCI_BusOptions_ISC		0x20000000
250 #define	OHCI_BusOptions_CMC		0x40000000
251 #define	OHCI_BusOptions_IRMC		0x80000000
252 #define	OHCI_BusOptions_reserved	0x07000f38
253 
254 /* OHCI_REG_HCControl
255  */
256 
257 #define	OHCI_HCControl_SoftReset	0x00010000
258 #define	OHCI_HCControl_LinkEnable	0x00020000
259 #define	OHCI_HCControl_PostedWriteEnable 0x00040000
260 #define	OHCI_HCControl_LPS		0x00080000
261 #define	OHCI_HCControl_APhyEnhanceEnable 0x00400000
262 #define	OHCI_HCControl_ProgramPhyEnable	0x00800000
263 #define	OHCI_HCControl_NoByteSwapData	0x40000000
264 #define	OHCI_HCControl_BIBImageValid	0x80000000
265 
266 /* OHCI_REG_SelfID
267  */
268 #define	OHCI_SelfID_Error		0x80000000
269 #define	OHCI_SelfID_Gen_MASK		0x00ff0000
270 #define	OHCI_SelfID_Gen_BITPOS		16
271 #define	OHCI_SelfID_Size_MASK		0x000007fc
272 #define	OHCI_SelfID_Size_BITPOS		2
273 
274 /* OHCI_REG_Int{Event|Mask}*
275  */
276 #define	OHCI_Int_MasterEnable		0x80000000
277 #define	OHCI_Int_VendorSpecific		0x40000000
278 #define	OHCI_Int_SoftInterrupt		0x20000000
279 #define	OHCI_Int_Ack_Tardy		0x08000000
280 #define	OHCI_Int_PhyRegRcvd		0x04000000
281 #define	OHCI_Int_CycleTooLong		0x02000000
282 #define	OHCI_Int_UnrecoverableError	0x01000000
283 #define	OHCI_Int_CycleInconsistent	0x00800000
284 #define	OHCI_Int_CycleLost		0x00400000
285 #define	OHCI_Int_Cycle64Seconds		0x00200000
286 #define	OHCI_Int_CycleSynch		0x00100000
287 #define	OHCI_Int_Phy			0x00080000
288 #define	OHCI_Int_RegAccessFail		0x00040000
289 #define	OHCI_Int_BusReset		0x00020000
290 #define	OHCI_Int_SelfIDComplete		0x00010000
291 #define	OHCI_Int_SelfIDCOmplete2	0x00008000
292 #define	OHCI_Int_LockRespErr		0x00000200
293 #define	OHCI_Int_PostedWriteErr		0x00000100
294 #define	OHCI_Int_IsochRx		0x00000080
295 #define	OHCI_Int_IsochTx		0x00000040
296 #define	OHCI_Int_RSPkt			0x00000020
297 #define	OHCI_Int_RQPkt			0x00000010
298 #define	OHCI_Int_ARRS			0x00000008
299 #define	OHCI_Int_ARRQ			0x00000004
300 #define	OHCI_Int_RespTxComplete		0x00000002
301 #define	OHCI_Int_ReqTxComplete		0x00000001
302 
303 /* OHCI_REG_LinkControl
304  */
305 #define	OHCI_LinkControl_CycleSource	0x00400000
306 #define	OHCI_LinkControl_CycleMaster	0x00200000
307 #define	OHCI_LinkControl_CycleTimerEnable 0x00100000
308 #define	OHCI_LinkControl_RcvPhyPkt	0x00000400
309 #define	OHCI_LinkControl_RcvSelfID	0x00000200
310 #define	OHCI_LinkControl_Tag1SyncFilterLock 0x00000040
311 
312 /* OHCI_REG_NodeId
313  */
314 #define	OHCI_NodeId_IDValid		0x80000000
315 #define	OHCI_NodeId_ROOT		0x40000000
316 #define	OHCI_NodeId_CPS			0x08000000
317 #define	OHCI_NodeId_BusNumber		0x0000ffc0
318 #define	OHCI_NodeId_NodeNumber		0x0000003f
319 
320 /* OHCI_REG_PhyControl
321  */
322 #define	OHCI_PhyControl_RdDone		0x80000000
323 #define	OHCI_PhyControl_RdAddr		0x0f000000
324 #define	OHCI_PhyControl_RdAddr_BITPOS	24
325 #define	OHCI_PhyControl_RdData		0x00ff0000
326 #define	OHCI_PhyControl_RdData_BITPOS	16
327 #define	OHCI_PhyControl_RdReg		0x00008000
328 #define	OHCI_PhyControl_WrReg		0x00004000
329 #define	OHCI_PhyControl_RegAddr		0x00000f00
330 #define	OHCI_PhyControl_RegAddr_BITPOS	8
331 #define	OHCI_PhyControl_WrData		0x000000ff
332 #define	OHCI_PhyControl_WrData_BITPOS	0
333 
334 /*
335  * OHCI_REG_IsochronousCycleTimer
336  */
337 #define OHCI_IsoCycleTimer_Sec		0xfe000000
338 #define OHCI_IsoCycleTimer_Sec_BITPOS	25
339 #define OHCI_IsoCycleTimer_uSec		0x01fff000
340 #define OHCI_IsoCycleTimer_uSec_BITPOS	12
341 #define OHCI_IsoCycleTimer_Mod		0x00000fff
342 #define OHCI_IsoCycleTimer_Mod_BITPOS	0
343 
344 /*
345  * Section 3.1.1: ContextControl register
346  *
347  *
348  */
349 #define	OHCI_CTXCTL_RUN			0x00008000
350 #define	OHCI_CTXCTL_WAKE		0x00001000
351 #define	OHCI_CTXCTL_DEAD		0x00000800
352 #define	OHCI_CTXCTL_ACTIVE		0x00000400
353 
354 #define	OHCI_CTXCTL_SPD_BITLEN		3
355 #define	OHCI_CTXCTL_SPD_BITPOS		5
356 
357 #define	OHCI_CTXCTL_SPD_100		0
358 #define	OHCI_CTXCTL_SPD_200		1
359 #define	OHCI_CTXCTL_SPD_400		2
360 
361 #define	OHCI_CTXCTL_EVENT_BITLEN	5
362 #define	OHCI_CTXCTL_EVENT_BITPOS	0
363 
364 /* Events from 0 to 15 are generated by the OpenHCI controller.
365  * Events from 16 to 31 are four-bit IEEE 1394 ack codes or'ed with bit 4 set.
366  */
367 #define	OHCI_CTXCTL_EVENT_NO_STATUS		0
368 #define	OHCI_CTXCTL_EVENT_RESERVED1		1
369 
370 /* The received data length was greater than the buffer's data_length.
371  */
372 #define	OHCI_CTXCTL_EVENT_LONG_PACKET		2
373 
374 /* A subaction gap was detected before an ack arrived or the received
375  * ack had a parity error.
376  */
377 #define	OHCI_CTXCTL_EVENT_MISSING_ACK		3
378 
379 /* Underrun on the corresponding FIFO. The packet was truncated.
380  */
381 #define	OHCI_CTXCTL_EVENT_UNDERRUN		4
382 
383 /* A receive FIFO overflowed during the reception of an isochronous packet.
384  */
385 #define	OHCI_CTXCTL_EVENT_OVERRUN		5
386 
387 /* An unrecoverable error occurred while the Host Controller was reading
388  * a descriptor block.
389  */
390 #define	OHCI_CTXCTL_EVENT_DESCRIPTOR_READ	6
391 
392 /* An error occurred while the Host Controller was attempting to read
393  * from host memory in the data stage of descriptor processing.
394  */
395 #define	OHCI_CTXCTL_EVENT_DATA_READ		7
396 
397 /* An error occurred while the Host Controller was attempting to write
398  * to host memory either in the data stage of descriptor processing
399  * (AR, IR), or when processing a single 16-bit host * memory write (IT).
400  */
401 #define	OHCI_CTXCTL_EVENT_DATA_WRITE		8
402 
403 /* Identifies a PHY packet in the receive buffer as being the synthesized
404  * bus reset packet.  (See section 8.4.2.3).
405  */
406 #define	OHCI_CTXCTL_EVENT_BUS_RESET		9
407 
408 /* Indicates that the asynchronous transmit response packet expired and
409  * was not transmitted, or that an IT DMA context experienced a skip
410  * processing overflow (See section 9.3.3).
411  */
412 #define	OHCI_CTXCTL_EVENT_TIMEOUT		10
413 
414 /* A bad tCode is associated with this packet. The packet was flushed.
415  */
416 #define	OHCI_CTXCTL_EVENT_TCODE_ERR		11
417 #define	OHCI_CTXCTL_EVENT_RESERVED12		12
418 #define	OHCI_CTXCTL_EVENT_RESERVED13		13
419 
420 /* An error condition has occurred that cannot be represented
421  * by any other event codes defined herein.
422  */
423 #define	OHCI_CTXCTL_EVENT_UNKNOWN		14
424 
425 /* Sent by the link side of the output FIFO when asynchronous
426  * packets are being flushed due to a bus reset.
427  */
428 #define	OHCI_CTXCTL_EVENT_FLUSHED		15
429 
430 /* IEEE1394 derived ACK codes follow
431  */
432 #define	OHCI_CTXCTL_EVENT_RESERVED16		16
433 
434 /* For asynchronous request and response packets, this event
435  * indicates the destination node has successfully accepted
436  * the packet. If the packet was a request subaction, the
437  * destination node has successfully completed the transaction
438  * and no response subaction shall follow.  The event code for
439  * transmitted PHY, isochronous, asynchronous stream and broadcast
440  * packets, none of which yields a 1394 ack code, shall be set
441  * by hardware to ack_complete unless an event occurs.
442  */
443 #define	OHCI_CTXCTL_EVENT_ACK_COMPLETE		17
444 
445 /* The destination node has successfully accepted the packet.
446  * If the packet was a request subaction, a response subaction
447  * should follow at a later time. This code is not returned for
448  * a response subaction.
449  */
450 #define	OHCI_CTXCTL_EVENT_ACK_PENDING		18
451 #define	OHCI_CTXCTL_EVENT_RESERVED19		19
452 
453 /* The packet could not be accepted after max ATRetries (see
454  * section 5.4) attempts, and the last ack received was ack_busy_X.
455  */
456 #define	OHCI_CTXCTL_EVENT_ACK_BUSY_X		20
457 
458 /* The packet could not be accepted after max ATRetries (see
459  * section 5.4) attempts, and the last ack received was ack_busy_A.
460  */
461 #define	OHCI_CTXCTL_EVENT_ACK_BUSY_A		21
462 
463 /* The packet could not be accepted after max AT Retries (see
464  * section 5.4) attempts, and the last ack received was ack_busy_B.
465  */
466 #define	OHCI_CTXCTL_EVENT_ACK_BUSY_B		22
467 #define	OHCI_CTXCTL_EVENT_RESERVED23		23
468 #define	OHCI_CTXCTL_EVENT_RESERVED24		24
469 #define	OHCI_CTXCTL_EVENT_RESERVED25		25
470 #define	OHCI_CTXCTL_EVENT_RESERVED26		26
471 
472 /* The destination node could not accept the packet because
473  * the link and higher layers are in a suspended state.
474  */
475 #define	OHCI_CTXCTL_EVENT_ACK_TARDY		27
476 #define	OHCI_CTXCTL_EVENT_RESERVED28		28
477 
478 /* An AT context received an ack_data_error, or an IR context
479  * in packet-per-buffer mode detected a data field CRC or
480  * data_length error.
481  */
482 #define	OHCI_CTXCTL_EVENT_ACK_DATA_ERROR	29
483 
484 /* A field in the request packet header was set to an unsupported or
485  * incorrect value, or an invalid transaction was attempted (e.g., a
486  * write to a read-only address).
487  */
488 #define	OHCI_CTXCTL_EVENT_ACK_TYPE_ERROR	30
489 #define	OHCI_CTXCTL_EVENT_RESERVED31		31
490 
491 /* Context Control for isochronous transmit context
492  */
493 #define	OHCI_CTXCTL_TX_CYCLE_MATCH_ENABLE	0x80000000
494 #define	OHCI_CTXCTL_TX_CYCLE_MATCH_BITLEN	0x7fff0000
495 #define	OHCI_CTXCTL_TX_CYCLE_MATCH_BITPOS	16
496 
497 #define	OHCI_CTXCTL_RX_BUFFER_FILL		0x80000000
498 #define	OHCI_CTXCTL_RX_ISOCH_HEADER		0x40000000
499 #define	OHCI_CTXCTL_RX_CYCLE_MATCH_ENABLE	0x20000000
500 #define	OHCI_CTXCTL_RX_MULTI_CHAN_MODE		0x10000000
501 #define	OHCI_CTXCTL_RX_DUAL_BUFFER_MODE		0x08000000
502 
503 /* Context Match registers
504  */
505 #define	OHCI_CTXMATCH_TAG3			0x80000000
506 #define	OHCI_CTXMATCH_TAG2			0x40000000
507 #define	OHCI_CTXMATCH_TAG1			0x20000000
508 #define	OHCI_CTXMATCH_TAG0			0x10000000
509 #define	OHCI_CTXMATCH_TAG_MASK			0xf0000000
510 #define	OHCI_CTXMATCH_TAG_BITPOS		28
511 #define	OHCI_CTXMATCH_CYCLE_MATCH_MASK		0x07fff000
512 #define	OHCI_CTXMATCH_CYCLE_MATCH_BITPOS	12
513 #define	OHCI_CTXMATCH_SYNC_MASK			0x00000f00
514 #define	OHCI_CTXMATCH_SYNC_BITPOS		8
515 #define	OHCI_CTXMATCH_TAG1_SYNC_FILTER		0x00000040
516 #define	OHCI_CTXMATCH_CHANNEL_NUMBER_MASK	0x0000003f
517 #define	OHCI_CTXMATCH_CHANNEL_NUMBER_BITPOS	0
518 
519 /*
520  * Miscellaneous definitions.
521  */
522 
523 #define	OHCI_TCODE_PHY				0xe
524 
525 #if BYTE_ORDER == BIG_ENDIAN
526 struct fwohci_desc {
527 	u_int16_t	fd_flags;
528 	u_int16_t	fd_reqcount;
529 	u_int32_t	fd_data;
530 	u_int32_t	fd_branch;
531 	u_int16_t	fd_status;
532 	u_int16_t	fd_rescount;
533 };
534 #endif
535 #if BYTE_ORDER == LITTLE_ENDIAN
536 struct fwohci_desc {
537 	u_int16_t	fd_reqcount;
538 	u_int16_t	fd_flags;
539 	u_int32_t	fd_data;
540 	u_int32_t	fd_branch;
541 	u_int16_t	fd_rescount;
542 	u_int16_t	fd_status;
543 };
544 #endif
545 #define	fd_timestamp	fd_rescount
546 
547 #define	OHCI_DESC_STORE_VALUE	0x8600
548 #define	OHCI_DESC_INPUT		0x2000
549 #define	OHCI_DESC_OUTPUT	0x0000 /* for the symmetory */
550 #define	OHCI_DESC_LAST		0x1000
551 #define	OHCI_DESC_STATUS	0x0800
552 #define	OHCI_DESC_IMMED		0x0200
553 #define	OHCI_DESC_PING		0x0080
554 #define	OHCI_DESC_INTR_ALWAYS	0x0030
555 #define	OHCI_DESC_INTR_ERR	0x0010
556 #define	OHCI_DESC_BRANCH	0x000c
557 #define	OHCI_DESC_WAIT		0x0003
558 
559 #define	OHCI_DESC_MAX		8
560 
561 /* Some constants for passing ACK values around with from status reg's */
562 
563 #define OHCI_DESC_STATUS_ACK_MASK 0x1f
564 
565 #endif	/* _DEV_IEEE1394_FWOHCIREG_ */
566