49#ifdef INITIATOR_DRIVER
68GetHiResTimeStamp(
void);
70#undef TD_DEBUG_TRACE_ENABLE
71#define TD_DEBUG_IO_TRACE_BUFFER_MAX 1024
91#ifdef TD_DEBUG_TRACE_ENABLE
92#define TD_DEBUG_TRACE(ttdsaXchg, oneDeviceData) TDTraceAdd(ttdsaXchg, oneDeviceData)
94#define TD_DEBUG_TRACE(ttdsaXchg, oneDeviceData)
106 static bit32 TraceIdx = 0;
137 bit32 agInitiatorTag,
147 bit32 agFrameType, TLR;
151 TI_DBG4((
"ttdsaSSPReqReceived: start\n"));
166 if (oneDeviceData ==
agNULL)
168 TI_DBG1((
"ttdsaSSPReqReceived: no device data\n"));
178 TI_DBG1((
"ttdsaSSPReqReceived: no free xchg structures\n"));
185 TI_DBG1((
"ttdsaSSPReqReceived: tiIORequest is NULL\n"));
191 oneDeviceData->
agRoot = agRoot;
196 ttdsaXchg->
agRoot = agRoot;
202 ttdsaXchg->
tag = (
bit16)agInitiatorTag;
208 TI_DBG6((
"ttdsaSSPReqReceived: initiator tag 0x%x\n", agInitiatorTag));
212 TI_DBG4((
"ttdsaSSPReqReceived: CMD frame type\n"));
268 ttdsaXchg->
TLR = TLR;
282 TI_DBG4((
"ttdsaSSPReqReceived: TM frame type\n"));
305 TI_DBG1((
"ttdsaSSPReqReceived: unknown frame type\n"));
318 TI_DBG4((
"cdb[%d] 0x%x\n", i, cdb[i]));
331 ttdsaTgt_t *Target = (ttdsaTgt_t *) tdsaAllShared->
ttdsaTgt;
333#ifdef TD_DEBUG_ENABLE
343 TI_DBG4((
"tdsaProcessCDB: start\n"));
345 switch (cmdIU->
cdb[0])
348 TI_DBG4((
"tdsaProcessCDB: REPORT_LUN\n"));
352 TI_DBG4((
"tdsaProcessCDB: INQUIRY\n"));
357 TI_DBG4((
"tdsaProcessCDB: TEST_UNIT_READY\n"));
363 TI_DBG4((
"tdsaProcessCDB: READ CAPACITY\n"));
369 TI_DBG4((
"tdsaProcessCDB: READ\n"));
375 TI_DBG4((
"tdsaProcessCDB: WRITE\n"));
381 TI_DBG4((
"tdsaProcessCDB: MODE SENSE\n"));
385 TI_DBG4((
"tdsaProcessCDB: SCSIOPC_SYNCHRONIZE_CACHE_10\n"));
389 TI_DBG2((
"tdsaProcessCDB: SCSIOPC_REQUEST_SENSE\n"));
393 TI_DBG4((
"tdsaProcessCDB: UNKNOWN, cbd %d 0x%x\n", cmdIU->
cdb[0], cmdIU->
cdb[0]));
402 TI_DBG4((
"tdsaProcessCDB: CDB 6 byte, not yet\n"));
403#ifdef TD_DEBUG_ENABLE
406 TI_DBG4((
"tdsaProcessCDB: CDB len 0x%x\n", cdb6->len));
410 TI_DBG4((
"tdsaProcessCDB: CDB 10 byte\n"));
412 OSSA_READ_BE_16(AGROOT, &len, cdb10->len, 0);
413 TI_DBG4((
"tdsaProcessCDB: CDB len 0x%x\n", len));
417 TI_DBG4((
"tdsaProcessCDB: CDB 12 byte, not yet\n"));
419 OSSA_READ_BE_32(AGROOT, &len, cdb12->len, 0);
420 TI_DBG4((
"tdsaProcessCDB: CDB len 0x%x\n", len));
423 TI_DBG4((
"tdsaProcessCDB: CDB 16 byte, not yet\n"));
425 OSSA_READ_BE_32(AGROOT, &len, cdb16->len, 0);
426 TI_DBG4((
"tdsaProcessCDB: CDB len 0x%x\n", len));
429 TI_DBG4((
"tdsaProcessCDB: unknow CDB, group %d 0x%x\n", group, group));
437 ttdsaXchg->
dataLen = len * Target->OperatingOption.BlockSize;
447 ttdsaXchg->
dataLen = 0xffffffff;
502 TI_DBG4((
"tiTGTIOStart: start\n"));
503 TI_DBG4((
"tiTGTIOStart: dataLength 0x%x %d\n", dataLength, dataLength));
504 TI_DBG4((
"tiTGTIOStart: dataOffset 0x%x %d\n", dataOffset, dataOffset));
514 TI_DBG1((
"tiTGTIOStart: portcontext pid %d is invalid\n", onePortContext->
id));
524 agSSPTargetReq->
offset = dataOffset;
525 agSSPTargetReq->
agTag = ttdsaXchg->
tag;
529 if (ttdsaXchg->
TLR == 2)
546 TI_DBG6((
"tiTGTIOStart: pos 1\n"));
552 TI_DBG6((
"tiTGTIOStart: pos 2\n"));
562 TI_DBG4((
"tiTGTIOStart: send respsonse\n"));
563 TI_DBG4((
"tiTGTIOStart: resp.length 0x%x\n",
575 TI_DBG1((
"tiTGTIOStart: (ttdsaSendResp) sending not successful\n"));
580 TI_DBG1((
"tiTGTIOStart: (ttdsaSendResp) sending busy\n"));
592 TI_DBG1((
"tiTGTIOStart: ttdIOPrepareSGL did not return success\n"));
596 TI_DBG4((
"tiTGTIOStart: agroot %p ttdsaXchg %p\n", ttdsaXchg->
agRoot, ttdsaXchg));
602 TI_DBG4((
"tiTGTIOStart: read rsp collapse\n"));
603 TI_DBG4((
"tiTGTIOStart: initiator tag 0x%x\n", ttdsaXchg->
tag));
621 TI_DBG4((
"tiTGTIOStart: normal\n"));
622 TI_DBG4((
"tiTGTIOStart: initiator tag 0x%x\n", ttdsaXchg->
tag));
645 TI_DBG1((
"tiTGTIOStart: sending not successful\n"));
650 TI_DBG1((
"tiTGTIOStart: sending busy\n"));
692 void *sglVirtualAddr,
713 TI_DBG6((
"ttdssIOPrepareSGL: start\n"));
721 TI_DBG1((
"ttdssIOPrepareSGL: Error tiSgl1 is NULL\n"));
741 TI_DBG4((
"resp[%d] 0x%x\n", i, resp[i]));
761 TI_DBG4((
"ttdsaSendResp: start\n"));
762 TI_DBG4((
"ttdsaSendResp: agroot %p ttdsaXchg %p\n", ttdsaXchg->
agRoot, ttdsaXchg));
767 TI_DBG4((
"ttdsaSendResp: len 0x%x \n",
769 TI_DBG4((
"ttdsaSendResp: upper 0x%x \n",
771 TI_DBG4((
"ttdsaSendResp: lower 0x%x \n",
773 TI_DBG4((
"ttdsaSendResp: initiator tag 0x%x\n", ttdsaXchg->
tag));
776 agSSPTargetResp->
agTag = ttdsaXchg->
tag;
782#if defined (INITIATOR_DRIVER) && defined (TARGET_DRIVER)
809 TI_DBG4((
"ttdsaSendResp: sending successful\n"));
814 TI_DBG1((
"ttdsaSendResp: sending not successful\n"));
819 TI_DBG1((
"ttdsaSendResp: sending busy\n"));
840 bit32 statusDetail = 0;
848#ifdef TD_DEBUG_ENABLE
852 TI_DBG4((
"ttdsaIOCompleted: start\n"));
858#ifdef TD_DEBUG_ENABLE
864 TI_DBG1((
"ttdsaIOCompleted: tiRoot is NULL\n"));
872 TI_DBG1((
"ttdsaIOCompleted: XCHG is not active *****************\n"));
878 TI_DBG6((
"ttdsaIOCompleted: COMMAND \n"));
879 TI_DBG6((
"ttdsaIOCompleted: ttdsaXchg %p\n", ttdsaXchg));
881 TI_DBG6((
"ttdsaIOCompleted: command initiator tag 0x%x\n", ttdsaXchg->
tag));
895 TI_DBG6((
"ttdsaIOCompleted: osIOSuccess\n"));
899 TI_DBG4((
"ttdsaIOCompleted: read rsp collapse\n"));
911 TI_DBG6((
"ttdsaIOCompleted: sending response\n"));
916 TI_DBG1((
"ttdsaIOCompleted: attention needed\n"));
923 TI_DBG4((
"ttdsaIOCompleted: read rsp collapse and complete \n"));
925 TI_DBG6((
"ttdsaIOCompleted: already sent response, notify OS\n"));
929 TI_DBG1((
"ttdsaIOCompleted: wrong DEQUEUE_THIS\n"));
935 TI_DBG4((
"ttdsaIOCompleted: calling ostiTargetIOCompleted\n"));
946 TI_DBG4((
"ttdsaIOCompleted: osIOSuccess: nextphase\n"));
959 TI_DBG1((
"ttdsaIOCompleted: DIF detail UpperLBA 0x%08x LowerLBA 0x%08x\n", DifDetail->UpperLBA, DifDetail->LowerLBA));
964 TI_DBG1((
"ttdsaIOCompleted: ABORTED\n"));
971 TI_DBG1((
"ttdsaIOCompleted: OVERFLOW\n"));
977 TI_DBG1((
"ttdsaIOCompleted: UNDERFLOW\n"));
982 TI_DBG1((
"ttdsaIOCompleted: ABORT_RESET\n"));
988 TI_DBG1((
"ttdsaIOCompleted: OSSA_IO_XFR_ERROR_DEK_KEY_CACHE_MISS\n"));
994 TI_DBG1((
"ttdsaIOCompleted: OSSA_IO_XFR_ERROR_DEK_KEY_TAG_MISMATCH\n"));
1000 TI_DBG1((
"ttdsaIOCompleted: OSSA_IO_XFR_ERROR_DIF_APPLICATION_TAG_MISMATCH\n"));
1006 TI_DBG1((
"ttdsaIOCompleted: OSSA_IO_XFR_ERROR_DIF_REFERENCE_TAG_MISMATCH\n"));
1012 TI_DBG1((
"ttdsaIOCompleted: OSSA_IO_XFR_ERROR_DIF_CRC_MISMATCH\n"));
1030 TI_DBG1((
"ttdsaIOCompleted: Fail!!!!!!! agIOStatus=0x%x agIOInfoLen=0x%x agOtherInfo=0x%x\n", agIOStatus, agIOInfoLen, agOtherInfo));
1034 TI_DBG1((
"ttdsaIOCompleted: OSSA_IO_XFER_OPEN_RETRY_TIMEOUT ttdsaXchg->id 0x%x datalen 0x%x offset 0x%x agTag 0x%x\n",
1050 TI_DBG1((
"ttdsaIOCompleted: ERROR ttdsaXchg=%p agIOStatus= 0x%x\n",
1053 TI_DBG1((
"CDB= 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
1073 TI_DBG1((
"ttdsaIOCompleted: wrong DEQUEUE_THIS 1\n"));
1077 TI_DBG2((
"ttdsaIOCompleted: 1 loc retries on OSSA_IO_XFER_OPEN_RETRY_TIMEOUT\n"));
1078 if ( (agOtherInfo & 0x1) == 1)
1081 TI_DBG2((
"ttdsaIOCompleted: 0 loc response retry\n"));
1086 TI_DBG2((
"ttdsaIOCompleted: 0 loc retried\n"));
1091 TI_DBG1((
"ttdsaIOCompleted: 0 loc retry failed\n"));
1127 TI_DBG1((
"ttdsaIOCompleted: 1 loc retried\n"));
1132 TI_DBG1((
"ttdsaIOCompleted: 1 loc retry failed\n"));
1172 TI_DBG1((
"ttdsaIOCompleted: 2 loc reponse retry\n"));
1177 TI_DBG1((
"ttdsaIOCompleted: 2 loc retried\n"));
1182 TI_DBG1((
"ttdsaIOCompleted: 2 loc retry failed\n"));
1232 TI_DBG1((
"ttdsaIOCompleted: 2\n"));
1235 TI_DBG1((
"ttdsaIOCompleted: wrong DEQUEUE_THIS 2\n"));
1239 TI_DBG1((
"ttdsaIOCompleted: 2 loc retries on OSSA_IO_XFER_OPEN_RETRY_TIMEOUT\n"));
1240 if ( (agOtherInfo & 0x1) == 1)
1243 TI_DBG2((
"ttdsaIOCompleted: 0 loc response retry\n"));
1248 TI_DBG2((
"ttdsaIOCompleted: 0 loc retried\n"));
1253 TI_DBG1((
"ttdsaIOCompleted: 0 loc retry failed\n"));
1289 TI_DBG1((
"ttdsaIOCompleted: 1 loc retried\n"));
1294 TI_DBG1((
"ttdsaIOCompleted: 1 loc retry failed\n"));
1318 TI_DBG1((
"ttdsaIOCompleted: 2 loc ttdsaXchg->id 0x%x datalen 0x%x offset 0x%x agTag 0x%x\n",
1338 TI_DBG1((
"ttdsaIOCompleted: 2 loc response retry\n"));
1344 TI_DBG1((
"ttdsaIOCompleted: 2 loc retried\n"));
1349 TI_DBG1((
"ttdsaIOCompleted: 2 loc retry failed\n"));
1374 TI_DBG1((
"ttdsaIOCompleted: retry is over\n"));
1395 TI_DBG1((
"ttdsaIOCompleted: TM request\n"));
1396 TI_DBG1((
"ttdsaIOCompleted: TM initiator tag 0x%x\n", ttdsaXchg->
tag));
1401 TI_DBG1((
"ttdsaIOCompleted: success\n"));
1405 TI_DBG1((
"ttdsaIOCompleted: ABORTED\n"));
1411 TI_DBG1((
"ttdsaIOCompleted: ABORT_RESET\n"));
1467 ttdsaTgt_t *Target = (ttdsaTgt_t *)tdsaAllShared->
ttdsaTgt;
1481 TI_DBG1((
"ttdsaTMProcess: start\n"));
1486 TMFun = agTMIU->taskMgntFunction;
1491 TI_DBG1((
"ttdsaTMProcess: ABORT_TASK\n"));
1495 TI_DBG1((
"ttdsaTMProcess: ABORT_TASK_SET\n"));
1499 TI_DBG1((
"ttdsaTMProcess: CLEAR_TASK_SET\n"));
1503 TI_DBG1((
"ttdsaTMProcess: LOGICAL_UNIT_RESET\n"));
1507 TI_DBG1((
"ttdsaTMProcess: CLEAR_ACA\n"));
1511 TI_DBG1((
"ttdsaTMProcess: QUERY_TASK\n"));
1515 TI_DBG1((
"ttdsaTMProcess: RESERVED TM 0x%x %d\n", TMFun, TMFun));
1536 TI_DBG1((
"ttdsaTMProcess: if abort task; to be tested \n"));
1541 IOList = Target->ttdsaXchgData.xchgBusyList.flink;
1545 while (IOList != &Target->ttdsaXchgData.xchgBusyList)
1549 if (tmp_ttdsaXchg->tag == agTMIU->tagOfTaskToBeManaged)
1551 TI_DBG1((
"ttdsaTMProcess: tag 0x%x\n",tmp_ttdsaXchg->tag));
1555 IOList = IOList->flink;
1561 TI_DBG1((
"ttdsaTMProcess: found \n"));
1564 TI_DBG1((
"ttdsaTMProcess: loc 1\n"));
1569 agIORequest = (
agsaIORequest_t *)&(tmp_ttdsaXchg->IORequestBody.agIORequest);
1570 oneDeviceData = tmp_ttdsaXchg->DeviceData;
1573 if (agIORequest ==
agNULL)
1575 TI_DBG1((
"ttdsaTMProcess: agIORequest is NULL\n"));
1579 TI_DBG1((
"ttdsaTMProcess: agIORequest is NOT NULL\n"));
1582 TI_DBG1((
"ttdsaTMProcess: agIORequest->saData is NULL\n"));
1586 TI_DBG1((
"ttdsaTMProcess: agIORequest->saData is NOT NULL\n"));
1602 TI_DBG1((
"ttdsaTMProcess: ABORT_TASK not found\n"));
1611 TI_DBG1((
"ttdsaTMProcess: calling ostiTaskManagement\n"));
1662 TI_DBG1((
"tiTGTIOAbort: start\n"));
1668 TI_DBG1((
"tiTGTIOAbort: IOError 1 \n"));
1682 TI_DBG1((
"tiTGTIOAbort: IOError 2 \n"));
1688 TI_DBG1((
"tiTGTIOAbort: wrong DEQUEUE_THIS\n"));
1691 TI_DBG1((
"tiTGTIOAbort: IOError 3\n"));
1699 TI_DBG1((
"tiTGTIOAbort: IOError 4\n"));
1705 TI_DBG1((
"tiTGTIOAbort: IOError 5\n"));
1710 TI_DBG1((
"tiTGTIOAbort: aborting; to be tested \n"));
1714 if (ttdsaIOAbortXchg ==
agNULL)
1716 TI_DBG1((
"tiTGTIOAbort: no free xchg structures\n"));
1720 ttdsaIOAbortXchg->
agRoot = agRoot;
1733 if (oneDeviceData ==
agNULL)
1735 TI_DBG1((
"tiTGTIOAbort: oneDeviceData is null; wrong\n"));
1740 ttdsaIOAbortXchg->
DeviceData = oneDeviceData;
1761 TI_DBG3((
"tiTGTIOAbortAll: start\n"));
1765 if (oneDeviceData ==
agNULL)
1767 TI_DBG1((
"tiTGTIOAbortAll: oneDeviceData is NULL!!!\n"));
1775 TI_DBG1((
"tiTGTIOAbortAll: NO Device did %d\n", oneDeviceData->
id ));
1781 agRoot = oneDeviceData->
agRoot;
1785 TI_DBG1((
"tiTGTIOAbortAll: agRoot is NULL!!!\n"));
1829 TI_DBG1((
"tiTGTSendTmResp: start 1\n"));
1836 TI_DBG1((
"tiTGTSendTmResp: start 2\n"));
1838 TI_DBG1((
"tiTGTSendTmResp: start 3\n"));
1849 TI_DBG2((
"tiTGTSendTmResp: tiSuccess\n"));
1853 TI_DBG1((
"tiTGTSendTmResp: tiError\n"));
1857 TI_DBG1((
"tiTGTSendTmResp: tibusy\n"));
1861 TI_DBG1((
"tiTGTSendTmResp: tiionodevicee\n"));
1865 TI_DBG1((
"tiTGTSendTmResp: timemorytoolarge\n"));
1869 TI_DBG1((
"tiTGTSendTmResp: timemorynotavail\n"));
1873 TI_DBG1((
"tiTGTSendTmResp: tiinvalidhandle\n"));
1877 TI_DBG1((
"tiTGTSendTmResp: tiNotsupported\n"));
1881 TI_DBG1((
"tiTGTSendTmResp: tireject\n"));
1885 TI_DBG1((
"tiTGTSendTmResp: tiincorrectlun\n"));
1889 TI_DBG1((
"tiTGTSendTmResp: default\n"));
1898 TI_DBG1((
"tiTGTSendTmResp: not TM frame\n"));
1905 TI_DBG1((
"tiTGTSendTmResp: send success\n"));
1910 TI_DBG1((
"tiTGTSendTmResp: sending not successful\n"));
1915 TI_DBG1((
"tiTGTSendTmResp: send busy\n"));
1929 TI_DBG1((
"tiTGTSendTmResp: respsonse is set \n"));
1930 TI_DBG1((
"tiTGTSendTmResp: resp.length 0x%x\n",
1939 TI_DBG1((
"tiTGTSendTmResp: direct call\n"));
1945#define TASK_MANAGEMENT_FUNCTION_COMPLETE 0x0
1946#define INVALID_FRAME 0x2
1947#define TASK_MANAGEMENT_FUNCTION_NOT_SUPPORTED 0x4
1948#define TASK_MANAGEMENT_FUNCTION_FAILED 0x5
1949#define TASK_MANAGEMENT_FUNCTION_SUCCEEDED 0x8
1950#define INVALID_LOGICAL_UNIT_NUMBER 0x9
1984 TI_DBG4((
"tiTGTSenseBufferGet: start\n"));
1985 OS_ASSERT((length <= 64),
"length too big in tiTGTSenseBufferGet");
2017 bit32 dataSentLength,
2044 bit32 TotalRespLen = 0;
2046 TI_DBG4 ((
"tiTGTSetResp: start\n"));
2047 TI_DBG4 ((
"tiTGTSetResp: datelen %d senselen %d\n", dataSentLength, senseLength));
2052 SASResp->agResp.status = ScsiStatus;
2057 TI_DBG1((
"tiTGTSetResp: TM\n"));
2058 if (senseLength != 0)
2060 TI_DBG1 ((
"tiTGTSetResp: non-zero sensedatalen for TM\n"));
2064 OSSA_WRITE_BE_32(agRoot, SASResp->agResp.responsedataLen, 0,
RESPONSE_DATA_LEN);
2065 OSSA_WRITE_BE_32(agRoot, SASResp->agResp.senseDataLen, 0, 0);
2071 if (senseLength == 0)
2073 TI_DBG4 ((
"tiTGTSetResp: CMND, no data\n"));
2075 SASResp->agResp.dataPres =
NO_DATA;
2076 OSSA_WRITE_BE_32(agRoot, SASResp->agResp.responsedataLen, 0, 0);
2077 OSSA_WRITE_BE_32(agRoot, SASResp->agResp.senseDataLen, 0, 0);
2082 TI_DBG4((
"tiTGTSetResp: read rsp collapse\n"));
2090 TI_DBG4((
"tiTGTSetResp: write rsp collapse\n"));
2107 TI_DBG4 ((
"tiTGTSetResp: CMND, sense data\n"));
2110 OSSA_WRITE_BE_32(agRoot, SASResp->agResp.responsedataLen, 0, 0);
2111 OSSA_WRITE_BE_32(agRoot, SASResp->agResp.senseDataLen, 0, senseLength);
2118 TI_DBG4((
"tiTGTSetResp: ttdsaXchg %p\n", ttdsaXchg));
2119 TI_DBG4((
"tiTGTSetResp: TotalRespLen 0x%x \n", TotalRespLen));
2120 TI_DBG4((
"tiTGTSetResp: upper 0x%x \n",
2122 TI_DBG4((
"tiTGTSetResp: lower 0x%x \n",
2140 TI_DBG1((
"tiTGTSetResp: respsonse is set \n"));
2141 TI_DBG1((
"tiTGTSetResp: resp.length 0x%x\n",
2151 agSSPTargetResp->agTag = ttdsaXchg->
tag;
2152 agSSPTargetResp->respBufLength = TotalRespLen;
2153 agSSPTargetResp->respBufUpper
2155 agSSPTargetResp->respBufLower
2160 TI_DBG4((
"tiTGTSetResp: len 0x%x \n",
2162 TI_DBG4((
"tiTGTSetResp: upper 0x%x \n",
2164 TI_DBG4((
"tiTGTSetResp: lower 0x%x \n",
2204 ttdsaTgt_t *Target = (ttdsaTgt_t *)tdsaAllShared->
ttdsaTgt;
2205 bit32 deviceToReturn;
2206 bit32 devicePresent=0;
2207 bit32 deviceIndex=0;
2215 TI_DBG4 ((
"tiTGTGetDeviceHandles: start\n"));
2218 if (maxDevs > Target->OperatingOption.MaxTargets)
2220 deviceToReturn = Target->OperatingOption.MaxTargets;
2224 deviceToReturn = maxDevs;
2229 PortContextList = tdsaAllShared->MainPortContextList.flink;
2230 while (PortContextList != &(tdsaAllShared->MainPortContextList))
2235 TI_DBG4((
"tiTGTGetDeviceHandles: found; oneportContext ID %d\n", onePortContext->id));
2239 PortContextList = PortContextList->flink;
2244 TI_DBG4((
"tiTGTGetDeviceHandles: No corressponding tdsaPortContext\n"));
2250 DeviceListList = tdsaAllShared->MainDeviceList.flink;
2251 while (DeviceListList != &(tdsaAllShared->MainDeviceList))
2254 TI_DBG4((
"tiTGTGetDeviceHandles: pid %d did %d\n", onePortContext->id, oneDeviceData->id));
2255 TI_DBG4((
"tiTGTGetDeviceHandles: device AddrHi 0x%08x\n", oneDeviceData->SASAddressID.sasAddressHi));
2256 TI_DBG4((
"tiTGTGetDeviceHandles: device AddrLo 0x%08x\n", oneDeviceData->SASAddressID.sasAddressLo));
2257 TI_DBG4((
"tiTGTGetDeviceHandles: handle %p\n", &(oneDeviceData->tiDeviceHandle)));
2258 if (oneDeviceData->valid ==
agTRUE)
2260 TI_DBG4((
"tiTGTGetDeviceHandles: valid deviceindex %d devicePresent %d\n", deviceIndex, devicePresent));
2262 tiDev[deviceIndex] = &(oneDeviceData->tiDeviceHandle);
2267 tiDev[deviceIndex] =
agNULL;
2268 TI_DBG4((
"tiTGTGetDeviceHandles: not valid deviceindex %d devicePresent %d\n", deviceIndex, devicePresent));
2272 if (devicePresent >= deviceToReturn )
2276 DeviceListList = DeviceListList->flink;
2279 return devicePresent;
2314 TI_DBG4 ((
"tiTGTGetDeviceInfo: start\n"));
2318 TI_DBG4 ((
"tiTGTGetDeviceInfo: tiDeviceHandle is NULL\n"));
2324 if (oneDeviceData ==
agNULL)
2326 TI_DBG4 ((
"tiTGTGetDeviceInfo: oneDeviceData is NULL\n"));
2382 TI_DBG1((
"itdssIOAbortedHandler: start\n"));
2387 TI_DBG1((
"itdssIOAbortedHandler: incorrect agIOStatus 0x%x\n", agIOStatus));
#define MIN(a, b)
MIN macro.
#define OS_ASSERT(expr, message)
#define osti_memset(s, c, n)
#define osti_memcpy(des, src, n)
osGLOBAL void ostiNextDataPhase(tiRoot_t *tiRoot, tiIORequest_t *tiIORequest)
osGLOBAL void ostiTargetTmCompleted(tiRoot_t *tiRoot, tiIORequest_t *tiTmRequest, tiIOStatus_t status, bit32 statusDetail)
osGLOBAL void ostiTargetIOCompleted(tiRoot_t *tiRoot, tiIORequest_t *tiIORequest, tiIOStatus_t status)
osGLOBAL void ostiTaskManagement(tiRoot_t *tiRoot, bit32 task, bit8 *scsiLun, tiIORequest_t *refTiIORequest, tiIORequest_t *tiTMRequest, tiDeviceHandle_t *tiDeviceHandle)
osGLOBAL void ostiProcessScsiReq(tiRoot_t *tiRoot, tiTargetScsiCmnd_t *tiTgtScsiCmnd, void *agFrameHandle, bit32 immDataLength, tiIORequest_t *tiIORequest, tiDeviceHandle_t *tiDeviceHandle)
osGLOBAL void ostiTargetIOError(tiRoot_t *tiRoot, tiIORequest_t *tiIORequest, tiIOStatus_t status, bit32 statusDetail)
The file defines the constants, data structure, and functions defined by LL API.
void * agsaFrameHandle_t
handle to access frame
#define AGSA_SSP_TGT_CMD_OR_TASK_RSP
#define OSSA_FRAME_TYPE_SSP_TASK
#define AGSA_TASK_MANAGEMENT_FUNCTION_NOT_SUPPORTED
#define OSSA_FRAME_TYPE_SSP_CMD
#define AGSA_CLEAR_TASK_SET
#define AGSA_LOGICAL_UNIT_RESET
#define AGSA_SSP_TGT_WRITE_DATA
#define AGSA_INCORRECT_LOGICAL_UNIT_NUMBER
#define AGSA_SSP_TGT_READ_DATA
#define AGSA_SSP_TGT_WRITE_GOOD_RESP
#define AGSA_ABORT_TASK_SET
#define AGSA_TASK_MANAGEMENT_FUNCTION_FAILED
#define AGSA_TASK_MANAGEMENT_FUNCTION_SUCCEEDED
#define AGSA_SSP_TGT_READ_GOOD_RESP
#define AGSA_MAX_SSPPAYLOAD_VIA_SFO
#define OSSA_MPI_ERR_IO_RESOURCE_UNAVAILABLE
#define OSSA_IO_TM_TAG_NOT_FOUND
#define OSSA_IO_DS_IN_RECOVERY
#define OSSA_IO_DS_NON_OPERATIONAL
#define OSSA_IO_XFR_ERROR_DEK_KEY_TAG_MISMATCH
#define OSSA_IO_XFR_ERROR_DIF_CRC_MISMATCH
#define OSSA_IO_UNDERFLOW
#define OSSA_IO_NOT_VALID
#define OSSA_IO_XFR_ERROR_DEK_KEY_CACHE_MISS
#define OSSA_IO_ABORT_RESET
#define OSSA_IO_XFR_ERROR_DIF_APPLICATION_TAG_MISMATCH
#define OSSA_IO_XFER_OPEN_RETRY_TIMEOUT
#define OSSA_IO_LINK_FAILURE
#define OSSA_IO_NO_DEVICE
#define OSSA_IO_PROG_ERROR
#define OSSA_IO_XFR_ERROR_DIF_REFERENCE_TAG_MISMATCH
struct agsaSSPResponseInfoUnit_s agsaSSPResponseInfoUnit_t
structure describes an SSP Response INFORMATION UNIT
#define SA_SSPCMD_GET_TASKATTRIB(pCmd)
The file defines the declaration of tSDK APIs.
GLOBAL void saFrameReadBlock(agsaRoot_t *agRoot, agsaFrameHandle_t agFrame, bit32 frameOffset, void *frameBuffer, bit32 frameBufLen)
Read a block from a frame.
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 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.
The file defines the declaration of OS APIs.
GLOBAL FORCEINLINE void ossaSSPCompleted(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 agIOStatus, bit32 agIOInfoLen, void *agParam, bit16 sspTag, bit32 agOtherInfo)
ossaSSPCompleted
#define SCSIOPC_REQUEST_SENSE
#define SCSIOPC_READ_CAPACITY_10
#define OPEN_RETRY_RETRIES
#define SCSIOPC_MODE_SENSE_6
#define SCSIOPC_READ_CAPACITY_16
#define SCSIOPC_MODE_SENSE_10
#define SCSIOPC_TEST_UNIT_READY
#define SCSIOPC_REPORT_LUN
#define SCSIOPC_SYNCHRONIZE_CACHE_10
tdsaDeviceData_t oneDeviceData
TDDebugTraceEntry_t Data[TD_DEBUG_IO_TRACE_BUFFER_MAX]
data structure stores OS specific and LL specific context
agsaSSPResponseInfoUnit_t agResp
data structure for SAS SSP IO reuqest body This structure contains IO related fields....
struct tdIORequestBody_s::@15::@17 SAS
union tdIORequestBody_s::@15 transport
union tdIORequestBody_s::@16 IOType
union tdIORequestBody_s::@16::@21::@22 TargetIOType
agsaIORequest_t agIORequest
tiIORequest_t * tiIORequest
agsaSASRequestBody_t agSASRequestBody
struct tdIORequestBody_s::@16::@21::@22::@23 RegIO
struct tdIORequestBody_s::@16::@21 TargetIO
data structure for SAS/SATA context at TD layer
struct ttdsaTgt_s * ttdsaTgt
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
agsaDeviceInfo_t agDeviceInfo
data structure for TD port context This structure maintains information about the port such as ID add...
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
tiDetailedDeviceInfo_t info
tdIORequestBody_t IORequestBody
tiTargetScsiCmnd_t tiTgtScsiCmnd
tiIORequest_t * tiIOToBeAbortedRequest
agsaSSPCmdInfoUnit_t agSSPCmndIU
agsaSSPScsiTaskMgntReq_t agTMIU
struct tdsaDeviceData_s * DeviceData
ttdsaDmaMemoryArea_t resp
struct ttdsaXchg_s * XchgToBeAborted
#define TD_GET_TLR(input)
#define TI_TIROOT_TO_AGROOT(t_root)
#define RESPONSE_DATA_LEN
#define TD_GET_FRAME_TYPE(input)
#define TDLIST_OBJECT_BASE(baseType, fieldName, fieldPtr)
osGLOBAL bit32 tdsaAbortAll(tiRoot_t *tiRoot, agsaRoot_t *agRoot, tdsaDeviceData_t *oneDeviceData)
FORCEINLINE bit32 tdsaRotateQnumber(tiRoot_t *tiRoot, tdsaDeviceData_t *oneDeviceData)
osGLOBAL void tdsaFreeEsglPages(tiRoot_t *tiRoot, tdList_t *EsglListHdr)
#define TD_GET_TIROOT(sa_root)
osGLOBAL bit32 tiTGTIOStartDif(tiRoot_t *tiRoot, tiIORequest_t *tiIORequest, bit32 dataOffset, bit32 dataLength, tiSgl_t *dataSGL, void *sglVirtualAddr, tiDif_t *difOption)
#define AG_LOGICAL_UNIT_RESET
@ tiDetailDifAppTagMismatch
@ tiDetailDekKeyCacheMiss
@ tiDetailDifRefTagMismatch
#define AG_CLEAR_TASK_SET
#define TASK_HEAD_OF_QUEUE
#define AG_ABORT_TASK_SET
#define WRITE_GOOD_RESPONSE
#define TD_XCHG_CONTEXT_NO_SEND_RSP(ti_root)
#define TD_XCHG_GET_STATE(xchg)
#define READ_GOOD_RESPONSE
#define TD_XCHG_STATE_INACTIVE
#define TD_XCHG_CONTEXT_NO_CMD_RCVD(ti_root)
#define TD_XCHG_CONTEXT_NO_START_IO(ti_root)
#define TD_XCHG_CONTEXT_NO_IO_COMPLETED(ti_root)
#define TD_XCHG_STATE_ACTIVE
osGLOBAL ttdsaXchg_t * ttdsaXchgGetStruct(agsaRoot_t *agRoot)
osGLOBAL void ttdsaXchgFreeStruct(tiRoot_t *tiRoot, ttdsaXchg_t *ttdsaXchg)
#define TD_DEBUG_IO_TRACE_BUFFER_MAX
osGLOBAL void ttdsaTMProcess(tiRoot_t *tiRoot, ttdsaXchg_t *ttdsaXchg)
struct TDDebugTrace_s TDDebugTrace_t
osGLOBAL void tiTGTSetResp(tiRoot_t *tiRoot, tiIORequest_t *tiIORequest, bit32 dataSentLength, bit8 ScsiStatus, bit32 senseLength)
osGLOBAL void ttdsaSSPReqReceived(agsaRoot_t *agRoot, agsaDevHandle_t *agDevHandle, agsaFrameHandle_t agFrameHandle, bit32 agInitiatorTag, bit32 parameter, bit32 agFrameLen)
osGLOBAL bit32 tiTGTSendTmResp(tiRoot_t *tiRoot, tiIORequest_t *tiTMRequest, bit32 status)
osGLOBAL void ttdssIOAbortedHandler(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 agIOStatus, bit32 agIOInfoLen, void *agParam, bit32 agOtherInfo)
struct TDDebugTraceEntry_s TDDebugTraceEntry_t
osGLOBAL bit32 tiTGTGetDeviceInfo(tiRoot_t *tiRoot, tiDeviceHandle_t *tiDeviceHandle, tiDeviceInfo_t *tiDeviceInfo)
osGLOBAL bit32 tiTGTIOAbortAll(tiRoot_t *tiRoot, tiDeviceHandle_t *tiDeviceHandle)
#define TD_DEBUG_TRACE(ttdsaXchg, oneDeviceData)
osGLOBAL bit32 tiTGTIOAbort(tiRoot_t *tiRoot, tiIORequest_t *taskTag)
void TDTraceAdd(ttdsaXchg_t *ttdsaXchg, tdsaDeviceData_t *oneDeviceData)
osGLOBAL bit32 ttdssIOPrepareSGL(tiRoot_t *tiRoot, tdIORequestBody_t *tdIORequestBody, tiSgl_t *tiSgl1, tiSgl_t *tiSgl2, void *sglVirtualAddr)
osGLOBAL void tdsaProcessCDB(agsaSSPCmdInfoUnit_t *cmdIU, ttdsaXchg_t *ttdsaXchg)
void dumpresp(bit8 *resp, bit32 len)
osGLOBAL void ttdsaIOCompleted(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 agIOStatus, bit32 agIOInfoLen, agsaFrameHandle_t agFrameHandle, bit32 agOtherInfo)
osGLOBAL bit32 tiTGTGetDeviceHandles(tiRoot_t *tiRoot, tiPortalContext_t *tiPortalContext, tiDeviceHandle_t *tiDev[], bit32 maxDevs)
osGLOBAL bit32 ttdsaSendResp(agsaRoot_t *agRoot, ttdsaXchg_t *ttdsaXchg)
osGLOBAL bit32 tiTGTIOStart(tiRoot_t *tiRoot, tiIORequest_t *tiIORequest, bit32 dataOffset, bit32 dataLength, tiSgl_t *dataSGL, void *sglVirtualAddr)
osGLOBAL void * tiTGTSenseBufferGet(tiRoot_t *tiRoot, tiIORequest_t *tiIORequest, bit32 length)
agsaSSPTargetResponse_t sspTargetResponse
agsaSSPTargetRequest_t sspTargetReq