62#ifdef INITIATOR_DRIVER
70#include <dev/pms/RefTisa/tisa/sassata/sas/tgt/ttdxchg.h>
95#ifdef INITIATOR_DRIVER
114 bit32 memAllocStatus;
122 TI_DBG2((
"tiINIIOAbort: start\n"));
126 TI_DBG1((
"tiINIIOAbort: taskTag is NULL\n"));
130 agRoot = &(tdsaAllShared->agRootNonInt);
135 if(oneDeviceData ==
agNULL)
137 TI_DBG1((
"tiINIIOAbort: DeviceData is NULL\n"));
143 TI_DBG2((
"tiINIIOAbort: did %d\n", oneDeviceData->
id));
149 TI_DBG1((
"tiINIIOAbort: NO Device did %d\n", oneDeviceData->
id ));
159 (
void **)&tdAbortIORequestBody,
169 TI_DBG1((
"tiINIIOAbort: ostiAllocMemory failed...\n"));
173 if (tdAbortIORequestBody ==
agNULL)
176 TI_DBG1((
"tiINIIOAbort: ostiAllocMemory returned NULL tdAbortIORequestBody\n"));
181 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle = osMemHandle;
184 tdAbortIORequestBody->tiDevHandle = tdIORequestBody->
tiDevHandle;
187 agAbortIORequest = &(tdAbortIORequestBody->agIORequest);
188 agAbortIORequest->
osData = (
void *) tdAbortIORequestBody;
192 tdAbortIORequestBody->tiIOToBeAbortedRequest = taskTag;
216 TI_DBG2((
"tiINIIOAbort: calling satIOAbort() oneDeviceData=%p\n", oneDeviceData));
218 smRoot = &(tdsaAllShared->smRoot);
222 ToBeAborted = &(ToBeAbortedtdIORequestBody->smIORequest);
228 TI_DBG1((
"tiINIIOAbort: taskTag is NULL!!!\n"));
261 smRoot_t *smRoot = &(tdsaAllShared->smRoot);
265 TI_DBG1((
"tiINIIOAbortAll: start\n"));
269 TI_DBG1((
"tiINIIOAbortAll: tiDeviceHandle is NULL!!!\n"));
275 if (oneDeviceData ==
agNULL)
277 TI_DBG1((
"tiINIIOAbortAll: oneDeviceData is NULL!!!\n"));
285 TI_DBG1((
"tiINIIOAbortAll: NO Device did %d\n", oneDeviceData->
id ));
291 agRoot = oneDeviceData->
agRoot;
295 TI_DBG1((
"tiINIIOAbortAll: agRoot is NULL!!!\n"));
302 TI_DBG1((
"tiINIIOAbortAll: already pending!!!\n"));
319 TI_DBG2((
"tiINIIOAbortAll: calling smIOAbortAll\n"));
321 smDeviceHandle->
tdData = oneDeviceData;
364 bit32 memAllocStatus;
368 TI_DBG1((
"tdsaAbortAll: did %d\n", oneDeviceData->
id));
374 (
void **)&tdAbortIORequestBody,
384 TI_DBG1((
"tdsaAbortAll: ostiAllocMemory failed...\n"));
388 if (tdAbortIORequestBody ==
agNULL)
391 TI_DBG1((
"tdsaAbortAll: ostiAllocMemory returned NULL tdAbortIORequestBody\n"));
404 agAbortIORequest = &(tdAbortIORequestBody->
agIORequest);
405 agAbortIORequest->
osData = (
void *) tdAbortIORequestBody;
427 TI_DBG2((
"tdsaAbortAll: saSATAAbort\n"));
439 TI_DBG2((
"tdsaAbortAll: saSATAAbort IDDeviceValid\n"));
453 TI_DBG2((
"tdsaAbortAll: saSMPAbort \n"));
513#ifdef TI_GETFOR_ONRESET
520 TI_DBG1((
"tiCOMReset: start option 0x%x\n",option));
521 tdsaAllShared->resetCount++;
522 TI_DBG2((
"tiCOMReset: reset count %d\n", tdsaAllShared->resetCount));
524 agRoot = &(tdsaAllShared->agRootNonInt);
526 if (tdsaAllShared->flags.resetInProgress ==
agTRUE)
528 TI_DBG1((
"tiCOMReset : Reset is already in progress : \n"));
534 tdsaAllShared->flags.resetInProgress =
agTRUE;
536#ifdef TI_GETFOR_ONRESET
541 bit8 * DirectData = (
bit8 * )tdsaAllShared->FatalErrorData;
549 TI_DBG1((
"tiCOMReset:status %d readLen 0x%x directLen 0x%x directOffset 0x%x\n",
567 TI_DBG6((
"tiCOMReset: soft reset\n"));
597#ifdef INITIATOR_DRIVER
604 TI_DBG6((
"tiINIReportErrorToEventLog: start\n"));
626#ifndef ossaReenableInterrupts
630 bit32 outboundChannelNum
687#ifdef INITIATOR_DRIVER
701 itdsaIni_t *Initiator = (itdsaIni_t *)tdsaAllShared->
itdsaIni;
710 bit32 memAllocStatus;
729 bit32 SMmemAllocStatus;
732 TI_DBG2((
"tiINITaskManagement: start\n"));
739 TI_DBG1((
"tiINITaskManagement: tiDeviceHandle is NULL\n"));
744 if(oneDeviceData ==
agNULL)
749 TI_DBG1((
"tiINITaskManagement: did %d\n", oneDeviceData->
id ));
756 TI_DBG1((
"tiINITaskManagement: failing LUN RESET for testing\n"));
765 TI_DBG6((
"tiINITaskManagement: ABORT_TASK\n"));
768 TI_DBG6((
"tiINITaskManagement: ABORT_TASK_SET\n"));
771 TI_DBG6((
"tiINITaskManagement: CLEAR_ACA\n"));
774 TI_DBG6((
"tiINITaskManagement: CLEAR_TASK_SET\n"));
777 TI_DBG6((
"tiINITaskManagement: LOGICAL_UNIT_RESET\n"));
780 TI_DBG6((
"tiINITaskManagement: TARGET_WARM_RESET\n"));
783 TI_DBG6((
"tiINITaskManagement: QUERY_TASK\n"));
786 TI_DBG1((
"tiINITaskManagement: notImplemented 0x%0x !!!\n",task));
793 TI_DBG1((
"tiINITaskManagement: not implemented 0x%0x !!!\n",task));
799 TI_DBG1((
"tiINITaskManagement: tiDeviceHandle is NULL\n"));
804 if(oneDeviceData ==
agNULL)
824 agRoot = oneDeviceData->
agRoot;
826 TI_DBG1((
"tiINITaskManagement: SAS Device\n"));
838 currentTaskTag->
tdData = tdsaDeviceData;
840 agContext->
osData = currentTaskTag;
842 TI_DBG2((
"tiINITaskManagement: did %d device reset for SAS\n", oneDeviceData->
id));
848 TI_DBG2((
"tiINITaskManagement: device reset directly attached\n"));
852 oneDeviceData->
phyID,
860 TI_DBG2((
"tiINITaskManagement: device reset expander attached\n"));
861 saStatus = tdsaPhyControlSend(
tiRoot,
873 TI_DBG6((
"tiINITaskManagement: making task management frame \n"));
881 (
void **)&TMtdIORequestBody,
891 TI_DBG1((
"tiINITaskManagement: ostiAllocMemory failed...\n"));
895 if (TMtdIORequestBody ==
agNULL)
897 TI_DBG1((
"tiINITaskManagement: ostiAllocMemory returned NULL TMIORequestBody\n"));
905 TMtdIORequestBody->IOType.InitiatorTMIO.osMemHandle = osMemHandle;
906 TMtdIORequestBody->IOType.InitiatorTMIO.CurrentTaskTag = currentTaskTag;
907 TMtdIORequestBody->IOType.InitiatorTMIO.TaskTag = taskTag;
921 TMtdIORequestBody->tiIORequest = currentTaskTag;
923 currentTaskTag->
tdData = TMtdIORequestBody;
926 agIORequest = &(TMtdIORequestBody->agIORequest);
927 agIORequest->
osData = (
void *) TMtdIORequestBody;
937 agSASRequestBody = &(TMtdIORequestBody->transport.SAS.agSASRequestBody);
938 agSSPTaskMgntRequest = &(agSASRequestBody->sspTaskMgntReq);
940 TI_DBG2((
"tiINITaskManagement: did %d LUN reset for SAS\n", oneDeviceData->
id));
955 agSSPTaskMgntRequest->tmOption = 2;
967 agSSPTaskMgntRequest->tmOption = 3;
985 TI_DBG1((
"tiINITaskManagement: notImplemented task\n"));
993 if (tdIORequestBody ==
agNULL)
997 TI_DBG1((
"tiINITaskManagement: IO has been completed\n"));
1017 agSSPTaskMgntRequest->tagOfTaskToBeManaged = 0;
1024 if (TMtdIORequestBody->IOCompletionFunc ==
agNULL)
1026 TI_DBG1((
"tiINITaskManagement: Error!!!!! IOCompletionFunc is NULL\n"));
1040 Initiator->NumIOsActive++;
1045 TI_DBG1((
"tiINITaskManagement: saSSPStart failed 0x%x\n",saStatus));
1049 TMtdIORequestBody->IOType.InitiatorTMIO.osMemHandle,
1072 agContext->
osData = currentTaskTag;
1079 agRoot = oneDeviceData->
agRoot;
1082 currentTaskTag->
tdData = oneDeviceData;
1086 if ( (
lun->lun[0] |
lun->lun[1] |
lun->lun[2] |
lun->lun[3] |
1087 lun->lun[4] |
lun->lun[5] |
lun->lun[6] |
lun->lun[7] ) != 0 )
1089 TI_DBG1((
"tiINITaskManagement: *** REJECT *** LUN not zero, tiDeviceHandle=%p\n",
1100 smRoot = &(tdsaAllShared->smRoot);
1101 smDeviceHandle = &(oneDeviceData->smDeviceHandle);
1102 TI_DBG1((
"tiINITaskManagement: FDS_SM SATA Device\n"));
1107 ToBeAborted = &(ToBeAbortedtdIORequestBody->smIORequest);
1112 (
void **)&SMTMtdIORequestBody,
1121 TI_DBG1((
"tiINITaskManagement: ostiAllocMemory failed... loc 2\n"));
1125 if (SMTMtdIORequestBody ==
agNULL)
1127 TI_DBG1((
"tiINITaskManagement: ostiAllocMemory returned NULL TMIORequestBody loc 2\n"));
1135 SMTMtdIORequestBody->IOType.InitiatorTMIO.osMemHandle = SMosMemHandle;
1136 SMTMtdIORequestBody->IOType.InitiatorTMIO.CurrentTaskTag = currentTaskTag;
1137 SMTMtdIORequestBody->IOType.InitiatorTMIO.TaskTag = taskTag;
1143 SMTMtdIORequestBody->tiIORequest = currentTaskTag;
1145 currentTaskTag->
tdData = SMTMtdIORequestBody;
1147 TaskManagement = &(SMTMtdIORequestBody->smIORequest);
1149 TaskManagement->tdData = SMTMtdIORequestBody;
1150 TaskManagement->smData = &SMTMtdIORequestBody->smIORequestBody;
1161 TI_DBG1((
"tiINITaskManagement: smTaskManagement failed... loc 2\n"));
1165 SMTMtdIORequestBody->IOType.InitiatorTMIO.osMemHandle,
1174 agRoot = oneDeviceData->
agRoot;
1176 TI_DBG1((
"tiINITaskManagement: not FDS_SM SATA Device\n"));
1190 TI_DBG2((
"tiINITaskManagement: did %d LUN reset or device reset for SATA\n", oneDeviceData->
id));
1193 currentTaskTag->
tdData = tdsaDeviceData;
1195 agContext->
osData = currentTaskTag;
1200 if ( (
lun->lun[0] |
lun->lun[1] |
lun->lun[2] |
lun->lun[3] |
1201 lun->lun[4] |
lun->lun[5] |
lun->lun[6] |
lun->lun[7] ) != 0 )
1203 TI_DBG1((
"tiINITaskManagement: *** REJECT *** LUN not zero, tiDeviceHandle=%p\n",
1213 TI_DBG1((
"tiINITaskManagement: *** REJECT *** other TM pending, tiDeviceHandle=%p\n",
1228 TI_DBG1((
"tiINITaskManagement: LUN reset or device reset directly attached\n"));
1234 TI_DBG1((
"tiINITaskManagement: LUN reset or device reset expander attached\n"));
1235 saStatus = tdsaPhyControlSend(
tiRoot,
1246 TI_DBG2((
"tiINITaskManagement: calling satTM().\n"));
1251 (
void **)&TMtdIORequestBody,
1261 TI_DBG1((
"tiINITaskManagement: ostiAllocMemory failed... loc 2\n"));
1265 if (TMtdIORequestBody ==
agNULL)
1267 TI_DBG1((
"tiINITaskManagement: ostiAllocMemory returned NULL TMIORequestBody loc 2\n"));
1276 TMtdIORequestBody->IOType.InitiatorTMIO.osMemHandle = osMemHandle;
1277 TMtdIORequestBody->IOType.InitiatorTMIO.CurrentTaskTag = currentTaskTag;
1278 TMtdIORequestBody->IOType.InitiatorTMIO.TaskTag = taskTag;
1284 TMtdIORequestBody->tiIORequest = currentTaskTag;
1286 currentTaskTag->
tdData = TMtdIORequestBody;
1289 agIORequest = &(TMtdIORequestBody->agIORequest);
1290 agIORequest->
osData = (
void *) TMtdIORequestBody;
1295 tiStatus = satTM(
tiRoot,
1315tiCOMPassthroughCmndStart(
1317 tiPassthroughRequest_t *tiPassthroughRequest,
1319 tiPassthroughCmnd_t *tiPassthroughCmnd,
1320 void *tiPassthroughBody,
1322 ostiPassthroughCmndEvent_t agEventCB
1331 bit32 agRequestType;
1334 tdPassthroughCmndBody_t *tdPTCmndBody;
1337 agsaSSPVSFrame_t *agSSPVendorFrame;
1338 bit32 SMPFn, SMPFnResult, SMPFrameLen;
1344 TI_DBG2((
"tiCOMPassthroughCmndStart: start\n"));
1348 TI_DBG6((
"tiCOMPassthroughCmndStart: onedevicedata %p\n", oneDeviceData));
1351 tdPTCmndBody = (tdPassthroughCmndBody_t *)tiPassthroughBody;
1354 if (tiPassthroughCmnd->passthroughCmnd != tiSMPCmnd ||
1355 tiPassthroughCmnd->passthroughCmnd != tiRMCCmnd)
1361 if (oneDeviceData ==
agNULL && tiPassthroughCmnd->passthroughCmnd != tiSMPCmnd)
1370 if (tiPassthroughCmnd->passthroughCmnd == tiSMPCmnd)
1372 TI_DBG2((
"tiCOMPassthroughCmndStart: SMP\n"));
1373 if (oneDeviceData ==
agNULL)
1377 agRoot = tdsaPortContext->
agRoot;
1381 agRoot = oneDeviceData->
agRoot;
1386 tdssSMPRequestBody = &(tdPTCmndBody->protocol.SMP.SMPBody);
1388 agSMPFrame = &(agSASRequestBody->
smpFrame);
1391 tdPTCmndBody->EventCB = agEventCB;
1394 tdPTCmndBody->tiPassthroughCmndType = tiSMPCmnd;
1397 tdPTCmndBody->tiPassthroughRequest = tiPassthroughRequest;
1398 tiPassthroughRequest->tdData = tdPTCmndBody;
1404 agSMPFrame->frameHeader.smpFrameType
1405 = tiPassthroughCmnd->protocol.SMP.SMPHeader.smpFrameType;
1406 agSMPFrame->frameHeader.smpFunction
1407 = tiPassthroughCmnd->protocol.SMP.SMPHeader.smpFunction;
1408 agSMPFrame->frameHeader.smpFunctionResult
1409 = tiPassthroughCmnd->protocol.SMP.SMPHeader.smpFunctionResult;
1410 agSMPFrame->frameHeader.smpReserved
1411 = tiPassthroughCmnd->protocol.SMP.SMPHeader.smpReserved;
1421 agSMPFrame->phyId = tiPassthroughCmnd->protocol.SMP.phyID;
1426 agSMPFrame->frameAddrUpper32 = tiPassthroughCmnd->tiSgl.upper;
1427 agSMPFrame->frameAddrLower32 = tiPassthroughCmnd->tiSgl.lower;
1430 agSMPFrame->frameLen = tiPassthroughCmnd->tiSgl.len;
1438 agIORequest->
osData = (
void *) tdPTCmndBody;
1459 TI_DBG1((
"tiCOMPassthroughCmndStart: saSMPStart failed\n"));
1465 TI_DBG1((
"tiCOMPassthroughCmndStart: saSMPStart busy\n"));
1475 agSMPFrame->frameHeader.smpFrameType =
SMP_REQUEST;
1483 switch (tdPTCmndBody->protocol.SMP.SMPFnResult)
1485 case tiSMPFunctionAccepted:
1488 case tiUnknownSMPFunction:
1491 case tiSMPFunctionFailed:
1494 case tiInvalidRequestFrameLength:
1497 case tiPhyDoesNotExist:
1500 case tiIndexDoesNotExist:
1503 case tiPhyDoesNotSupportSATA:
1506 case tiUnknownPhyOperation:
1509 case tiUnknownPhyTestFunction:
1512 case tiPhyTestFunctionInProgress:
1520 TI_DBG1((
"tiCOMPassthroughCmndStart: unknown SMP function result %d\n", tdPTCmndBody->protocol.SMP.SMPFnResult));
1523 agSMPFrame->frameHeader.smpFunctionResult = SMPFnResult;
1527 switch (tdPTCmndBody->protocol.SMP.SMPFn)
1541 case tiManufacturerInfo:
1565 case tiReportPhyErrLog:
1577 case tiReportPhySATA:
1581 SMPFrameLen =
sizeof(SmpReqReportPhySata_t);
1585 SMPFrameLen =
sizeof(SmpRespReportPhySata_t);
1589 case tiReportRteInfo:
1593 SMPFrameLen =
sizeof(SmpReqReportRouteTable_t);
1597 SMPFrameLen =
sizeof(SmpRespReportRouteTable_t);
1601 case tiConfigureRteInfo:
1605 SMPFrameLen =
sizeof(SmpReqConfigureRouteInformation_t);
1617 SMPFrameLen =
sizeof(SmpReqPhyControl_t);
1651 TI_DBG1((
"tiCOMPassthroughCmndStart: unknown SMP function %d\n", tdPTCmndBody->protocol.SMP.SMPFn));
1654 agSMPFrame->frameHeader.smpFunction = SMPFn;
1658 agSMPFrame->frameAddrUpper32 = tdPTCmndBody->tiSgl.upper;
1659 agSMPFrame->frameAddrLower32 = tdPTCmndBody->tiSgl.lower;
1662 agSMPFrame->frameLen = SMPFrameLen;
1673 else if (tiPassthroughCmnd->passthroughCmnd == tiRMCCmnd)
1675 TI_DBG2((
"tiCOMPassthroughCmndStart: RMC\n"));
1679 TI_DBG1((
"tiCOMPassthroughCmndStart: unknown protocol %d\n", tiPassthroughCmnd->passthroughCmnd));
1686 TI_DBG1((
"tiCOMPassthroughCmndStart: error !!! no SATA support\n"));
1691 TI_DBG1((
"tiCOMPassthroughCmndStart: error !!! unknown devietype %d\n", oneDeviceData->
DeviceType));
1701tiCOMPassthroughCmndAbort(
1703 tiPassthroughRequest_t *taskTag
1709 tdPassthroughCmndBody_t *tdPTCmndBody =
agNULL;
1714 TI_DBG2((
"tiCOMPassthroughCmndAbort: start\n"));
1716 agRoot = &(tdsaAllShared->agRootNonInt);
1717 tdPTCmndBody = (tdPassthroughCmndBody_t *)taskTag->tdData;
1719 if (tdPTCmndBody->tiPassthroughCmndType == tiSMPCmnd)
1721 tdssSMPRequestBody = &(tdPTCmndBody->protocol.SMP.SMPBody);
1732 TI_DBG1((
"tiCOMPassthroughCmndAbort: saSMPAbort failed\n"));
1738 TI_DBG1((
"tiCOMPassthroughCmndAbort: saSMPAbort busy\n"));
1743 else if (tdPTCmndBody->tiPassthroughCmndType == tiRMCCmnd)
1745 TI_DBG1((
"tiCOMPassthroughCmndAbort: RMC passthrough command type, not yet\n"));
1750 TI_DBG1((
"tiCOMPassthroughCmndAbort: unknown passthrough command type %d\n", tdPTCmndBody->tiPassthroughCmndType));
1758tiINIPassthroughCmndRemoteAbort(
1761 tiPassthroughRequest_t *taskTag,
1762 tiPassthroughRequest_t *currentTaskTag,
1766 TI_DBG2((
"tiINIPassthroughCmndRemoteAbort: start\n"));
1795#ifdef TI_GETFOR_ONSHUTDOWN
1803 TI_DBG1((
"tiCOMShutDown: start\n"));
1806 agRoot = &(tdsaAllShared->agRootNonInt);
1817#ifdef TI_GETFOR_ONSHUTDOWN
1827 TI_DBG1((
"tiCOMShutDown:readLen 0x%x directLen 0x%x directOffset 0x%x\n",
1857#ifdef INITIATOR_DRIVER
1888#ifndef ossaDisableInterrupts
1892 bit32 outboundChannelNum
1919 TI_DBG6((
"tiCOMFrameReadBlock: start\n"));
1922 agRoot = &(tdsaAllShared->agRootNonInt);
1925 TI_DBG6((
"tiCOMFrameReadBlock: start\n"));
1948#ifdef INITIATOR_DRIVER
1962 TI_DBG1((
"tiINITransportRecovery: start\n"));
1966 TI_DBG1((
"tiINITransportRecovery: tiDeviceHandle is NULL\n"));
1973 if (oneDeviceData ==
agNULL)
1975 TI_DBG1((
"tiINITransportRecovery: oneDeviceData is NULL\n"));
1983 TI_DBG1((
"tiINITransportRecovery: NO Device did %d\n", oneDeviceData->
id ));
1991 if (onePortContext ==
agNULL)
1993 TI_DBG1((
"tiINITransportRecovery: onePortContext is NULL\n"));
2000 agRoot = oneDeviceData->
agRoot;
2006 currentTaskTag->
tdData = oneDeviceData;
2008 agContext->
osData = currentTaskTag;
2011 TI_DBG2((
"tiINITransportRecovery: SAS device\n"));
2016 TI_DBG2((
"tiINITransportRecovery: saLocalPhyControl\n"));
2030 TI_DBG2((
"tiINITransportRecovery: device reset expander attached\n"));
2031 tdsaPhyControlSend(
tiRoot,
2050 currentTaskTag->
tdData = oneDeviceData;
2052 agContext->
osData = currentTaskTag;
2055 TI_DBG2((
"tiINITransportRecovery: SATA device\n"));
2060 TI_DBG2((
"tiINITransportRecovery: saLocalPhyControl\n"));
2074 TI_DBG2((
"tiINITransportRecovery: device reset expander attached\n"));
2075 tdsaPhyControlSend(
tiRoot,
2093 TI_DBG1((
"tiINITransportRecovery: wrong device type %d\n", oneDeviceData->
DeviceType));
2101#if defined (INITIATOR_DRIVER) && defined (TARGET_DRIVER)
2178#ifdef INITIATOR_DRIVER
2219 TI_DBG3((
"tdsaPhyControlSend: start\n"));
2221 agRoot = oneDeviceData->
agRoot;
2223 oneExpDeviceData = oneDeviceData->
ExpDevice;
2224 phyID = oneDeviceData->
phyID;
2228 TI_DBG1((
"tdsaPhyControlSend: Error!!! deivce is directly attached\n"));
2231 if (onePortContext ==
agNULL)
2233 TI_DBG1((
"tdsaPhyControlSend: Error!!! portcontext is NULL\n"));
2237 if (oneExpDeviceData ==
agNULL)
2239 TI_DBG1((
"tdsaPhyControlSend: Error!!! expander is NULL\n"));
2245 TI_DBG3((
"tdsaPhyControlSend: SMP_PHY_CONTROL_HARD_RESET\n"));
2249 TI_DBG3((
"tdsaPhyControlSend: SMP_PHY_CONTROL_LINK_RESET\n"));
2253 TI_DBG3((
"tdsaPhyControlSend: SMP_PHY_CONTROL_CLEAR_AFFILIATION\n"));
2259 TI_DBG3((
"tdsaPhyControlSend: did %d expander did %d phyid %d\n", oneDeviceData->
id, oneExpDeviceData->
id, phyID));
2273 (
bit8 *)&smpPhyControlReq,
2311#if defined(INITIATOR_DRIVER) || defined(TD_DEBUG_ENABLE)
2314#ifdef TD_DEBUG_ENABLE
2319 TI_DBG1((
"tdsaPhyControlFailureRespRcvd: start\n"));
2324 if (CurrentTaskTag !=
agNULL )
2327#if defined(INITIATOR_DRIVER) || defined(TD_DEBUG_ENABLE)
2330#ifdef TD_DEBUG_ENABLE
2337#ifdef TD_DEBUG_ENABLE
2343#ifdef INITIATOR_DRIVER
2344 if (CurrentTaskTag !=
agNULL )
2346 TI_DBG1((
"tdsaPhyControlRespRcvd: callback to OS layer with failure\n"));
2400#if defined(INITIATOR_DRIVER) || defined(TD_DEBUG_ENABLE)
2403#ifdef INITIATOR_DRIVER
2408 TI_DBG3((
"tdsaPhyControlRespRcvd: start\n"));
2413 if (CurrentTaskTag !=
agNULL )
2416#if defined(INITIATOR_DRIVER) || defined(TD_DEBUG_ENABLE)
2426#ifdef INITIATOR_DRIVER
2432#ifdef INITIATOR_DRIVER
2436 TI_DBG3((
"tdsaPhyControlRespRcvd: SMP success\n"));
2441 if (CurrentTaskTag !=
agNULL )
2443 TI_DBG3((
"tdsaPhyControlRespRcvd: callback to OS layer with success\n"));
2461 if (agDevHandle ==
agNULL)
2463 TI_DBG1((
"tdsaPhyControlRespRcvd: wrong, agDevHandle is NULL\n"));
2480 if (CurrentTaskTag !=
agNULL )
2482 TI_DBG1((
"tdsaPhyControlRespRcvd: callback to OS layer with failure\n"));
2543 bit32 memAllocStatus;
2546 TI_DBG3((
"tdsaAbortAll: start\n"));
2548 TI_DBG3((
"tdsaAbortAll: did %d\n", oneDeviceData->
id));
2555 (
void **)&tdAbortIORequestBody,
2565 TI_DBG1((
"tdsaAbortAll: ostiAllocMemory failed...\n"));
2569 if (tdAbortIORequestBody ==
agNULL)
2572 TI_DBG1((
"tdsaAbortAll: ostiAllocMemory returned NULL tdAbortIORequestBody\n"));
2577 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle = osMemHandle;
2585 agAbortIORequest = &(tdAbortIORequestBody->agIORequest);
2586 agAbortIORequest->
osData = (
void *) tdAbortIORequestBody;
2615 agRoot = &(tdsaAllShared->agRootNonInt);
2617 TI_DBG1((
"tdsaDeregisterDevicesInPort: start\n"));
2620 DeviceListList = tdsaAllShared->MainDeviceList.
flink;
2621 while (DeviceListList != &(tdsaAllShared->MainDeviceList))
2624 if (oneDeviceData ==
agNULL)
2626 TI_DBG1((
"tdsaDeregisterDevicesInPort: oneDeviceData is NULL!!!\n"));
2631 TI_DBG3((
"tdsaDeregisterDevicesInPort: Found pid %d did %d\n", onePortContext->
id, oneDeviceData->
id));
2638 TI_DBG1((
"tdsaDeregisterDevicesInPort: keeping\n"));
2642 DeviceListList = DeviceListList->
flink;
2645 TI_DBG3((
"tdsaDeregisterDevicesInPort: end\n"));
2658 TI_DBG6((
"tdsaPrintSwConfig: SwConfig is NULL\n"));
2678 TI_DBG6((
"tdsaPrintHwConfig: HwConfig is NULL\n"));
2695 TI_DBG1((
"tdsaPrintSASIdentify: ID is NULL\n"));
2723 TI_DBG6((
"tdsaInitTimerHandler: start\n"));
2736#ifdef TD_DEBUG_ENABLE
2744 if (type == 1 && flag == 1)
2746 TI_DBG6((
"PortContext and FreeLink\n"));
2748 else if (type != 1 && flag == 1)
2750 TI_DBG6((
"DeviceData and FreeLink\n"));
2752 else if (type == 1 && flag != 1)
2754 TI_DBG6((
"PortContext and MainLink\n"));
2758 TI_DBG6((
"DeviceData and MainLink\n"));
2767#ifdef TD_DEBUG_ENABLE
2773#ifdef TD_DEBUG_ENABLE
2778 TI_DBG6((
"flist ele %p\n", ele1));
2779 hdr_tmp1 = hdr_tmp1->
flink;
2780 }
while (hdr_tmp1 !=
hdr);
2797 TI_DBG6((
"flist ele %p\n", ele2));
2799 hdr_tmp1 = hdr_tmp1->
flink;
2800 }
while (hdr_tmp1 !=
hdr);
2830 hdr_tmp1 = hdr_tmp1->
blink;
2831 }
while (hdr_tmp1 !=
hdr);
2839 TI_DBG2((
"%s - hexdump(len=%d):\n", ptitle, (
int)len));
2845 for (i = 0; i < len; )
2849 TI_DBG2((
" 0x%02x, 0x%02x, 0x%02x, 0x%02x,\n", pbuf[i], pbuf[i+1], pbuf[i+2], pbuf[i+3]));
2854 TI_DBG2((
" 0x%02x,", pbuf[i]));
2867 tiroot = ptiRoot->
tdData;
2881 tiroot = ptiRoot->
tdData;
2890tdsaEnter(
tiRoot_t *ptiRoot,
int io)
2892 ostiEnter(ptiRoot, 1, io);
2896tdsaLeave(
tiRoot_t *ptiRoot,
int io)
2898 ostiLeave(ptiRoot, 1, io);
#define DEVICE_IS_SATA_DEVICE(DeviceData)
struct smpReqDiscover_s smpReqDiscover_t
#define SMP_FUNCTION_FAILED
#define SMP_REPORT_PHY_SATA
#define SMP_PHY_CONTROL_CLEAR_AFFILIATION
#define DEVICE_IS_STP_TARGET(DeviceData)
#define SMP_PHY_TEST_FUNCTION
#define UNKNOWN_SMP_FUNCTION
#define SMP_REPORT_MANUFACTURE_INFORMATION
#define PHY_DOES_NOT_SUPPORT_SATA
#define DEVICE_IS_SMP_TARGET(DeviceData)
#define SMP_PHY_CONTROL_HARD_RESET
#define UNKNOWN_PHY_TEST_FUNCTION
struct smpRespDiscover_s smpRespDiscover_t
#define PHY_TEST_FUNCTION_IN_PROGRESS
struct smpRespReportManufactureInfo_s smpRespReportManufactureInfo_t
#define SMP_CONFIGURE_ROUTING_INFORMATION
#define UNKNOWN_PHY_OPERATION
#define PHY_DOES_NOT_EXIST
#define INVALID_REQUEST_FRAME_LENGTH
#define INDEX_DOES_NOT_EXIST
#define SMP_FUNCTION_ACCEPTED
#define SMP_REPORT_GENERAL
struct smpRespReportGeneral_s smpRespReportGeneral_t
#define SMP_REPORT_PHY_ERROR_LOG
#define SMP_PHY_CONTROL_LINK_RESET
#define DEVICE_IS_SSP_TARGET(DeviceData)
#define SMP_REPORT_ROUTING_INFORMATION
tiIOCTLPayloadHeader_t hdr
osGLOBAL void itdssIOAbortedHandler(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 agIOStatus, bit32 agIOInfoLen, void *agParam, bit32 agOtherInfo)
osGLOBAL void itdssTaskCompleted(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 agIOStatus, bit32 agIOInfoLen, void *agParam, bit32 agOtherInfo)
GLOBAL void ostiInterruptEnable(tiRoot_t *ptiRoot, bit32 channelNum)
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)
GLOBAL void ostiInterruptDisable(tiRoot_t *ptiRoot, bit32 channelNum)
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)
void ostiSingleThreadedEnter(tiRoot_t *ptiRoot, U32 queueId)
#define osti_memset(s, c, n)
#define osti_memcpy(des, src, n)
The file defines the constants, data structure, and functions defined by LL API.
#define AGSA_PHY_HARD_RESET
void * agsaFrameHandle_t
handle to access frame
#define SA_DS_OPERATIONAL
#define AGSA_PHY_LINK_RESET
#define AGSA_CLEAR_TASK_SET
#define AGSA_SMP_TGT_RESPONSE
#define AGSA_SMP_INIT_REQ
#define AGSA_LOGICAL_UNIT_RESET
#define AGSA_ABORT_TASK_SET
#define SA_DS_IN_RECOVERY
#define AGSA_SSP_TASK_MGNT_REQ
#define SA_IDFRM_IS_STP_TARGET(identFrame)
#define SA_IDFRM_IS_SSP_TARGET(identFrame)
#define SA_IDFRM_IS_SMP_TARGET(identFrame)
#define SA_IDFRM_IS_STP_INITIATOR(identFrame)
#define SA_IDFRM_IS_SMP_INITIATOR(identFrame)
#define SA_IDFRM_GET_SAS_ADDRESSLO(identFrame)
#define SA_IDFRM_GET_DEVICETTYPE(identFrame)
#define SA_IDFRM_IS_SSP_INITIATOR(identFrame)
#define SA_IDFRM_GET_SAS_ADDRESSHI(identFrame)
The file defines the declaration of tSDK APIs.
GLOBAL bit32 saSMPAbort(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 queueNum, agsaDevHandle_t *agDevHandle, bit32 flag, void *abortParam, ossaGenericAbortCB_t agCB)
Abort SMP request.
GLOBAL void saFrameReadBlock(agsaRoot_t *agRoot, agsaFrameHandle_t agFrame, bit32 frameOffset, void *frameBuffer, bit32 frameBufLen)
Read a block from a frame.
GLOBAL bit32 saSATAAbort(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 queueNum, agsaDevHandle_t *agDevHandle, bit32 flag, void *abortParam, ossaGenericAbortCB_t agCB)
Abort SATA command.
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 saSMPStart(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 queueNum, agsaDevHandle_t *agDevHandle, bit32 agRequestType, agsaSASRequestBody_t *agRequestBody, ossaSMPCompletedCB_t agCB)
Start SMP request.
GLOBAL bit32 saGetControllerStatus(agsaRoot_t *agRoot, agsaControllerStatus_t *controllerStatus)
SPC Get Controller Status Command.
GLOBAL void saHwReset(agsaRoot_t *agRoot, bit32 resetType, bit32 resetParm)
Function to reset the Hardware.
GLOBAL bit32 saSSPAbort(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 queueNum, agsaDevHandle_t *agDevHandle, bit32 flag, void *abortParam, ossaGenericAbortCB_t agCB)
Abort SSP request.
GLOBAL void saHwShutdown(agsaRoot_t *agRoot)
Function to shutdown the Hardware.
GLOBAL bit32 saSetDeviceState(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 queueNum, agsaDevHandle_t *agDevHandle, bit32 newDeviceState)
Set Device State.
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 saSSPStart(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 queueNum, agsaDevHandle_t *agDevHandle, bit32 agRequestType, agsaSASRequestBody_t *agRequestBody, agsaIORequest_t *agTMRequest, ossaSSPCompletedCB_t agCB)
Start SSP request.
GLOBAL bit32 saGetForensicData(agsaRoot_t *agRoot, agsaContext_t *agContext, agsaForensicData_t *forensicData)
The file defines the declaration of OS APIs.
GLOBAL void ossaSMPCompleted(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 agIOStatus, bit32 agIOInfoLen, agsaFrameHandle_t agFrameHandle)
ossaSMPCompleted
GLOBAL FORCEINLINE void ossaSSPCompleted(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 agIOStatus, bit32 agIOInfoLen, void *agParam, bit16 sspTag, bit32 agOtherInfo)
ossaSSPCompleted
osGLOBAL bit32 smIOAbortAll(smRoot_t *smRoot, smDeviceHandle_t *smDeviceHandle)
osGLOBAL bit32 smIOAbort(smRoot_t *smRoot, smIORequest_t *tasktag)
osGLOBAL bit32 smTaskManagement(smRoot_t *smRoot, smDeviceHandle_t *smDeviceHandle, bit32 task, smLUN_t *lun, smIORequest_t *taskTag, smIORequest_t *currentTaskTag)
#define SAT_DEV_STATE_NORMAL
#define SAT_DEV_STATE_IN_RECOVERY
data structure stores OS specific and LL specific context
tiIORequest_t * satTmTaskTag
data structure for SAS SSP IO reuqest body This structure contains IO related fields....
tiDeviceHandle_t * tiDevHandle
tdssIOCompleted_t IOCompletionFunc
struct tdIORequestBody_s::@16::@20 InitiatorTMIO
union tdIORequestBody_s::@16 IOType
agsaIORequest_t agIORequest
data structure for SAS/SATA context at TD layer
struct itdsaIni_s * itdsaIni
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
agsaContext_t agDeviceResetContext
TDSASAddressID_t SASAddressID
satDeviceData_t satDevData
struct tdsaDeviceData_s * ExpDevice
tiIORequest_t TransportRecoveryIO
data structure for TD port context This structure maintains information about the port such as ID add...
tiPortalContext_t * tiPortalContext
data structure for TD port information This structure contains information in order to start the port...
tdsaPortContext_t * portContext
data structure OS root from the view of lower layer. TD Layer interrupt/non-interrupt context support...
the root data structure for TD layer
tdsaContext_t tdsaAllShared
data structure for SAS SMP reuqest body This structure contains IO related fields....
agsaSASRequestBody_t agSASRequestBody
agsaIORequest_t agIORequest
osGLOBAL void tdsaFreeCardID(tiRoot_t *tiRoot, bit32 CardID)
osGLOBAL void tdsaResetComMemFlags(tiRoot_t *tiRoot)
#define TDLIST_OBJECT_BASE(baseType, fieldName, fieldPtr)
#define TDLIST_INIT_HDR(hdr)
osGLOBAL void tdsaInitTimerHandler(tiRoot_t *tiRoot, void *timerData)
osGLOBAL void tiCOMShutDown(tiRoot_t *tiRoot)
osGLOBAL void tdssPrintSASIdentify(agsaSASIdentify_t *id)
osGLOBAL void print_tdlist_blink(tdList_t *hdr, int flag)
void tdsaSingleThreadedEnter(tiRoot_t *ptiRoot, bit32 queueId)
osGLOBAL void ossaReenableInterrupts(agsaRoot_t *agRoot, bit32 outboundChannelNum)
ossaReenableInterrupts
osGLOBAL void tiCOMFrameReadBlock(tiRoot_t *tiRoot, void *agFrame, bit32 FrameOffset, void *FrameBuffer, bit32 FrameBufLen)
void tdhexdump(const char *ptitle, bit8 *pbuf, int len)
void tdsaSingleThreadedLeave(tiRoot_t *ptiRoot, bit32 queueId)
osGLOBAL bit32 tdsaAbortAll(tiRoot_t *tiRoot, agsaRoot_t *agRoot, tdsaDeviceData_t *oneDeviceData)
osGLOBAL void ossaDisableInterrupts(agsaRoot_t *agRoot, bit32 outboundChannelNum)
ossaDisableInterrupts
osGLOBAL void tiCOMReset(tiRoot_t *tiRoot, bit32 option)
osGLOBAL void print_tdlist_flink(tdList_t *hdr, int type, int flag)
osGLOBAL void tdsaPrintHwConfig(agsaHwConfig_t *HwConfig)
osGLOBAL void tdsaPhyControlRespRcvd(tiRoot_t *tiRoot, agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, tdsaDeviceData_t *oneDeviceData, tdssSMPFrameHeader_t *frameHeader, agsaFrameHandle_t frameHandle, tiIORequest_t *CurrentTaskTag)
osGLOBAL void tdsaPrintSwConfig(agsaSwConfig_t *SwConfig)
osGLOBAL void tdsaPhyControlFailureRespRcvd(tiRoot_t *tiRoot, agsaRoot_t *agRoot, tdsaDeviceData_t *oneDeviceData, tdssSMPFrameHeader_t *frameHeader, agsaFrameHandle_t frameHandle, tiIORequest_t *CurrentTaskTag)
osGLOBAL void tdsaDeregisterDevicesInPort(tiRoot_t *tiRoot, tdsaPortContext_t *onePortContext)
FORCEINLINE bit32 tdsaRotateQnumber(tiRoot_t *tiRoot, tdsaDeviceData_t *oneDeviceData)
osGLOBAL bit32 tiINIIOAbortAll(tiRoot_t *tiRoot, tiDeviceHandle_t *tiDeviceHandle)
osGLOBAL void tiINITimerTick(tiRoot_t *tiRoot)
osGLOBAL bit32 tiINIReportErrorToEventLog(tiRoot_t *tiRoot, tiEVTData_t *agEventData)
osGLOBAL bit32 tiINITaskManagement(tiRoot_t *tiRoot, tiDeviceHandle_t *tiDeviceHandle, bit32 task, tiLUN_t *lun, tiIORequest_t *taskTag, tiIORequest_t *currentTaskTag)
osGLOBAL bit32 tiINIIOAbort(tiRoot_t *tiRoot, tiIORequest_t *taskTag)
osGLOBAL void tiINITransportRecovery(tiRoot_t *tiRoot, tiDeviceHandle_t *tiDeviceHandle)
#define AG_LOGICAL_UNIT_RESET
#define AG_CLEAR_TASK_SET
@ tiIntrEventTypeTransportRecovery
@ tiIntrEventTypeTaskManagement
#define AG_ABORT_TASK_SET
#define AG_TARGET_WARM_RESET
osGLOBAL void ttdssIOAbortedHandler(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 agIOStatus, bit32 agIOInfoLen, void *agParam, bit32 agOtherInfo)
union data structure specifies a request