/*******************************************************************************
*Copyright (c) 2014 PMC-Sierra, Inc. All rights reserved.
*
*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.
*
*THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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
*
* $FreeBSD$
*
********************************************************************************/
#ifndef __SMPROTO_H__
#define __SMPROTO_H__
#include <dev/pms/RefTisa/sat/src/smtypes.h>
/***************** start of util ****************************************/
osGLOBAL FORCEINLINE void*
sm_memset(void *s, int c, bit32 n);
osGLOBAL FORCEINLINE void *
sm_memcpy(void *dst, const void *src, bit32 count);
osGLOBAL char
*sm_strncpy(char *dst, const char *src, bit32 len);
osGLOBAL void
smhexdump(const char *ptitle, bit8 *pbuf, size_t len);
/***************** end of util ****************************************/
/***************** start of timer fns ****************************************/
osGLOBAL void
smTimerTick(smRoot_t *smRoot );
osGLOBAL void
smInitTimerRequest(
smRoot_t *smRoot,
smTimerRequest_t *timerRequest
);
osGLOBAL void
smSetTimerRequest(
smRoot_t *smRoot,
smTimerRequest_t *timerRequest,
bit32 timeout,
smTimerCBFunc_t CBFunc,
void *timerData1,
void *timerData2,
void *timerData3
);
osGLOBAL void
smAddTimer(
smRoot_t *smRoot,
smList_t *timerListHdr,
smTimerRequest_t *timerRequest
);
osGLOBAL void
smKillTimer(
smRoot_t *smRoot,
smTimerRequest_t *timerRequest
);
osGLOBAL void
smProcessTimers(
smRoot_t *smRoot
);
/***************** end of timer fns ****************************************/
osGLOBAL void
smInitTimers(
smRoot_t *smRoot
);
osGLOBAL void
smDeviceDataInit(
smRoot_t *smRoot,
bit32 max_dev
);
osGLOBAL void
smIOInit(
smRoot_t *smRoot
);
osGLOBAL FORCEINLINE void
smIOReInit(
smRoot_t *smRoot,
smIORequestBody_t *smIORequestBody
);
osGLOBAL void
smDeviceDataReInit(
smRoot_t *smRoot,
smDeviceData_t *oneDeviceData
);
osGLOBAL void
smEnqueueIO(
smRoot_t *smRoot,
smSatIOContext_t *satIOContext
);
osGLOBAL FORCEINLINE void
smsatFreeIntIoResource(
smRoot_t *smRoot,
smDeviceData_t *satDevData,
smSatInternalIo_t *satIntIo
);
osGLOBAL smSatInternalIo_t *
smsatAllocIntIoResource(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceData_t *satDevData,
bit32 dmaAllocLength,
smSatInternalIo_t *satIntIo);
osGLOBAL smDeviceData_t *
smAddToSharedcontext(
smRoot_t *smRoot,
agsaDevHandle_t *agDevHandle,
smDeviceHandle_t *smDeviceHandle,
agsaDevHandle_t *agExpDevHandle,
bit32 phyID
);
osGLOBAL bit32
smRemoveFromSharedcontext(
smRoot_t *smRoot,
agsaDevHandle_t *agDevHandle,
smDeviceHandle_t *smDeviceHandle
);
osGLOBAL smDeviceData_t *
smFindInSharedcontext(
smRoot_t *smRoot,
agsaDevHandle_t *agDevHandle
);
osGLOBAL bit32
smsatLogSenseAllocate(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smSCSIRequest,
smSatIOContext_t *satIOContext,
bit32 payloadSize,
bit32 flag
);
osGLOBAL bit32
smsatIDSubStart(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smSCSIRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatIDStart(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smSCSIRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL FORCEINLINE bit32
smsatIOStart(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smSCSIRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL void
smsatSetSensePayload(
smScsiRspSense_t *pSense,
bit8 SnsKey,
bit32 SnsInfo,
bit16 SnsCode,
smSatIOContext_t *satIOContext
);
osGLOBAL void
smsatSetDeferredSensePayload(
smScsiRspSense_t *pSense,
bit8 SnsKey,
bit32 SnsInfo,
bit16 SnsCode,
smSatIOContext_t *satIOContext
);
osGLOBAL FORCEINLINE bit32
smsatIOPrepareSGL(
smRoot_t *smRoot,
smIORequestBody_t *smIORequestBody,
smSgl_t *smSgl1,
void *sglVirtualAddr
);
osGLOBAL FORCEINLINE void
smsatBitSet(smRoot_t *smRoot,bit8 *data, bit32 index);
osGLOBAL FORCEINLINE void
smsatBitClear(smRoot_t *smRoot,bit8 *data, bit32 index);
osGLOBAL FORCEINLINE BOOLEAN
smsatBitTest(smRoot_t *smRoot,bit8 *data, bit32 index);
osGLOBAL FORCEINLINE bit32
smsatTagAlloc(
smRoot_t *smRoot,
smDeviceData_t *pSatDevData,
bit8 *pTag
);
osGLOBAL FORCEINLINE bit32
smsatTagRelease(
smRoot_t *smRoot,
smDeviceData_t *pSatDevData,
bit8 tag
);
osGLOBAL FORCEINLINE void
smsatDecrementPendingIO(
smRoot_t *smRoot,
smIntContext_t *smAllShared,
smSatIOContext_t *satIOContext
);
osGLOBAL smSatIOContext_t *
smsatPrepareNewIO(
smSatInternalIo_t *satNewIntIo,
smIORequest_t *smOrgIORequest,
smDeviceData_t *satDevData,
smIniScsiCmnd_t *scsiCmnd,
smSatIOContext_t *satOrgIOContext
);
osGLOBAL void
smsatSetDevInfo(
smDeviceData_t *oneDeviceData,
agsaSATAIdentifyData_t *SATAIdData
);
osGLOBAL void
smsatInquiryStandard(
bit8 *pInquiry,
agsaSATAIdentifyData_t *pSATAIdData,
smIniScsiCmnd_t *scsiCmnd
);
osGLOBAL void
smsatInquiryPage0(
bit8 *pInquiry,
agsaSATAIdentifyData_t *pSATAIdData
);
osGLOBAL void
smsatInquiryPage83(
bit8 *pInquiry,
agsaSATAIdentifyData_t *pSATAIdData,
smDeviceData_t *oneDeviceData
);
osGLOBAL void
smsatInquiryPage89(
bit8 *pInquiry,
agsaSATAIdentifyData_t *pSATAIdData,
smDeviceData_t *oneDeviceData,
bit32 len
);
osGLOBAL void
smsatInquiryPage80(
bit8 *pInquiry,
agsaSATAIdentifyData_t *pSATAIdData
);
osGLOBAL void
smsatInquiryPageB1(
bit8 *pInquiry,
agsaSATAIdentifyData_t *pSATAIdData
);
osGLOBAL void
smsatDefaultTranslation(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smSatIOContext_t *satIOContext,
smScsiRspSense_t *pSense,
bit8 ataStatus,
bit8 ataError,
bit32 interruptContext
);
osGLOBAL bit32
smPhyControlSend(
smRoot_t *smRoot,
smDeviceData_t *oneDeviceData,
bit8 phyOp,
smIORequest_t *CurrentTaskTag,
bit32 queueNumber
);
osGLOBAL bit32
smsatTaskManagement(
smRoot_t *smRoot,
smDeviceHandle_t *smDeviceHandle,
bit32 task,
smLUN_t *lun,
smIORequest_t *taskTag,
smIORequest_t *currentTaskTag,
smIORequestBody_t *smIORequestBody
);
osGLOBAL bit32
smsatTmAbortTask(
smRoot_t *smRoot,
smIORequest_t *currentTaskTag,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *tiScsiRequest,
smSatIOContext_t *satIOContext,
smIORequest_t *taskTag);
osGLOBAL bit32
smsatStartCheckPowerMode(
smRoot_t *smRoot,
smIORequest_t *currentTaskTag,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatStartResetDevice(
smRoot_t *smRoot,
smIORequest_t *currentTaskTag,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL void
smsatAbort(
smRoot_t *smRoot,
agsaRoot_t *agRoot,
smSatIOContext_t *satIOContext
);
osGLOBAL smIORequestBody_t *
smDequeueIO(smRoot_t *smRoot);
osGLOBAL bit32
smsatDecodeSATADeviceType(bit8 * pSignature);
/******************************** beginning of start ******************************************************/
/*! \brief SAT implementation for ATAPI Packet Command.
*
* SAT implementation for ATAPI Packet and send FIS request to LL layer.
*
* \param smRoot: Pointer to TISA initiator driver/port instance.
* \param smIORequest: Pointer to TISA I/O request context for this I/O.
* \param smDeviceHandle: Pointer to TISA device handle for this I/O.
* \param smScsiRequest: Pointer to TISA SCSI I/O request and SGL list.
* \param smSatIOContext_t: Pointer to the SAT IO Context
*
* \return If command is started successfully
* - \e smIOSuccess: I/O request successfully initiated.
* - \e smIOBusy: No resources available, try again later.
* - \e smIOIONoDevice: Invalid device handle.
* - \e smIOError: Other errors.
*/
/*****************************************************************************/
osGLOBAL bit32
smsatPacket(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL void
smsatPacketCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
/*****************************************************************************/
/*! \brief SAT implementation for smsatExecuteDeviceDiagnostic.
*
* This function creates Execute Device Diagnostic fis and sends the request to LL layer
*
* \param smRoot: Pointer to TISA initiator driver/port instance.
* \param smIORequest: Pointer to TISA I/O request context for this I/O.
* \param smDeviceHandle: Pointer to TISA device handle for this I/O.
* \param smScsiRequest: Pointer to TISA SCSI I/O request and SGL list.
* \param smSatIOContext_t: Pointer to the SAT IO Context
*
* \return If command is started successfully
* - \e smIOSuccess: I/O request successfully initiated.
* - \e smIOBusy: No resources available, try again later.
* - \e smIOIONoDevice: Invalid device handle.
* - \e smIOError: Other errors.
*/
/*****************************************************************************/
osGLOBAL bit32
smsatExecuteDeviceDiagnostic(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL void
smsatExecuteDeviceDiagnosticCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
/* set feature for auto activate */
osGLOBAL bit32
smsatSetFeaturesAA(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL void
smsatSetFeaturesAACB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
/*****************************************************************************/
/*! \brief SAT implementation for satSetFeatures.
*
* This function creates SetFeatures fis and sends the request to LL layer
*
* \param smRoot: Pointer to TISA initiator driver/port instance.
* \param smIORequest: Pointer to TISA I/O request context for this I/O.
* \param smDeviceHandle: Pointer to TISA device handle for this I/O.
* \param smScsiRequest: Pointer to TISA SCSI I/O request and SGL list.
* \param smSatIOContext_t: Pointer to the SAT IO Context
*
* \return If command is started successfully
* - \e smIOSuccess: I/O request successfully initiated.
* - \e smIOBusy: No resources available, try again later.
* - \e smIOIONoDevice: Invalid device handle.
* - \e smIOError: Other errors.
*/
/*****************************************************************************/
osGLOBAL bit32
smsatSetFeaturesPIO(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL void
smsatSetFeaturesPIOCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
osGLOBAL bit32
smsatSetFeaturesDMA(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL void
smsatSetFeaturesDMACB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
osGLOBAL bit32
smsatSetFeaturesReadLookAhead(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL void
smsatSetFeaturesReadLookAheadCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
osGLOBAL bit32
smsatSetFeaturesVolatileWriteCache(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL void
smsatSetFeaturesVolatileWriteCacheCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
osGLOBAL void
smsatSMARTEnablePassCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle,
void *ioContext
);
osGLOBAL void
smsatSMARTRStatusPassCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
osGLOBAL void
smsatSMARTReadLogCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
/*****************************************************************************/
/*! \brief SAT implementation for SCSI REQUEST SENSE to ATAPI device.
*
* SAT implementation for SCSI REQUEST SENSE.
*
* \param smRoot: Pointer to TISA initiator driver/port instance.
* \param smIORequest: Pointer to TISA I/O request context for this I/O.
* \param smDeviceHandle: Pointer to TISA device handle for this I/O.
* \param smScsiRequest: Pointer to TISA SCSI I/O request and SGL list.
* \param smSatIOContext_t: Pointer to the SAT IO Context
*
* \return If command is started successfully
* - \e smIOSuccess: I/O request successfully initiated.
* - \e smIOBusy: No resources available, try again later.
* - \e smIOIONoDevice: Invalid device handle.
* - \e smIOError: Other errors.
*/
/*****************************************************************************/
osGLOBAL bit32
smsatRequestSenseForATAPI(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL void
smsatRequestSenseForATAPICB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
/*****************************************************************************/
/*! \brief SAT implementation for smsatDeviceReset.
*
* This function creates DEVICE RESET fis and sends the request to LL layer
*
* \param smRoot: Pointer to TISA initiator driver/port instance.
* \param smIORequest: Pointer to TISA I/O request context for this I/O.
* \param smDeviceHandle: Pointer to TISA device handle for this I/O.
* \param smScsiRequest: Pointer to TISA SCSI I/O request and SGL list.
* \param smSatIOContext_t: Pointer to the SAT IO Context
*
* \return If command is started successfully
* - \e smIOSuccess: I/O request successfully initiated.
* - \e smIOBusy: No resources available, try again later.
* - \e smIONoDevice: Invalid device handle.
* - \e smIOError: Other errors.
*/
/*****************************************************************************/
osGLOBAL bit32
smsatDeviceReset(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL void
smsatDeviceResetCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
osGLOBAL void
smsatTranslateATAPIErrorsToSCSIErrors(
bit8 bCommand,
bit8 bATAStatus,
bit8 bATAError,
bit8 *pSenseKey,
bit16 *pSenseCodeInfo
);
GLOBAL void
smsatTranslateATAErrorsToSCSIErrors(
bit8 bATAStatus,
bit8 bATAError,
bit8 *pSenseKey,
bit16 *pSenseCodeInfo
);
/*****************************************************************************/
osGLOBAL bit32
smsatRead6(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL FORCEINLINE bit32
smsatRead10(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatRead12(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatRead16(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatWrite6(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL FORCEINLINE bit32
smsatWrite10(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatWrite12(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatWrite16(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatVerify10(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatVerify12(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatVerify16(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatTestUnitReady(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatInquiry(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatRequestSense(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatModeSense6(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatModeSense10(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatReadCapacity10(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatReadCapacity16(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatReportLun(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatFormatUnit(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatSendDiagnostic(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatStartStopUnit(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatWriteSame10(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatWriteSame16(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatLogSense(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatModeSelect6(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatModeSelect10(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatSynchronizeCache10(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatSynchronizeCache16(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatWriteAndVerify10(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatWriteAndVerify12(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatWriteAndVerify16(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatReadMediaSerialNumber(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatReadBuffer(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatWriteBuffer(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatReassignBlocks(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatPassthrough(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL FORCEINLINE bit32
smsataLLIOStart(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatTestUnitReady_1(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatStartIDDev(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatSendIDDev(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatRequestSense_1(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatSMARTEnable(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatLogSense_2(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatLogSense_3(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatRead_1(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatWrite_1(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatNonChainedWriteNVerify_Verify(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatChainedWriteNVerify_Start_Verify(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatChainedWriteNVerify_Write(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatChainedWriteNVerify_Verify(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatChainedVerify(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatWriteSame10_1(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext,
bit32 lba
);
osGLOBAL bit32
smsatWriteSame10_2(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext,
bit32 lba
);
osGLOBAL bit32
smsatWriteSame10_3(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext,
bit32 lba
);
osGLOBAL bit32
smsatStartStopUnit_1(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatSendDiagnostic_1(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatSendDiagnostic_2(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatModeSelect6n10_1(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatLogSense_1(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatReassignBlocks_2(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext,
bit8 *LBA
);
osGLOBAL bit32
smsatReassignBlocks_1(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext,
smSatIOContext_t *satOrgIOContext
);
osGLOBAL bit32
smsatSendReadLogExt(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatCheckPowerMode(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatResetDevice(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL bit32
smsatDeResetDevice(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
/******************************** beginning of completion ******************************************************/
osGLOBAL FORCEINLINE void
smllSATACompleted(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
void *agFirstDword,
bit32 agIOInfoLen,
void *agParam
);
osGLOBAL FORCEINLINE void
smsatNonChainedDataIOCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
osGLOBAL FORCEINLINE void
smsatChainedDataIOCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
osGLOBAL void
smsatNonChainedVerifyCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle,
void *ioContext
);
osGLOBAL void
smsatChainedVerifyCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle,
void *ioContext
);
osGLOBAL void
smsatTestUnitReadyCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle,
void *ioContext
);
osGLOBAL void
smsatRequestSenseCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
osGLOBAL void
smsatSendDiagnosticCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle,
void *ioContext
);
osGLOBAL void
smsatStartStopUnitCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle,
void *ioContext
);
osGLOBAL void
smsatWriteSame10CB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle,
void *ioContext
);
osGLOBAL void
smsatLogSenseCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioCotext
);
osGLOBAL void
smsatSMARTEnableCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle,
void *ioContext
);
osGLOBAL void
smsatModeSelect6n10CB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle,
void *ioContext
);
osGLOBAL void
smsatSynchronizeCache10n16CB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle,
void *ioContext
);
osGLOBAL void
smsatNonChainedWriteNVerifyCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
osGLOBAL void
smsatChainedWriteNVerifyCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
osGLOBAL void
smsatReadMediaSerialNumberCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle,
void *ioContext
);
osGLOBAL void
smsatReadBufferCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle,
void *ioContext
);
osGLOBAL void
smsatWriteBufferCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle,
void *ioContext
);
osGLOBAL void
smsatReassignBlocksCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle,
void *ioContext
);
osGLOBAL void
smsatProcessAbnormalCompletion(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
smSatIOContext_t *satIOContext
);
osGLOBAL void
smsatDelayedProcessAbnormalCompletion(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
smSatIOContext_t *satIOContext
);
osGLOBAL void
smsatIOCompleted(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
agsaFisHeader_t *agFirstDword,
bit32 respFisLen,
agsaFrameHandle_t agFrameHandle,
smSatIOContext_t *satIOContext,
bit32 interruptContext
);
osGLOBAL void
smsatEncryptionHandler(
smRoot_t *smRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
bit32 agIOInfoLen,
void *agParam,
bit32 agOtherInfo,
bit32 interruptContext
);
osGLOBAL void
smsatDifHandler(
smRoot_t *smRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
bit32 agIOInfoLen,
void *agParam,
bit32 agOtherInfo,
bit32 interruptContext
);
osGLOBAL void
smsatProcessAbort(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smSatIOContext_t *satIOContext
);
osGLOBAL void
smsatNonDataIOCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
osGLOBAL void
smsatInquiryCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
osGLOBAL void
smsatInquiryIntCB(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext
);
osGLOBAL void
smsatVerify10CB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
osGLOBAL void
smsatReadLogExtCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
osGLOBAL void
smsatIDStartCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
osGLOBAL void
smSMPCompleted(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle
);
osGLOBAL void
smSMPCompletedCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle
);
osGLOBAL void
smPhyControlRespRcvd(
smRoot_t *smRoot,
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
smDeviceData_t *oneDeviceData,
smSMPFrameHeader_t *frameHeader,
agsaFrameHandle_t frameHandle,
smIORequest_t *CurrentTaskTag
);
osGLOBAL void
smsatCheckPowerModeCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle,
void *ioContext
);
osGLOBAL void
smsatCheckPowerModePassCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle,
void *ioContext
);
osGLOBAL void
smsatIDDataPassCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle,
void *ioContext
);
osGLOBAL void
smsatResetDeviceCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle,
void *ioContext
);
osGLOBAL void
smsatDeResetDeviceCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
agsaFrameHandle_t agFrameHandle,
void *ioContext
);
osGLOBAL void
smaSATAAbortCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 flag,
bit32 status
);
osGLOBAL void
smLocalPhyControlCB(
agsaRoot_t *agRoot,
agsaContext_t *agContext,
bit32 phyId,
bit32 phyOperation,
bit32 status,
void *parm
);
/******************************** end of completion ***********************************************************/
/******************************** start of utils ***********************************************************/
osGLOBAL bit32 smsatComputeCDB10LBA(smSatIOContext_t *satIOContext);
osGLOBAL bit32 smsatComputeCDB10TL(smSatIOContext_t *satIOContext);
osGLOBAL bit32 smsatComputeCDB12LBA(smSatIOContext_t *satIOContext);
osGLOBAL bit32 smsatComputeCDB12TL(smSatIOContext_t *satIOContext);
osGLOBAL bit32 smsatComputeCDB16LBA(smSatIOContext_t *satIOContext);
osGLOBAL bit32 smsatComputeCDB16TL(smSatIOContext_t *satIOContext);
osGLOBAL FORCEINLINE bit32 smsatComputeLoopNum(bit32 a, bit32 b);
osGLOBAL FORCEINLINE bit32 smsatCheckLimit(bit8 *lba, bit8 *tl, int flag, smDeviceData_t *pSatDevData);
osGLOBAL void
smsatSplitSGL(
smRoot_t *smRoot,
smIORequest_t *smIORequest,
smDeviceHandle_t *smDeviceHandle,
smScsiInitiatorRequest_t *smScsiRequest,
smSatIOContext_t *satIOContext,
bit32 split,
bit32 tl,
bit32 flag
);
osGLOBAL void
smsatPrintSgl(
smRoot_t *smRoot,
agsaEsgl_t *agEsgl,
bit32 idx
);
/******************************** end of utils ***********************************************************/
osGLOBAL void
smsatPassthroughCB(
agsaRoot_t *agRoot,
agsaIORequest_t *agIORequest,
bit32 agIOStatus,
agsaFisHeader_t *agFirstDword,
bit32 agIOInfoLen,
void *agParam,
void *ioContext
);
#endif /* __SMPROTO_H__ */