#ifndef OSTIAPI_H
#define OSTIAPI_H
osGLOBAL bit32 ostiGetTransportParam(
tiRoot_t *tiRoot,
char *key,
char *subkey1,
char *subkey2,
char *subkey3,
char *subkey4,
char *subkey5,
char *valueName,
char *buffer,
bit32 bufferLen,
bit32 *lenReceived
);
osGLOBAL void ostiPortEvent(
tiRoot_t *tiRoot,
tiPortEvent_t eventType,
bit32 status,
void *pParm
);
osGLOBAL bit32 ostiTimeStamp( tiRoot_t *tiRoot);
osGLOBAL bit64 ostiTimeStamp64( tiRoot_t *tiRoot);
osGLOBAL FORCEINLINE bit32 ostiChipConfigReadBit32(
tiRoot_t *tiRoot,
bit32 chipConfigOffset
);
osGLOBAL FORCEINLINE void ostiChipConfigWriteBit32(
tiRoot_t *tiRoot,
bit32 chipConfigOffset,
bit32 chipConfigValue
);
osGLOBAL FORCEINLINE bit32 ostiChipReadBit32(
tiRoot_t *tiRoot,
bit32 chipOffset
);
osGLOBAL FORCEINLINE void ostiChipWriteBit32(
tiRoot_t *tiRoot,
bit32 chipOffset,
bit32 chipValue
);
osGLOBAL FORCEINLINE bit8 ostiChipReadBit8(
tiRoot_t *tiRoot,
bit32 chipOffset
);
osGLOBAL FORCEINLINE void ostiChipWriteBit8(
tiRoot_t *tiRoot,
bit32 chipOffset,
bit8 chipValue
);
osGLOBAL void ostiFlashReadBlock(
tiRoot_t *tiRoot,
bit32 flashOffset,
void *buffer,
bit32 bufferLen
);
osGLOBAL FORCEINLINE
tiDeviceHandle_t*
ostiGetDevHandleFromSasAddr(
tiRoot_t *root,
unsigned char *sas_addr
);
osGLOBAL FORCEINLINE void ostidisableEncryption(tiRoot_t *root);
osGLOBAL FORCEINLINE void ostiSingleThreadedEnter(
tiRoot_t *tiRoot,
bit32 queueId
);
osGLOBAL FORCEINLINE void ostiSingleThreadedLeave(
tiRoot_t *tiRoot,
bit32 queueId
);
osGLOBAL bit32 ostiNumOfLUNIOCTLreq(tiRoot_t *root,
void *param1,
void *param2,
void **tiRequestBody,
tiIORequest_t **tiIORequest
);
#ifdef PERF_COUNT
osGLOBAL void ostiEnter(tiRoot_t *ptiRoot, bit32 layer, int io);
osGLOBAL void ostiLeave(tiRoot_t *ptiRoot, bit32 layer, int io);
#define OSTI_INP_ENTER(root) ostiEnter(root, 2, 0)
#define OSTI_INP_LEAVE(root) ostiLeave(root, 2, 0)
#define OSTI_OUT_ENTER(root) ostiEnter(root, 2, 1)
#define OSTI_OUT_LEAVE(root) ostiLeave(root, 2, 1)
#else
#define OSTI_INP_ENTER(root)
#define OSTI_INP_LEAVE(root)
#define OSTI_OUT_ENTER(root)
#define OSTI_OUT_LEAVE(root)
#endif
osGLOBAL void ostiStallThread(
tiRoot_t *tiRoot,
bit32 microseconds
);
osGLOBAL FORCEINLINE bit8
ostiBitScanForward(
tiRoot_t *root,
bit32 *Index,
bit32 Mask
);
#ifdef LINUX_VERSION_CODE
osGLOBAL sbit32
ostiAtomicIncrement(
tiRoot_t *root,
sbit32 volatile *Addend
);
osGLOBAL sbit32
ostiAtomicDecrement(
tiRoot_t *root,
sbit32 volatile *Addend
);
osGLOBAL sbit32
ostiAtomicBitClear(
tiRoot_t *root,
sbit32 volatile *Destination,
sbit32 Value
);
osGLOBAL sbit32
ostiAtomicBitSet(
tiRoot_t *root,
sbit32 volatile *Destination,
sbit32 Value
);
osGLOBAL sbit32
ostiAtomicExchange(
tiRoot_t *root,
sbit32 volatile *Target,
sbit32 Value
);
#else
osGLOBAL FORCEINLINE sbit32
ostiInterlockedIncrement(
tiRoot_t *root,
sbit32 volatile *Addend
);
osGLOBAL FORCEINLINE sbit32
ostiInterlockedDecrement(
tiRoot_t *root,
sbit32 volatile *Addend
);
osGLOBAL FORCEINLINE sbit32
ostiInterlockedAnd(
tiRoot_t *root,
sbit32 volatile *Destination,
sbit32 Value
);
osGLOBAL FORCEINLINE sbit32
ostiInterlockedOr(
tiRoot_t *root,
sbit32 volatile *Destination,
sbit32 Value
);
osGLOBAL FORCEINLINE sbit32
ostiInterlockedExchange(
tiRoot_t *root,
sbit32 volatile *Target,
sbit32 Value
);
#endif
osGLOBAL bit32 ostiAllocMemory(
tiRoot_t *tiRoot,
void **osMemHandle,
void ** virtPtr,
bit32 * physAddrUpper,
bit32 * physAddrLower,
bit32 alignment,
bit32 allocLength,
agBOOLEAN isCacheable
);
osGLOBAL bit32 ostiFreeMemory(
tiRoot_t *tiRoot,
void *osDMAHandle,
bit32 allocLength
);
osGLOBAL FORCEINLINE void ostiCacheFlush(
tiRoot_t *tiRoot,
void *osMemHandle,
void *virtPtr,
bit32 length
);
osGLOBAL FORCEINLINE void ostiCacheInvalidate(
tiRoot_t *tiRoot,
void *osMemHandle,
void *virtPtr,
bit32 length
);
osGLOBAL FORCEINLINE void ostiCachePreFlush(
tiRoot_t *tiRoot,
void *osMemHandle,
void *virtPtr,
bit32 length
);
osGLOBAL void
ostiInterruptEnable(
tiRoot_t *ptiRoot,
bit32 channelNum
);
osGLOBAL void
ostiInterruptDisable(
tiRoot_t *ptiRoot,
bit32 channelNum
);
osGLOBAL FORCEINLINE bit32
ostiChipReadBit32Ext(
tiRoot_t *tiRoot,
bit32 busBaseNumber,
bit32 chipOffset
);
osGLOBAL FORCEINLINE void
ostiChipWriteBit32Ext(
tiRoot_t *tiRoot,
bit32 busBaseNumber,
bit32 chipOffset,
bit32 chipValue
);
osGLOBAL void ostiInitiatorIOCompleted(
tiRoot_t *tiRoot,
tiIORequest_t *tiIORequest,
tiIOStatus_t status,
bit32 statusDetail,
tiSenseData_t *senseData,
bit32 context
);
osGLOBAL tiDeviceHandle_t*
ostiMapToDevHandle(tiRoot_t *root,
bit8 pathId,
bit8 targetId,
bit8 LUN
);
osGLOBAL bit32 ostiSendResetDeviceIoctl(tiRoot_t *root,
void *pccb,
bit8 pathId,
bit8 targetId,
bit8 lun,
unsigned long resetType
);
osGLOBAL void
ostiGetSenseKeyCount(tiRoot_t *root,
bit32 fIsClear,
void *SenseKeyCount,
bit32 length
);
osGLOBAL void
ostiGetSCSIStatusCount(tiRoot_t *root,
bit32 fIsClear,
void *ScsiStatusCount,
bit32 length
);
osGLOBAL bit32
ostiSetDeviceQueueDepth(tiRoot_t *tiRoot,
tiIORequest_t *tiIORequest,
bit32 QueueDepth
);
#ifdef FAST_IO_TEST
typedef void (*ostiFastSSPCb_t)(tiRoot_t *ptiRoot,
void *arg,
tiIOStatus_t IOStatus,
bit32 statusDetail);
void osti_FastIOCb(tiRoot_t *ptiRoot,
void *arg,
tiIOStatus_t IOStatus,
bit32 statusDetail);
#endif
osGLOBAL void
ostiInitiatorSMPCompleted(tiRoot_t *tiRoot,
tiIORequest_t *tiSMPRequest,
tiSMPStatus_t smpStatus,
bit32 tiSMPInfoLen,
void *tiFrameHandle,
bit32 context);
osGLOBAL void ostiInitiatorEvent (
tiRoot_t *tiRoot,
tiPortalContext_t *portalContext,
tiDeviceHandle_t *tiDeviceHandle,
tiIntrEventType_t eventType,
bit32 eventStatus,
void *parm
);
osGLOBAL void ostiIOCTLClearSignal (
tiRoot_t *tiRoot,
void **agParam1,
void **agParam2,
void **agParam3
);
osGLOBAL void ostiIOCTLWaitForSignal (
tiRoot_t *tigRoot,
void *agParam1,
void *agParam2,
void *agParam3
);
osGLOBAL void ostiIOCTLSetSignal (
tiRoot_t *tiRoot,
void *agParam1,
void *agParam2,
void *agParam3
);
osGLOBAL void ostiIOCTLWaitForComplete (
tiRoot_t *tigRoot,
void *agParam1,
void *agParam2,
void *agParam3
);
osGLOBAL void ostiIOCTLComplete (
tiRoot_t *tiRoot,
void *agParam1,
void *agParam2,
void *agParam3
);
osGLOBAL void ostiProcessScsiReq(
tiRoot_t *tiRoot,
tiTargetScsiCmnd_t *tiTgtScsiCmnd,
void *agFrameHandle,
bit32 immDataLength,
tiIORequest_t *tiIORequest,
tiDeviceHandle_t *tiDeviceHandle);
osGLOBAL void ostiNextDataPhase(
tiRoot_t *tiRoot,
tiIORequest_t *tiIORequest);
osGLOBAL void ostiTaskManagement (
tiRoot_t *tiRoot,
bit32 task,
bit8 *scsiLun,
tiIORequest_t *refTiIORequest,
tiIORequest_t *tiTMRequest,
tiDeviceHandle_t *tiDeviceHandle);
osGLOBAL void ostiTargetIOCompleted(
tiRoot_t *tiRoot,
tiIORequest_t *tiIORequest,
tiIOStatus_t status
);
osGLOBAL bit32 ostiTargetEvent (
tiRoot_t *tiRoot,
tiPortalContext_t *portalContext,
tiDeviceHandle_t *tiDeviceHandle,
tiTgtEventType_t eventType,
bit32 eventStatus,
void *parm
);
osGLOBAL void ostiTargetIOError(
tiRoot_t *tiRoot,
tiIORequest_t *tiIORequest,
tiIOStatus_t status,
bit32 statusDetail
);
osGLOBAL void ostiTargetTmCompleted(
tiRoot_t *tiRoot,
tiIORequest_t *tiTmRequest,
tiIOStatus_t status,
bit32 statusDetail
);
osGLOBAL void ostiPCI_TRIGGER( tiRoot_t *tiRoot );
#endif