46#ifdef INITIATOR_DRIVER
55extern bit32 gSMDebugLevel;
69 TI_DBG2((
"smReportRemovalDirect: start\n"));
71 PhyID = oneDeviceData->
phyID;
86 (
void *)tdsaAllShared->Ports[PhyID].tiPortalContext
88#ifdef INITIATOR_DRIVER
94 (
void *) tdsaAllShared->Ports[PhyID].tiPortalContext
108 TI_DBG2((
"smReportRemoval: start\n"));
148 TI_DBG2((
"smHandleDirect: start\n"));
149 PhyID = oneDeviceData->
phyID;
155 DeviceListList = tdsaAllShared->MainDeviceList.
flink;
156 while (DeviceListList != &(tdsaAllShared->MainDeviceList))
159 if (tmpOneDeviceData ==
agNULL)
161 TI_DBG1((
"smHandleDirect: tmpOneDeviceData is NULL!!!\n"));
164 TI_DBG1((
"smHandleDirect: LOOP tmpOneDeviceData %p did %d\n", tmpOneDeviceData, tmpOneDeviceData->
id));
182 TI_DBG2((
"smHandleDirect: did %d\n", tmpOneDeviceData->
id));
186 DeviceListList = DeviceListList->
flink;
192 TI_DBG2((
"smHandleDirect: old device data\n"));
196 tmpOneDeviceData->
agRoot = agRoot;
200 tmpOneDeviceData->
phyID = oneDeviceData->
phyID;
210 TI_DBG2((
"smHandleDirect: re-registering old device data\n"));
228 TI_DBG2((
"smHandleDirect: pid %d\n", tdsaAllShared->Ports[PhyID].portContext->id));
234 (
void *)tdsaAllShared->Ports[PhyID].tiPortalContext
238#ifdef INITIATOR_DRIVER
244 (
void *) tdsaAllShared->Ports[PhyID].tiPortalContext
250 TI_DBG2((
"smHandleDirect: new device data\n"));
257 (
void *)tdsaAllShared->Ports[PhyID].tiPortalContext
259#ifdef INITIATOR_DRIVER
265 (
void *) tdsaAllShared->Ports[PhyID].tiPortalContext
296 TI_DBG2((
"tdsmIDCompletedCB: start\n"));
303 if (smDeviceHandle ==
agNULL)
305 TI_DBG1((
"tdsmIDCompletedCB: smDeviceHandle is NULL !!!!\n"));
316 agRoot = oneDeviceData->
agRoot;
317 pid = tdIORequestBody->pid;
323 TI_DBG2((
"tdsmIDCompletedCB: tdIORequestBody %p tdIORequestBody->osMemHandle %p\n", tdIORequestBody, tdIORequestBody->
osMemHandle));
327 if (oneDeviceData->tdIDTimer.timerRunning ==
agTRUE)
332 &oneDeviceData->tdIDTimer
340 if (onePortContext ==
agNULL)
342 TI_DBG1((
"tdsmIDCompletedCB: onePortContext is NULL!!!\n"));
352 if (pid != onePortContext->
id)
354 TI_DBG1((
"tdsmIDCompletedCB: not matching pid; pid %d onePortContext->id %d!!!\n", pid, onePortContext->
id));
357 smReportRemovalDirect(
tiRoot, agRoot, oneDeviceData);
361 smReportRemoval(
tiRoot, agRoot, oneDeviceData, onePortContext);
375 TI_DBG1((
"tdsmIDCompletedCB: tiPortalContext is NULL!!!\n"));
378 smReportRemovalDirect(
tiRoot, agRoot, oneDeviceData);
382 smReportRemoval(
tiRoot, agRoot, oneDeviceData, onePortContext);
394 TI_DBG1((
"tdsmIDCompletedCB: agRoot is NULL!!!\n"));
405 TI_DBG2((
"tdsmIDCompletedCB: smIOSuccess\n"));
410 TI_DBG2((
"tdsmIDCompletedCB: directlyAttached\n"));
412 smHandleDirect(
tiRoot, agRoot, oneDeviceData, IDdata);
421 TI_DBG2((
"tdsmIDCompletedCB: expander attached\n"));
425 TI_DBG1((
"tdsmIDCompletedCB: ID completed after discovery is done; tiDeviceArrival\n"));
437 TI_DBG2((
"tdsmIDCompletedCB: tdIORequestBody %p tdIORequestBody->osMemHandle %p\n", tdIORequestBody, tdIORequestBody->
osMemHandle));
447 TI_DBG1((
"tdsmIDCompletedCB: smIORetry!!!\n"));
452 TI_DBG1((
"tdsmIDCompletedCB: smIORetry but device is not valid!!!\n"));
465 if (tdIORequestBody->
reTries <= SM_RETRIES)
468 tdIORequestBody->pid = onePortContext->
id;
469 smIORequest->
tdData = tdIORequestBody;
470 smIORequest->
smData = &tdIORequestBody->smIORequestBody;
472 smDeviceHandle->
tdData = oneDeviceData;
483 TI_DBG1((
"tdsmIDCompletedCB: smIDStart fail or busy %d!!!\n", IDstatus));
492 smReportRemoval(
tiRoot, agRoot, oneDeviceData, onePortContext);
500 tdIDStartTimer(
tiRoot, smIORequest, oneDeviceData);
501 TI_DBG1((
"tdsmIDCompletedCB: being retried!!!\n"));
506 TI_DBG1((
"tdsmIDCompletedCB: retries are over!!!\n"));
517 smReportRemoval(
tiRoot, agRoot, oneDeviceData, onePortContext);
523 TI_DBG1((
"tdsmIDCompletedCB: smIOSTPResourceBusy\n"));
530 if (tdsaAllShared->
FCA)
532 if (oneDeviceData->SMNumOfFCA <= 0)
534 TI_DBG1((
"tdsmIDCompletedCB: OSSA_IO_OPEN_CNX_ERROR_STP_RESOURCES_BUSY; sending HARD_RESET\n"));
535 oneDeviceData->SMNumOfFCA++;
536 tdsaPhyControlSend(
tiRoot,
546 TI_DBG1((
"tdsmIDCompletedCB: OSSA_IO_OPEN_CNX_ERROR_STP_RESOURCES_BUSY; but giving up sending HARD_RESET!!!\n"));
547 smReportRemoval(
tiRoot, agRoot, oneDeviceData, onePortContext);
557 TI_DBG1((
"tdsmIDCompletedCB: smIDStart fail, status 0x%x!!!\n",
status));
558 TI_DBG1((
"tdsmIDCompletedCB: did %d!!!\n", oneDeviceData->
id));
563 TI_DBG1((
"tdsmIDCompletedCB: fail but device is not valid!!!\n"));
578 if (tdIORequestBody->
reTries <= SM_RETRIES)
581 tdIORequestBody->pid = onePortContext->
id;
582 smIORequest->
tdData = tdIORequestBody;
583 smIORequest->
smData = &tdIORequestBody->smIORequestBody;
585 smDeviceHandle->
tdData = oneDeviceData;
593 TI_DBG1((
"tdsmIDCompletedCB: smIDStart fail or busy %d!!!\n", IDstatus));
605 smReportRemovalDirect(
tiRoot, agRoot, oneDeviceData);
609 smReportRemoval(
tiRoot, agRoot, oneDeviceData, onePortContext);
618 tdIDStartTimer(
tiRoot, smIORequest, oneDeviceData);
619 TI_DBG1((
"tdsmIDCompletedCB: being retried!!!\n"));
624 TI_DBG1((
"tdsmIDCompletedCB: retries are over; sending hard reset!!!\n"));
635 if (oneDeviceData->SMNumOfID <= 0)
637 TI_DBG1((
"tdsmIDCompletedCB: fail; sending HARD_RESET\n"));
638 oneDeviceData->SMNumOfID++;
645 tdsaPhyControlSend(
tiRoot,
656 TI_DBG1((
"tdsmIDCompletedCB: fail; but giving up sending HARD_RESET!!!\n"));
659 smReportRemovalDirect(
tiRoot, agRoot, oneDeviceData);
663 smReportRemoval(
tiRoot, agRoot, oneDeviceData, onePortContext);
687 bit32 interruptContext
705 TI_DBG5((
"tdsmIOCompletedCB: start\n"));
718 TI_DBG1((
"tdsmIOCompletedCB: smIORetry!!!\n"));
719 smIORequest = (
smIORequest_t *)&(tdIORequestBody->smIORequest);
727 TI_DBG1((
"tdsmIOCompletedCB: smIORetry but device is not valid!!!\n"));
739 if (tdIORequestBody->
reTries <= SM_RETRIES)
742 if (tdIORequestBody->superIOFlag ==
agTRUE)
766 TI_DBG1((
"tdsmIOCompletedCB: smIDStart fail or busy %d!!!\n", SMStatus));
780 TI_DBG1((
"tdsmIOCompletedCB: being retried!!!\n"));
789 TI_DBG1((
"tdsmIOCompletedCB: retries are over!!!\n"));
806 TI_DBG1((
"tdsmIOCompletedCB: smIOSTPResourceBusy\n"));
807 if (tdsaAllShared->
FCA)
809 smIORequest = (
smIORequest_t *)&(tdIORequestBody->smIORequest);
812 if (oneDeviceData->SMNumOfFCA <= 0)
814 TI_DBG1((
"tdsmIOCompletedCB: OSSA_IO_OPEN_CNX_ERROR_STP_RESOURCES_BUSY; sending HARD_RESET\n"));
815 oneDeviceData->SMNumOfFCA++;
816 tdsaPhyControlSend(
tiRoot,
826 TI_DBG1((
"tdsmIOCompletedCB: OSSA_IO_OPEN_CNX_ERROR_STP_RESOURCES_BUSY; but giving up sending HARD_RESET!!!\n"));
843 TI_DBG1((
"tdsmIOCompletedCB: agIOStatus = OSSA_IO_ABORTED did %d\n", oneDeviceData->
id));
894 TI_DBG2((
"tdsmEventCB: start\n"));
904 if (oneDeviceData ==
agNULL)
906 TI_DBG1((
"tdsmEventCB: oneDeviceData is NULL\n"));
928 if (SMcurrentTaskTag ==
agNULL)
930 TI_DBG1((
"tdsmEventCB: SMcurrentTaskTag is NULL!!!\n"));
935 if (tdIORequestBody ==
agNULL)
937 TI_DBG1((
"tdsmEventCB: tdIORequestBody is NULL!!!\n"));
946 if (oneDeviceData ==
agNULL)
948 TI_DBG1((
"tdsmEventCB: oneDeviceData is NULL!!!\n"));
954 if (onePortContext ==
agNULL)
956 TI_DBG1((
"tdsmEventCB: onePortContext is NULL!!!\n"));
969 TI_DBG2((
"tdsmEventCB: calling ostiInitiatorEvent\n"));
976 (
void *)currentTaskTag
1011 TI_DBG7((
"tdsmSingleThreadedEnter: start\n"));
1016 TI_DBG1((
"tdsmSingleThreadedEnter: tdsaRoot is NULL\n"));
1021 if (tdsaAllShared ==
agNULL)
1023 TI_DBG1((
"tdsmSingleThreadedEnter: tdsaAllShared is NULL\n"));
1030 TI_DBG1((
"tdsmSingleThreadedEnter: tiRoot is NULL\n"));
1052 TI_DBG7((
"tdsmSingleThreadedLeave: start\n"));
1057 TI_DBG1((
"tdsmSingleThreadedLeave: tdsaRoot is NULL\n"));
1062 if (tdsaAllShared ==
agNULL)
1064 TI_DBG1((
"tdsmSingleThreadedLeave: tdsaAllShared is NULL\n"));
1071 TI_DBG1((
"tdsmSingleThreadedLeave: tiRoot is NULL\n"));
1091#ifdef LINUX_VERSION_CODE
1099 return ostiAtomicIncrement(
agNULL, Addend);
1108 return ostiAtomicDecrement(
agNULL, Addend);
1116 sbit32 volatile *Destination,
1120 return ostiAtomicBitClear(
agNULL, Destination, Value);
1126 sbit32 volatile *Destination,
1130 return ostiAtomicBitSet(
agNULL, Destination, Value);
1140 return ostiAtomicExchange(
agNULL, Target, Value);
1168 sbit32 volatile *Destination,
1179 sbit32 volatile *Destination,
1203 bit32 * physAddrUpper,
1204 bit32 * physAddrLower,
1215 TI_DBG5((
"tdsmAllocMemory: start\n"));
1220 TI_DBG1((
"tdsmAllocMemory: tdsaRoot is NULL\n"));
1225 if (tdsaAllShared ==
agNULL)
1227 TI_DBG1((
"tdsmAllocMemory: tdsaAllShared is NULL\n"));
1234 TI_DBG1((
"tdsmAllocMemory: tiRoot is NULL\n"));
1270 TI_DBG5((
"tdsmFreeMemory: start\n"));
1275 TI_DBG1((
"tdsmFreeMemory: tdsaRoot is NULL\n"));
1280 if (tdsaAllShared ==
agNULL)
1282 TI_DBG1((
"tdsmFreeMemory: tdsaAllShared is NULL\n"));
1289 TI_DBG1((
"tdsmFreeMemory: tiRoot is NULL\n"));
1323 TI_DBG6((
"tdsmRotateQnumber: start\n"));
1325 if (smDeviceHandle ==
agNULL)
1327 TI_DBG1((
"tdsmRotateQnumber: smDeviceHandle is NULL !!!!\n"));
1331 if (oneDeviceData ==
agNULL)
1333 TI_DBG1((
"tdsmRotateQnumber: oneDeviceData is NULL !!!!\n"));
1352 TI_DBG5((
"tdsmSetDeviceQueueDepth: start\n"));
1357 TI_DBG1((
"tdsmSetDeviceQueueDepth: tdsaRoot is NULL\n"));
1362 if (tdsaAllShared ==
agNULL)
1364 TI_DBG1((
"tdsmSetDeviceQueueDepth: tdsaAllShared is NULL\n"));
1371 TI_DBG1((
"tdsmFreeMemory: tiRoot is NULL\n"));
1394 TI_DBG7((
"tdsmGetTransportParam: start\n"));
#define SMP_PHY_CONTROL_HARD_RESET
#define ITD_DSTATE_COMPLETED
osGLOBAL U32 ostiFreeMemory(tiRoot_t *ptiRoot, void *osMemHandle, U32 allocLength)
osGLOBAL U32 ostiAllocMemory(tiRoot_t *ptiRoot, void **osMemHandle, void **agVirtAddr, U32 *agPhysUpper32, U32 *agPhysLower32, U32 alignment, U32 allocLength, agBOOLEAN isCacheable)
U32 ostiGetTransportParam(tiRoot_t *ptiRoot, S08 *key, S08 *subkey1, S08 *subkey2, S08 *subkey3, S08 *subkey4, S08 *subkey5, S08 *valueName, S08 *buffer, U32 bufferLen, U32 *lenReceived)
void ostiPortEvent(tiRoot_t *ptiRoot, tiPortEvent_t eventType, U32 status, void *pParm)
void ostiSingleThreadedLeave(tiRoot_t *ptiRoot, U32 queueId)
void ostiInitiatorEvent(tiRoot_t *ptiRoot, tiPortalContext_t *ptiPortalContext, tiDeviceHandle_t *ptiDevHandle, tiIntrEventType_t eventType, U32 eventStatus, void *parm)
osGLOBAL bit32 ostiSetDeviceQueueDepth(tiRoot_t *tiRoot, tiIORequest_t *tiIORequest, bit32 QueueDepth)
osGLOBAL FORCEINLINE sbit32 ostiInterlockedAnd(tiRoot_t *root, sbit32 volatile *Destination, sbit32 Value)
osGLOBAL FORCEINLINE sbit32 ostiInterlockedDecrement(tiRoot_t *root, sbit32 volatile *Addend)
osGLOBAL FORCEINLINE sbit32 ostiInterlockedOr(tiRoot_t *root, sbit32 volatile *Destination, sbit32 Value)
osGLOBAL FORCEINLINE sbit32 ostiInterlockedExchange(tiRoot_t *root, sbit32 volatile *Target, sbit32 Value)
void ostiInitiatorIOCompleted(tiRoot_t *ptiRoot, tiIORequest_t *ptiIORequest, tiIOStatus_t IOStatus, U32 statusDetail, tiSenseData_t *pSenseData, U32 context)
osGLOBAL FORCEINLINE bit8 ostiBitScanForward(tiRoot_t *root, bit32 *Index, bit32 Mask)
void ostiSingleThreadedEnter(tiRoot_t *ptiRoot, U32 queueId)
osGLOBAL FORCEINLINE sbit32 ostiInterlockedIncrement(tiRoot_t *root, sbit32 volatile *Addend)
#define osti_memset(s, c, n)
#define osti_memcpy(des, src, n)
#define osti_memcmp(s1, s2, n)
#define AGSA_PHY_HARD_RESET
GLOBAL bit32 saLocalPhyControl(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 queueNum, bit32 phyId, bit32 phyOperation, ossaLocalPhyControlCB_t agCB)
Initiate a Local PHY control command.
GLOBAL bit32 saDeregisterDeviceHandle(agsaRoot_t *agRoot, agsaContext_t *agContext, agsaDevHandle_t *agDevHandle, bit32 queueNum)
Function for target to remove stale initiator device handle.
GLOBAL bit32 saRegisterNewDevice(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 queueNum, agsaDeviceInfo_t *agDeviceInfo, agsaPortContext_t *agPortContext, bit16 hostAssignedDeviceId)
Register New Device from a specific local port.
@ smIntrEventTypeLocalAbort
osGLOBAL bit32 smSuperIOStart(smRoot_t *smRoot, smIORequest_t *smIORequest, smDeviceHandle_t *smDeviceHandle, smSuperScsiInitiatorRequest_t *smSCSIRequest, bit32 AddrHi, bit32 AddrLo, bit32 interruptContext)
osGLOBAL bit32 smIDStart(smRoot_t *smRoot, smIORequest_t *smIORequest, smDeviceHandle_t *smDeviceHandle)
osGLOBAL FORCEINLINE bit32 smIOStart(smRoot_t *smRoot, smIORequest_t *smIORequest, smDeviceHandle_t *smDeviceHandle, smScsiInitiatorRequest_t *smSCSIRequest, bit32 interruptContext)
data structure stores OS specific and LL specific context
agsaSATAIdentifyData_t satIdentifyData
data structure for SAS SSP IO reuqest body This structure contains IO related fields....
tiDeviceHandle_t * tiDevHandle
tiIORequest_t * CurrentTaskTag
struct tdIORequestBody_s::@16::@20 InitiatorTMIO
union tdIORequestBody_s::@16 IOType
tiIORequest_t * tiIORequest
data structure for SAS/SATA context at TD layer
struct tdsaRootOsData_s agRootOsDataForInt
data structure for SAS device list This structure maintains the device as a list and information abou...
tiDeviceHandle_t tiDeviceHandle
agsaDevHandle_t * agDevHandle
struct tdsaPortContext_s * tdPortContext
TDSASAddressID_t SASAddressID
satDeviceData_t satDevData
agsaDeviceInfo_t agDeviceInfo
data structure for TD port context This structure maintains information about the port such as ID add...
agsaPortContext_t * agPortContext
tiPortalContext_t * tiPortalContext
the root data structure for TD layer
tdsaContext_t tdsaAllShared
#define TDLIST_OBJECT_BASE(baseType, fieldName, fieldPtr)
#define TDLIST_ENQUEUE_AT_TAIL(toAddHdr, listHdr)
#define TDLIST_DEQUEUE_THIS(hdr)
void tdsaSingleThreadedEnter(tiRoot_t *ptiRoot, bit32 queueId)
void tdsaSingleThreadedLeave(tiRoot_t *ptiRoot, bit32 queueId)
osGLOBAL bit32 tdsaAbortAll(tiRoot_t *tiRoot, agsaRoot_t *agRoot, tdsaDeviceData_t *oneDeviceData)
FORCEINLINE bit32 tdsaRotateQnumber(tiRoot_t *tiRoot, tdsaDeviceData_t *oneDeviceData)
osGLOBAL void tdsaKillTimer(tiRoot_t *tiRoot, tdsaTimerRequest_t *timerRequest)
osGLOBAL FORCEINLINE bit32 tdsmRotateQnumber(smRoot_t *smRoot, smDeviceHandle_t *smDeviceHandle)
osGLOBAL bit32 tdsmFreeMemory(smRoot_t *smRoot, void *osDMAHandle, bit32 allocLength)
osGLOBAL FORCEINLINE sbit32 tdsmInterlockedIncrement(smRoot_t *smRoot, sbit32 volatile *Addend)
osGLOBAL FORCEINLINE bit8 tdsmBitScanForward(smRoot_t *smRoot, bit32 *Index, bit32 Mask)
osGLOBAL bit32 tdsmGetTransportParam(smRoot_t *smRoot, char *key, char *subkey1, char *subkey2, char *subkey3, char *subkey4, char *subkey5, char *valueName, char *buffer, bit32 bufferLen, bit32 *lenReceived)
osGLOBAL FORCEINLINE sbit32 tdsmInterlockedExchange(smRoot_t *smRoot, sbit32 volatile *Target, sbit32 Value)
osGLOBAL void tdsmEventCB(smRoot_t *smRoot, smDeviceHandle_t *smDeviceHandle, smIntrEventType_t eventType, bit32 eventStatus, void *parm)
osGLOBAL void tdsmIDCompletedCB(smRoot_t *smRoot, smIORequest_t *smIORequest, smDeviceHandle_t *smDeviceHandle, bit32 status, void *IDdata)
osGLOBAL FORCEINLINE sbit32 tdsmInterlockedDecrement(smRoot_t *smRoot, sbit32 volatile *Addend)
osGLOBAL FORCEINLINE sbit32 tdsmInterlockedAnd(smRoot_t *smRoot, sbit32 volatile *Destination, sbit32 Value)
osGLOBAL bit32 tdsmSetDeviceQueueDepth(smRoot_t *smRoot, smIORequest_t *smIORequest, bit32 QueueDepth)
osGLOBAL FORCEINLINE void tdsmSingleThreadedEnter(smRoot_t *smRoot, bit32 syncLockId)
osGLOBAL FORCEINLINE void tdsmIOCompletedCB(smRoot_t *smRoot, smIORequest_t *smIORequest, bit32 status, bit32 statusDetail, smSenseData_t *senseData, bit32 interruptContext)
osGLOBAL FORCEINLINE void tdsmSingleThreadedLeave(smRoot_t *smRoot, bit32 syncLockId)
osGLOBAL FORCEINLINE sbit32 tdsmInterlockedOr(smRoot_t *smRoot, sbit32 volatile *Destination, sbit32 Value)
osGLOBAL bit32 tdsmAllocMemory(smRoot_t *smRoot, void **osMemHandle, void **virtPtr, bit32 *physAddrUpper, bit32 *physAddrLower, bit32 alignment, bit32 allocLength, smBOOLEAN isCacheable)
@ tiIntrEventTypeLocalAbort
@ tiIntrEventTypeDeviceChange