/* ieee1394Lib.h - Kernel mode I/O interface for IEEE1394 driver */ /* * Copyright 2012, 2013-2014 Wind River Systems, Inc. * * The right to copy, distribute, modify or otherwise make use * of this software may be licensed only pursuant to the terms * of an applicable Wind River license agreement. */ /* modification history -------------------- 01i,11may14,wyy replace FW_RTP_MODE with FW_USE_SHM and enable it as default, then move ieee1394LibP.h to public folder (VXW6-80758) 01h,28feb13,wyy upgrade to v0.40 01g,10jan13,j_x upgrade to v0.35 01f,28dec12,j_x bundle fixes 01e,01dec12,j_x integration 01d,05aug12,add Updates from code review. 01c,31aug12,add Renamed to fwLib.h. 01b,30aug12,add Updates based on documentation feedback. 01a,25may12,add Initial version. */ #ifndef __INCieee1394LibPh #define __INCieee1394LibPh #ifdef __cplusplus extern "C" { #endif /* defines */ /* IO Requests */ #define FWIO_BASE (100) #define FWIO_ALLOCATE_ADDRESS_RANGE (FWIO_BASE + 0x01) #define FWIO_ASYNC_LOCK (FWIO_BASE + 0x02) #define FWIO_ASYNC_READ (FWIO_BASE + 0x03) #define FWIO_ASYNC_STREAM (FWIO_BASE + 0x04) #define FWIO_ASYNC_WRITE (FWIO_BASE + 0x05) #define FWIO_BUS_RESET (FWIO_BASE + 0x06) #define FWIO_BUS_RESET_NOTIFICATION (FWIO_BASE + 0x07) #define FWIO_FREE_ADDRESS_RANGE (FWIO_BASE + 0x08) #define FWIO_GET_CONFIG_ROM (FWIO_BASE + 0x09) #define FWIO_GET_GENERATION_COUNT (FWIO_BASE + 0x0A) #define FWIO_GET_GUID (FWIO_BASE + 0x0B) #define FWIO_GET_LOCAL_HOST_INFO (FWIO_BASE + 0x0C) #define FWIO_GET_MAX_SPEED_BETWEEN_DEVICES (FWIO_BASE + 0x0D) #define FWIO_GET_NODE_ADDRESS (FWIO_BASE + 0x0E) #define FWIO_ISOCH_ALLOCATE_BANDWIDTH (FWIO_BASE + 0x0F) #define FWIO_ISOCH_ALLOCATE_CHANNEL (FWIO_BASE + 0x10) #define FWIO_ISOCH_ALLOCATE_RX_RESOURCES (FWIO_BASE + 0x11) #define FWIO_ISOCH_ALLOCATE_TX_RESOURCES (FWIO_BASE + 0x12) #define FWIO_ISOCH_FREE_BANDWIDTH (FWIO_BASE + 0x13) #define FWIO_ISOCH_FREE_CHANNEL (FWIO_BASE + 0x14) #define FWIO_ISOCH_FREE_RESOURCES (FWIO_BASE + 0x15) #define FWIO_ISOCH_FREE_RX_BUFFER (FWIO_BASE + 0x16) #define FWIO_ISOCH_RECEIVE (FWIO_BASE + 0x17) #define FWIO_ISOCH_MODIFY_STREAM_PROPERTIES (FWIO_BASE + 0x18) #define FWIO_ISOCH_QUERY_CURRENT_CYCLE_TIME (FWIO_BASE + 0x19) #define FWIO_ISOCH_QUERY_RESOURCES (FWIO_BASE + 0x1A) #define FWIO_ISOCH_SET_CHANNEL_BANDWIDTH (FWIO_BASE + 0x1B) #define FWIO_ISOCH_STOP (FWIO_BASE + 0x1C) #define FWIO_ISOCH_TRANSMIT (FWIO_BASE + 0x1D) #define FWIO_SET_LOCAL_HOST_PROPERTIES (FWIO_BASE + 0x1F) #define FWIO_GET_VERSION (FWIO_BASE + 0x20) #define FWIO_SET_DRV_DEBUG (FWIO_BASE + 0x21) /* Error numbers */ #define M_fwLib (0x1394 << 16) #define S_fwLib_BUS_RESET (M_fwLib | 1) #define S_fwLib_DEVICE_ERROR (M_fwLib | 2) #define S_fwLib_INVALID_ARG (M_fwLib | 3) #define S_fwLib_DEVICE_BUSY (M_fwLib | 4) /* typedefs */ typedef struct nodeAddress { UINT16 nodeNumber : 6; UINT16 busNumber : 10; } FW_NODE_ADDRESS; typedef struct addressOffset { UINT16 offHigh; UINT32 offLow; } FW_ADDRESS_OFFSET; typedef struct addressRange { UINT16 offHigh; UINT16 offLength; UINT32 offLow; } FW_ADDRESS_RANGE; #define FW_ACCESS_FLAGS_TYPE_READ 1 #define FW_ACCESS_FLAGS_TYPE_WRITE 2 #define FW_ACCESS_FLAGS_TYPE_LOCK 4 #define FW_FLAGS_NOTIFY_NEVER 1 #define FW_FLAGS_NOTIFY_AFTER_READ 2 #define FW_FLAGS_NOTIFY_AFTER_LOCK 4 typedef struct allocateAddressRange { FW_ADDRESS_RANGE range; UINT32 accessType; UINT32 notifyFlags; VOID* pHandle; char shmName[80]; UINT32 shmSize; char shmNotifyMsgQName[80]; char wrPktMsgQName[80]; } FW_ALLOCATE_ADDRESS_RANGE; #define FW_ASYNC_WR_PKT_LEN (4096 + 24) /* 16Byte packet header, 4B trailer, 4B CRC for block write */ #define FW_ASYNC_WR_PKT_NUM_MSGS (1024) /* must be large enough to aviod overflow */ typedef struct { FW_NODE_ADDRESS node; UINT32 accessType; UINT32 dataOffset; UINT32 dataLength; } FW_ASYNC_SHM_NOTIFY_MSG; typedef enum { FW_LOCK_TRANSACTION_RSV = 0, FW_LOCK_TRANSACTION_MASK_SWAP = 1, FW_LOCK_TRANSACTION_COMPARE_SWAP, FW_LOCK_TRANSACTION_FETCH_ADD, FW_LOCK_TRANSACTION_LITTLE_ADD, FW_LOCK_TRANSACTION_BOUNDED_ADD, FW_LOCK_TRANSACTION_WRAP_ADD } LOCK_TRANS_TYPE; typedef struct asyncLock { FW_ADDRESS_OFFSET destAddress; UINT32 generation; UINT32 transType; UINT32 dataLength; UINT64 argValue; UINT64 dataValue; UINT64 oldDataValue; } FW_ASYNC_LOCK; typedef struct cycleTime { UINT32 cycleOffset : 12; UINT32 cycleCount : 13; UINT32 secondCount : 7; } FW_CYCLE_TIME; typedef struct getGenerationCount { UINT32 generationCount; } FW_GET_GENERATION_COUNT; typedef struct getNodeAddress { FW_NODE_ADDRESS nodeAddress; } FW_GET_NODE_ADDRESS; #define FW_BUS_RESET_FLAGS_FORCE_ROOT 0x00000001 typedef struct busReset { UINT32 flags; } FW_BUS_RESET; #define FW_REGISTER_NOTIFICATION_ROUTINE 0x00000001 #define FW_DEREGISTER_NOTIFICATION_ROUTINE 0x00000002 typedef struct busResetNotification { UINT32 flags; VOID (*func)(VOID *); VOID* pContext; } FW_BUS_RESET_NOTIFICATION; #define FW_GET_HOST_UNIQUE_ID 0x00000001 #define FW_GET_HOST_CAPABILITIES 0x00000002 #define FW_GET_HOST_CONFIG_ROM 0x00000003 #define FW_GET_HOST_PUBLIC_OBJECTS 0x00000004 typedef struct getLocalHostInformation { UINT32 level; VOID* pInfo; } FW_GET_LOCAL_HOST_INFORMATION; typedef struct getLocalHostPublicObjects { char busResetMsgQName[80]; } FW_GET_LOCAL_HOST_PUBLIC_OBJECTS; typedef struct busResetMsg { UINT32 generationCount; } FW_BUS_RESET_MSG; typedef struct getLocalHostCapabilities { UINT32 maxAsyncReadRequest; UINT32 maxAsyncWriteRequest; } FW_GET_LOCAL_HOST_CAPABILITIES; typedef struct getLocalHostCrom { VOID* pConfigRom; UINT32 configRomLength; UINT32 generation; } FW_GET_LOCAL_HOST_CROM, FW_GET_CONFIG_ROM; #define FW_SET_LOCAL_HOST_PROPERTIES_GAP_COUNT 0x00000001 #define FW_SET_LOCAL_HOST_PROPERTIES_MODIFY_CROM 0x00000002 typedef struct setLocalHostProperties { UINT32 level; VOID* pInfo; } FW_SET_LOCAL_HOST_PROPERTIES; #define FW_SLHP_FLAG_ADD_CROM_DATA 0x00000001 #define FW_SLHP_FLAG_REMOVE_CROM_DATA 0x00000002 typedef struct setLocalHostPropCrom { UINT32 flags; VOID* handle; UINT32 length; VOID* pUnitDir; } FW_SET_LOCAL_HOST_PROP_CROM; typedef struct getGUID { UINT64 guid; } FW_GET_GUID, FW_GET_LOCAL_HOST_GUID; typedef struct setLocalHostPropGapCount { UINT32 gapCountLowerBound; } SET_LOCAL_HOST_PROP_GAP_COUNT; typedef struct asyncRead { FW_ADDRESS_OFFSET destAddress; UINT32 generation; VOID* pData; UINT32 length; } FW_ASYNC_READ; typedef struct asyncWrite { FW_ADDRESS_OFFSET destAddress; UINT32 generation; VOID* pData; UINT32 length; } FW_ASYNC_WRITE; typedef struct asyncStream { UINT32 tag; UINT32 channel; UINT32 synch; UINT32 speed; UINT32 length; VOID* pData; } FW_ASYNC_STREAM; #define FW_SPEED_100 0x01 #define FW_SPEED_200 0x02 #define FW_SPEED_400 0x04 #define FW_SPEED_800 0x08 #define FW_SPEED_1600 0x10 #define FW_SPEED_3200 0x20 typedef struct getMaxSpeedBetweenDevices { UINT32 numberOfNodes; FW_NODE_ADDRESS destNodes[64]; UINT32 maxSpeed; } FW_GET_MAX_SPEED_BETWEEN_DEVICES; #define ISOCH_ANY_CHANNEL 0xffffffff typedef struct isochAllocateChannel { UINT32 requestedChannel; UINT32 channel; UINT64 channelsAvailable; } FW_ISOCH_ALLOCATE_CHANNEL; typedef struct isochFreeChannel { UINT32 channel; } FW_ISOCH_FREE_CHANNEL; typedef struct isochAllocateBandwidth { UINT32 bytesPerFrameRequested; UINT32 speed; VOID* pBandwidth; UINT32 bytesPerFrameAvailable; UINT32 speedSelected; } FW_ISOCH_ALLOCATE_BANDWIDTH; #define RESOURCE_STRIP_ISOCH_HEADER 0x01 typedef struct isochAllocateRxResources { UINT32 speed; UINT32 flags; UINT32 channel; UINT32 bufferSize; UINT32 numberOfBuffers; UINT32 watermark; VOID* pResource; char notifyMsgQName[80]; char shmName[80]; UINT32 shmSize; } FW_ISOCH_ALLOCATE_RX_RESOURCES; typedef struct isochAllocateTxResources { UINT32 speed; UINT32 channel; VOID* pResource; UINT32 bufferSize; UINT32 numberOfBuffers; UINT32 watermark; char notifyMsgQName[80]; } FW_ISOCH_ALLOCATE_TX_RESOURCES; typedef struct isochRxBufComplete { size_t bufferOffset; size_t bufferLength; VOID* pContext; FW_CYCLE_TIME cycleTime; UINT32 droppedCount; } FW_ISOCH_RX_BUFFER_COMPLETE; typedef struct fwIsochFreeRxBuffer { VOID* pContext; } FW_ISOCH_FREE_RX_BUFFER; typedef struct isochTxBufComplete { VOID* pBuffer; UINT32 bufferLength; FW_CYCLE_TIME cycleTime; UINT32 droppedCount; } FW_ISOCH_TX_BUFFER_COMPLETE; typedef struct isochQueryCurrentCycleTime { FW_CYCLE_TIME cycleTime; } FW_ISOCH_QUERY_CURRENT_CYCLE_TIME; typedef struct isochQueryResource { UINT32 speed; UINT32 bytesPerFrameAvailable; UINT64 channelsAvailable; } FW_ISOCH_QUERY_RESOURCES; typedef struct isochFreeResources { VOID* pResource; } FW_ISOCH_FREE_RESOURCES; typedef struct isochFreeBandwidth { VOID* pBandwidth; } FW_ISOCH_FREE_BANDWIDTH; typedef struct isochSetChannelBandwidth { VOID* pBandwidth; UINT32 maxBytesPerFrame; } FW_ISOCH_SET_CHANNEL_BANDWIDTH; typedef struct isochModifyStreamProperties { VOID* pResource; UINT32 channel; UINT32 speed; } FW_ISOCH_MODIFY_STREAM_PROPERTIES; typedef struct isochStop { VOID* pResource; } FW_ISOCH_STOP; typedef struct isochTransmit { VOID* pResource; VOID* pBuffer; UINT32 length; } FW_ISOCH_TRANSMIT; typedef struct isochReceive { VOID* pResource; } FW_ISOCH_RECEIVE; typedef struct freeAddressRange { VOID* pHandle; } FW_FREE_ADDRESS_RANGE; typedef struct getVersion { UINT8 major; UINT8 minor; char buildStr[80]; } FW_GET_VERSION; typedef struct setDrvDebug { UINT32 flags; } FW_SET_DRV_DEBUG; #ifdef __cplusplus } #endif #endif