439 lines
11 KiB
C
439 lines
11 KiB
C
/* 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
|