Files
m241Neelima/vxworks-6.9/target/h/hwif/ieee1394/ieee1394Lib.h
T
2026-07-30 11:19:44 +05:30

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