/* $OpenBSD: fwohcireg.h,v 1.4 2003/10/22 09:31:30 jmc Exp $ */ /* $NetBSD: fwohcireg.h,v 1.11 2002/01/26 16:34:27 ichiro Exp $ */ /* * Copyright (c) 2000 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation * by Matt Thomas of 3am Software Foundry. * * 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. */ #ifndef _DEV_IEEE1394_FWOHCIREG_H_ #define _DEV_IEEE1394_FWOHCIREG_H_ /* PCI/CardBus-Specific definitions */ /* In the PCI Class Code Register ... */ #define PCI_INTERFACE_OHCI 0x10 /* The OHCI Registers are in PCI BAR0. */ #define PCI_OHCI_MAP_REGISTER 0x10 /* HCI Control Register (in PCI config space) */ #define PCI_OHCI_CONTROL_REGISTER 0x40 /* If the following bit, all OHCI register access * and DMA transactions are byte swapped. */ #define PCI_GLOBAL_SWAP_BE 0x00000001 /* Bus Independent Definitions */ #define OHCI_CONFIG_SIZE 1024 #define OHCI_CONFIG_ALIGNMENT 1024 /* OHCI Registers * OHCI Registers are divided into four spaces: * 1) 0x000 .. 0x17C = Control register space * 2) 0x180 .. 0x1FC = Asynchronous DMA context register space * (4 contexts) * 3) 0x200 .. 0x3FC = Isochronous Transmit DMA context register space * (32 contexts) * 4) 0x400 .. 0x7FC = Isochronous Receive DMA context register space * (32 contexts) */ #define OHCI_REG_Version 0x000 #define OHCI_REG_Guid_Rom 0x004 #define OHCI_REG_ATRetries 0x008 #define OHCI_REG_CsrReadData 0x00C #define OHCI_REG_CsrCompareData 0x010 #define OHCI_REG_CsrControl 0x014 #define OHCI_REG_ConfigROMhdr 0x018 #define OHCI_REG_BusId 0x01C #define OHCI_REG_BusOptions 0x020 #define OHCI_REG_GUIDHi 0x024 #define OHCI_REG_GUIDLo 0x028 #define OHCI_REG_reserved_02c 0x02C #define OHCI_REG_reserved_030 0x030 #define OHCI_REG_ConfigROMmap 0x034 #define OHCI_REG_PostedWriteAddressLo 0x038 #define OHCI_REG_PostedWriteAddressHi 0x03C #define OHCI_REG_VendorId 0x040 #define OHCI_REG_reserved_044 0x044 #define OHCI_REG_reserved_048 0x048 #define OHCI_REG_reserved_04c 0x04C #define OHCI_REG_HCControlSet 0x050 #define OHCI_REG_HCControlClear 0x054 #define OHCI_REG_reserved_058 0x058 #define OHCI_REG_reserved_05c 0x05C #define OHCI_REG_reserved_060 0x060 #define OHCI_REG_SelfIDBuffer 0x064 #define OHCI_REG_SelfIDCount 0x068 #define OHCI_REG_reserved_06c 0x06C #define OHCI_REG_IRMultiChanMaskHiSet 0x070 #define OHCI_REG_IRMultiChanMaskHiClear 0x074 #define OHCI_REG_IRMultiChanMaskLoSet 0x078 #define OHCI_REG_IRMultiChanMaskLoClear 0x07C #define OHCI_REG_IntEventSet 0x080 #define OHCI_REG_IntEventClear 0x084 #define OHCI_REG_IntMaskSet 0x088 #define OHCI_REG_IntMaskClear 0x08C #define OHCI_REG_IsoXmitIntEventSet 0x090 #define OHCI_REG_IsoXmitIntEventClear 0x094 #define OHCI_REG_IsoXmitIntMaskSet 0x098 #define OHCI_REG_IsoXmitIntMaskClear 0x09C #define OHCI_REG_IsoRecvIntEventSet 0x0A0 #define OHCI_REG_IsoRecvIntEventClear 0x0A4 #define OHCI_REG_IsoRecvIntMaskSet 0x0A8 #define OHCI_REG_IsoRecvIntMaskClear 0x0AC #define OHCI_REG_InitialBandwidthAvailable 0x0B0 #define OHCI_REG_InitialChannelsAvailableHi 0x0B4 #define OHCI_REG_InitialChannelsAvailableLo 0x0B8 #define OHCI_REG_reserved_0bc 0x0BC #define OHCI_REG_reserved_0c0 0x0C0 #define OHCI_REG_reserved_0c4 0x0C4 #define OHCI_REG_reserved_0c8 0x0C8 #define OHCI_REG_reserved_0cc 0x0CC #define OHCI_REG_reserved_0d0 0x0D0 #define OHCI_REG_reserved_0d4 0x0D4 #define OHCI_REG_reserved_0d8 0x0D8 #define OHCI_REG_FairnessConctrol 0x0DC #define OHCI_REG_LinkControlSet 0x0E0 #define OHCI_REG_LinkControlClear 0x0E4 #define OHCI_REG_NodeId 0x0E8 #define OHCI_REG_PhyControl 0x0EC #define OHCI_REG_IsochronousCycleTimer 0x0F0 #define OHCI_REG_reserved_0f0 0x0F4 #define OHCI_REG_reserved_0f8 0x0F8 #define OHCI_REG_reserved_0fc 0x0FC #define OHCI_REG_AsynchronousRequestFilterHiSet 0x100 #define OHCI_REG_AsynchronousRequestFilterHiClear 0x104 #define OHCI_REG_AsynchronousRequestFilterLoSet 0x108 #define OHCI_REG_AsynchronousRequestFilterLoClear 0x10C #define OHCI_REG_PhysicalRequestFilterHiSet 0x110 #define OHCI_REG_PhysicalRequestFilterHiClear 0x114 #define OHCI_REG_PhysicalRequestFilterLoSet 0x118 #define OHCI_REG_PhysicalRequestFilterLoClear 0x11C #define OHCI_REG_PhysicalUpperBound 0x120 #define OHCI_REG_reserved_124 0x124 #define OHCI_REG_reserved_128 0x128 #define OHCI_REG_reserved_12c 0x12C #define OHCI_REG_reserved_130 0x130 #define OHCI_REG_reserved_134 0x134 #define OHCI_REG_reserved_138 0x138 #define OHCI_REG_reserved_13c 0x13C #define OHCI_REG_reserved_140 0x140 #define OHCI_REG_reserved_144 0x144 #define OHCI_REG_reserved_148 0x148 #define OHCI_REG_reserved_14c 0x14C #define OHCI_REG_reserved_150 0x150 #define OHCI_REG_reserved_154 0x154 #define OHCI_REG_reserved_158 0x158 #define OHCI_REG_reserved_15c 0x15C #define OHCI_REG_reserved_160 0x160 #define OHCI_REG_reserved_164 0x164 #define OHCI_REG_reserved_168 0x168 #define OHCI_REG_reserved_16c 0x16C #define OHCI_REG_reserved_170 0x170 #define OHCI_REG_reserved_174 0x174 #define OHCI_REG_reserved_178 0x178 #define OHCI_REG_reserved_17c 0x17C #define OHCI_REG_ASYNC_DMA_BASE 0x180 #define OHCI_CTX_ASYNC_TX_REQUEST 0 #define OHCI_CTX_ASYNC_TX_RESPONSE 1 #define OHCI_CTX_ASYNC_RX_REQUEST 2 #define OHCI_CTX_ASYNC_RX_RESPONSE 3 #define OHCI_SUBREG_ContextControlSet 0x000 #define OHCI_SUBREG_ContextControlClear 0x004 #define OHCI_SUBREG_reserved_008 0x008 #define OHCI_SUBREG_CommandPtr 0x00C #define OHCI_SUBREG_ContextMatch 0x010 #define OHCI_SUBREG_reserved_014 0x014 #define OHCI_SUBREG_reserved_018 0x018 #define OHCI_SUBREG_reserved_01c 0x01C #define OHCI_ASYNC_DMA_WRITE(sc, ctx, reg, val) \ OHCI_CSR_WRITE(sc, OHCI_REG_ASYNC_DMA_BASE + 32*(ctx) + (reg), val) #define OHCI_ASYNC_DMA_READ(sc, ctx, reg) \ OHCI_CSR_READ(sc, OHCI_REG_ASYNC_DMA_BASE + 32*(ctx) + (reg)) #define OHCI_REG_SYNC_TX_DMA_BASE 0x200 #define OHCI_SYNC_TX_DMA_WRITE(sc, ctx, reg, val) \ OHCI_CSR_WRITE(sc, OHCI_REG_SYNC_TX_DMA_BASE + 16*(ctx) + (reg), val) #define OHCI_SYNC_TX_DMA_READ(sc, ctx, reg) \ OHCI_CSR_READ(sc, OHCI_REG_SYNC_TX_DMA_BASE + 16*(ctx) + (reg)) #define OHCI_REG_SYNC_RX_DMA_BASE 0x400 #define OHCI_SYNC_RX_DMA_WRITE(sc, ctx, reg, val) \ OHCI_CSR_WRITE(sc, OHCI_REG_SYNC_RX_DMA_BASE + 32*(ctx) + (reg), val) #define OHCI_SYNC_RX_DMA_READ(sc, ctx, reg) \ OHCI_CSR_READ(sc, OHCI_REG_SYNC_RX_DMA_BASE + 32*(ctx) + (reg)) #define OHCI_BITVAL(val, name) \ ((((val) & name##_MASK) >> name##_BITPOS)) #define OHCI_BITSET(val, name) \ ((((val) << name##_BITPOS) & name##_MASK)) /* OHCI_REG_Version */ #define OHCI_Version_GUID_ROM 0x01000000 #define OHCI_Version_GET_Version(x) \ ((((x) >> 16) & 0xF) + (((x) >> 20) & 0xF) * 10) #define OHCI_Version_GET_Revision(x) \ ((((x) >> 4) & 0xF) + ((x) & 0xF) * 10) /* OHCI_REG_Guid_Rom */ #define OHCI_Guid_AddrReset 0x80000000 #define OHCI_Guid_RdStart 0x02000000 #define OHCI_Guid_RdData_MASK 0x00FF0000 #define OHCI_Guid_RdData_BITPOS 16 #define OHCI_Guid_MiniROM_MASK 0x000000FF #define OHCI_Guid_MiniROM_BITPOS 0 /* OHCI_REG_GUIDxx */ /* OHCI_REG_CsrControl */ #define OHCI_CsrControl_Done 0x80000000 #define OHCI_CsrControl_SelMASK 0x00000003 #define OHCI_CsrControl_BusManId 0 #define OHCI_CsrControl_BWAvail 1 #define OHCI_CsrControl_ChanAvailHi 2 #define OHCI_CsrControl_ChanAvailLo 3 /* OHCI_REG_BusOptions */ #define OHCI_BusOptions_LinkSpd_MASK 0x00000007 #define OHCI_BusOptions_LinkSpd_BITPOS 0 #define OHCI_BusOptions_G_MASK 0x000000C0 #define OHCI_BusOptions_G_BITPOS 6 #define OHCI_BusOptions_MaxRec_MASK 0x0000F000 #define OHCI_BusOptions_MaxRec_BITPOS 12 #define OHCI_BusOptions_CycClkAcc_MASK 0x00FF0000 #define OHCI_BusOptions_CycClkAcc_BITPOS 16 #define OHCI_BusOptions_PMC 0x08000000 #define OHCI_BusOptions_BMC 0x10000000 #define OHCI_BusOptions_ISC 0x20000000 #define OHCI_BusOptions_CMC 0x40000000 #define OHCI_BusOptions_IRMC 0x80000000 #define OHCI_BusOptions_reserved 0x07000F38 /* OHCI_REG_HCControl */ #define OHCI_HCControl_SoftReset 0x00010000 #define OHCI_HCControl_LinkEnable 0x00020000 #define OHCI_HCControl_PostedWriteEnable 0x00040000 #define OHCI_HCControl_LPS 0x00080000 #define OHCI_HCControl_APhyEnhanceEnable 0x00400000 #define OHCI_HCControl_ProgramPhyEnable 0x00800000 #define OHCI_HCControl_NoByteSwapData 0x40000000 #define OHCI_HCControl_BIBImageValid 0x80000000 /* OHCI_REG_SelfID */ #define OHCI_SelfID_Error 0x80000000 #define OHCI_SelfID_Gen_MASK 0x00FF0000 #define OHCI_SelfID_Gen_BITPOS 16 #define OHCI_SelfID_Size_MASK 0x000007FC #define OHCI_SelfID_Size_BITPOS 2 /* OHCI_REG_Int{Event|Mask}* */ #define OHCI_Int_MasterEnable 0x80000000 #define OHCI_Int_VendorSpecific 0x40000000 #define OHCI_Int_SoftInterrupt 0x20000000 #define OHCI_Int_Ack_Tardy 0x08000000 #define OHCI_Int_PhyRegRcvd 0x04000000 #define OHCI_Int_CycleTooLong 0x02000000 #define OHCI_Int_UnrecoverableError 0x01000000 #define OHCI_Int_CycleInconsistent 0x00800000 #define OHCI_Int_CycleLost 0x00400000 #define OHCI_Int_Cycle64Seconds 0x00200000 #define OHCI_Int_CycleSynch 0x00100000 #define OHCI_Int_Phy 0x00080000 #define OHCI_Int_RegAccessFail 0x00040000 #define OHCI_Int_BusReset 0x00020000 #define OHCI_Int_SelfIDComplete 0x00010000 #define OHCI_Int_SelfIDCOmplete2 0x00008000 #define OHCI_Int_LockRespErr 0x00000200 #define OHCI_Int_PostedWriteErr 0x00000100 #define OHCI_Int_IsochRx 0x00000080 #define OHCI_Int_IsochTx 0x00000040 #define OHCI_Int_RSPkt 0x00000020 #define OHCI_Int_RQPkt 0x00000010 #define OHCI_Int_ARRS 0x00000008 #define OHCI_Int_ARRQ 0x00000004 #define OHCI_Int_RespTxComplete 0x00000002 #define OHCI_Int_ReqTxComplete 0x00000001 /* OHCI_REG_LinkControl */ #define OHCI_LinkControl_CycleSource 0x00400000 #define OHCI_LinkControl_CycleMaster 0x00200000 #define OHCI_LinkControl_CycleTimerEnable 0x00100000 #define OHCI_LinkControl_RcvPhyPkt 0x00000400 #define OHCI_LinkControl_RcvSelfID 0x00000200 #define OHCI_LinkControl_Tag1SyncFilterLock 0x00000040 /* OHCI_REG_NodeId */ #define OHCI_NodeId_IDValid 0x80000000 #define OHCI_NodeId_ROOT 0x40000000 #define OHCI_NodeId_CPS 0x08000000 #define OHCI_NodeId_BusNumber 0x0000FFC0 #define OHCI_NodeId_NodeNumber 0x0000003F /* OHCI_REG_PhyControl */ #define OHCI_PhyControl_RdDone 0x80000000 #define OHCI_PhyControl_RdAddr_MASK 0x0F000000 #define OHCI_PhyControl_RdAddr_BITPOS 24 #define OHCI_PhyControl_RdData_MASK 0x00FF0000 #define OHCI_PhyControl_RdData_BITPOS 16 #define OHCI_PhyControl_RdReg 0x00008000 #define OHCI_PhyControl_WrReg 0x00004000 #define OHCI_PhyControl_RegAddr_MASK 0x00000F00 #define OHCI_PhyControl_RegAddr_BITPOS 8 #define OHCI_PhyControl_WrData_MASK 0x000000FF #define OHCI_PhyControl_WrData_BITPOS 0 /* * Section 3.1.1: ContextControl register * * */ #define OHCI_CTXCTL_RUN 0x00008000 #define OHCI_CTXCTL_WAKE 0x00001000 #define OHCI_CTXCTL_DEAD 0x00000800 #define OHCI_CTXCTL_ACTIVE 0x00000400 #define OHCI_CTXCTL_SPD_MASK 0x00E00000 #define OHCI_CTXCTL_SPD_BITPOS 21 #define OHCI_CTXCTL_SPD_100 0 #define OHCI_CTXCTL_SPD_200 1 #define OHCI_CTXCTL_SPD_400 2 #define OHCI_CTXCTL_EVENT_MASK 0x0000001F #define OHCI_CTXCTL_EVENT_BITPOS 0 /* Events from 0 to 15 are generated by the OpenHCI controller. * Events from 16 to 31 are four-bit IEEE 1394 ack codes or'ed with bit 4 set. */ #define OHCI_CTXCTL_EVENT_NO_STATUS 0 #define OHCI_CTXCTL_EVENT_RESERVED1 1 /* The received data length was greater than the buffer's data_length. */ #define OHCI_CTXCTL_EVENT_LONG_PACKET 2 /* A subaction gap was detected before an ack arrived or the received * ack had a parity error. */ #define OHCI_CTXCTL_EVENT_MISSING_ACK 3 /* Underrun on the corresponding FIFO. The packet was truncated. */ #define OHCI_CTXCTL_EVENT_UNDERRUN 4 /* A receive FIFO overflowed during the reception of an isochronous packet. */ #define OHCI_CTXCTL_EVENT_OVERRUN 5 /* An unrecoverable error occurred while the Host Controller was reading * a descriptor block. */ #define OHCI_CTXCTL_EVENT_DESCRIPTOR_READ 6 /* An error occurred while the Host Controller was attempting to read * from host memory in the data stage of descriptor processing. */ #define OHCI_CTXCTL_EVENT_DATA_READ 7 /* An error occurred while the Host Controller was attempting to write * to host memory either in the data stage of descriptor processing * (AR, IR), or when processing a single 16-bit host * memory write (IT). */ #define OHCI_CTXCTL_EVENT_DATA_WRITE 8 /* Identifies a PHY packet in the receive buffer as being the synthesized * bus reset packet. (See section 8.4.2.3). */ #define OHCI_CTXCTL_EVENT_BUS_RESET 9 /* Indicates that the asynchronous transmit response packet expired and * was not transmitted, or that an IT DMA context experienced a skip * processing overflow (See section 9.3.3). */ #define OHCI_CTXCTL_EVENT_TIMEOUT 10 /* A bad tCode is associated with this packet. The packet was flushed. */ #define OHCI_CTXCTL_EVENT_TCODE_ERR 11 #define OHCI_CTXCTL_EVENT_RESERVED12 12 #define OHCI_CTXCTL_EVENT_RESERVED13 13 /* An error condition has occurred that cannot be represented * by any other event codes defined herein. */ #define OHCI_CTXCTL_EVENT_UNKNOWN 14 /* Sent by the link side of the output FIFO when asynchronous * packets are being flushed due to a bus reset. */ #define OHCI_CTXCTL_EVENT_FLUSHED 15 /* IEEE1394 derived ACK codes follow */ #define OHCI_CTXCTL_EVENT_RESERVED16 16 /* For asynchronous request and response packets, this event * indicates the destination node has successfully accepted * the packet. If the packet was a request subaction, the * destination node has successfully completed the transaction * and no response subaction shall follow. The event code for * transmitted PHY, isochronous, asynchronous stream and broadcast * packets, none of which yields a 1394 ack code, shall be set * by hardware to ack_complete unless an event occurs. */ #define OHCI_CTXCTL_EVENT_ACK_COMPLETE 17 /* The destination node has successfully accepted the packet. * If the packet was a request subaction, a response subaction * should follow at a later time. This code is not returned for * a response subaction. */ #define OHCI_CTXCTL_EVENT_ACK_PENDING 18 #define OHCI_CTXCTL_EVENT_RESERVED19 19 /* The packet could not be accepted after max ATRetries (see * section 5.4) attempts, and the last ack received was ack_busy_X. */ #define OHCI_CTXCTL_EVENT_ACK_BUSY_X 20 /* The packet could not be accepted after max ATRetries (see * section 5.4) attempts, and the last ack received was ack_busy_A. */ #define OHCI_CTXCTL_EVENT_ACK_BUSY_A 21 /* The packet could not be accepted after max AT Retries (see * section 5.4) attempts, and the last ack received was ack_busy_B. */ #define OHCI_CTXCTL_EVENT_ACK_BUSY_B 22 #define OHCI_CTXCTL_EVENT_RESERVED23 23 #define OHCI_CTXCTL_EVENT_RESERVED24 24 #define OHCI_CTXCTL_EVENT_RESERVED25 25 #define OHCI_CTXCTL_EVENT_RESERVED26 26 /* The destination node could not accept the packet because * the link and higher layers are in a suspended state. */ #define OHCI_CTXCTL_EVENT_ACK_TARDY 27 #define OHCI_CTXCTL_EVENT_RESERVED28 28 /* An AT context received an ack_data_error, or an IR context * in packet-per-buffer mode detected a data field CRC or * data_length error. */ #define OHCI_CTXCTL_EVENT_ACK_DATA_ERROR 29 /* A field in the request packet header was set to an unsupported or * incorrect value, or an invalid transaction was attempted (e.g., a * write to a read-only address). */ #define OHCI_CTXCTL_EVENT_ACK_TYPE_ERROR 30 #define OHCI_CTXCTL_EVENT_RESERVED31 31 /* Context Control for isochronous transmit context */ #define OHCI_CTXCTL_TX_CYCLE_MATCH_ENABLE 0x80000000 #define OHCI_CTXCTL_TX_CYCLE_MATCH_MASK 0x7FFF0000 #define OHCI_CTXCTL_TX_CYCLE_MATCH_BITPOS 16 #define OHCI_CTXCTL_RX_BUFFER_FILL 0x80000000 #define OHCI_CTXCTL_RX_ISOCH_HEADER 0x40000000 #define OHCI_CTXCTL_RX_CYCLE_MATCH_ENABLE 0x20000000 #define OHCI_CTXCTL_RX_MULTI_CHAN_MODE 0x10000000 #define OHCI_CTXCTL_RX_DUAL_BUFFER_MODE 0x08000000 /* Context Match registers */ #define OHCI_CTXMATCH_TAG3 0x80000000 #define OHCI_CTXMATCH_TAG2 0x40000000 #define OHCI_CTXMATCH_TAG1 0x20000000 #define OHCI_CTXMATCH_TAG0 0x10000000 #define OHCI_CTXMATCH_CYCLE_MATCH_MASK 0x07FFF000 #define OHCI_CTXMATCH_CYCLE_MATCH_BITPOS 12 #define OHCI_CTXMATCH_SYNC_MASK 0x00000F00 #define OHCI_CTXMATCH_SYNC_BITPOS 8 #define OHCI_CTXMATCH_TAG1_SYNC_FILTER 0x00000040 #define OHCI_CTXMATCH_CHANNEL_NUMBER_MASK 0x0000003F #define OHCI_CTXMATCH_CHANNEL_NUMBER_BITPOS 0 /* * Miscellaneous definitions. */ #define OHCI_TCODE_PHY 0xE #if BYTE_ORDER == BIG_ENDIAN typedef struct fwohci_desc { u_int16_t fd_flags; u_int16_t fd_reqcount; u_int32_t fd_data; u_int32_t fd_branch; u_int16_t fd_status; u_int16_t fd_rescount; #if 0 /* XXX */ u_int32_t fd_immed[4]; #endif } fwohci_desc; #endif #if BYTE_ORDER == LITTLE_ENDIAN typedef struct fwohci_desc { u_int16_t fd_reqcount; u_int16_t fd_flags; u_int32_t fd_data; u_int32_t fd_branch; u_int16_t fd_rescount; u_int16_t fd_status; #if 0 /* XXX */ u_int32_t fd_immed[4]; #endif } fwohci_desc; #endif #define fd_timestamp fd_rescount #define OHCI_DESC_INPUT 0x2000 #define OHCI_DESC_LAST 0x1000 #define OHCI_DESC_STATUS 0x0800 #define OHCI_DESC_IMMED 0x0200 #define OHCI_DESC_PING 0x0080 #define OHCI_DESC_INTR_ALWAYS 0x0030 #define OHCI_DESC_INTR_ERR 0x0010 #define OHCI_DESC_BRANCH 0x000C #define OHCI_DESC_WAIT 0x0003 #define OHCI_DESC_MAX 8 /* Some constants for passing ACK values around with from status reg's */ #define OHCI_DESC_STATUS_ACK_MASK 0x1F #endif /* _DEV_IEEE1394_FWOHCIREG_ */