1 /*******************************************************************************
2 *Copyright (c) 2014 PMC-Sierra, Inc. All rights reserved.
4 *Redistribution and use in source and binary forms, with or without modification, are permitted provided
5 *that the following conditions are met:
6 *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
8 *2. Redistributions in binary form must reproduce the above copyright notice,
9 *this list of conditions and the following disclaimer in the documentation and/or other materials provided
10 *with the distribution.
12 *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
13 *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
14 *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
15 *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
16 *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
17 *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
18 *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
19 *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
21 ********************************************************************************/
22 #include <sys/cdefs.h>
23 __FBSDID("$FreeBSD$");
24 #include <dev/pms/config.h>
26 #include <dev/pms/freebsd/driver/common/osenv.h>
27 #include <dev/pms/freebsd/driver/common/ostypes.h>
28 #include <dev/pms/freebsd/driver/common/osdebug.h>
30 #include <dev/pms/RefTisa/tisa/api/titypes.h>
31 #include <dev/pms/RefTisa/tisa/api/ostiapi.h>
32 #include <dev/pms/RefTisa/tisa/api/tiapi.h>
34 #include <dev/pms/RefTisa/tisa/api/tiglobal.h>
38 #include <dev/pms/RefTisa/discovery/api/dm.h>
39 #include <dev/pms/RefTisa/discovery/api/dmapi.h>
40 #include <dev/pms/RefTisa/discovery/api/tddmapi.h>
43 #include <dev/pms/RefTisa/sat/api/sm.h>
44 #include <dev/pms/RefTisa/sat/api/smapi.h>
47 #ifdef INITIATOR_DRIVER
48 #include <dev/pms/RefTisa/tisa/sassata/sas/ini/itdtypes.h>
51 #include <dev/pms/RefTisa/tisa/sassata/sas/common/tdtypes.h>
52 #include <dev/pms/RefTisa/tisa/sassata/common/tdsatypes.h>
53 #include <dev/pms/RefTisa/tisa/sassata/common/tdproto.h>
56 extern bit32 gDMDebugLevel;
62 agsaDevHandle_t *agDevHandle
66 tdsaContext_t *tdsaAllShared;
68 tdsaDeviceData_t *oneDeviceData = agNULL;
69 TI_DBG1(("tddmRotateQnumber: start\n"));
70 if (agDevHandle == agNULL)
72 TI_DBG1(("tddmRotateQnumber: agDevHandle is NULL!!!\n"));
75 oneDeviceData = (tdsaDeviceData_t *)agDevHandle->osData;
76 if (oneDeviceData == agNULL)
78 TI_DBG1(("tddmRotateQnumber: oneDeviceData is NULL!!!\n"));
81 tdsaRoot = (tdsaRoot_t *)dmRoot->tdData;
82 if (tdsaRoot == agNULL)
84 TI_DBG1(("tddmRotateQnumber: tdsaRoot is NULL\n"));
87 tdsaAllShared = &(tdsaRoot->tdsaAllShared);
88 if (tdsaAllShared == agNULL)
90 TI_DBG1(("tddmRotateQnumber: tdsaAllShared is NULL\n"));
93 tiRoot = tdsaAllShared->agRootOsDataForInt.tiRoot;
96 TI_DBG1(("tddmRotateQnumber: tiRoot is NULL\n"));
99 return tdsaRotateQnumber(tiRoot, oneDeviceData);
104 tdsaPortContext_t *onePortContext
107 bit32 i, localMCN = 0;
109 TI_DBG2(("tdsaFindLocalMCN: start\n"));
111 if (onePortContext->valid == agFALSE)
113 TI_DBG1(("tdsaFindLocalMCN: invalid portcontext id %d\n", onePortContext->id));
117 for(i=0;i<TD_MAX_NUM_PHYS;i++)
119 if (onePortContext->PhyIDList[i] == agTRUE)
133 onePortContext->tiPortalContext,
135 tiIntrEventTypeDiscovery,
140 remove(de-register) all devices
143 onePortContext->tiPortalContext,
145 tiIntrEventTypeDiscovery,
151 dmRoot->tdData is tdsaRoot_t (just like current TD layer)
152 dmPortContext->tdData is tdsaPortContext_t
158 dmPortContext_t *dmPortContext,
162 tdsaRoot_t *tdsaRoot;
163 tdsaContext_t *tdsaAllShared;
165 tdsaPortContext_t *onePortContext;
167 agsaPortContext_t *agPortContext;
169 TI_DBG1(("tddmDiscoverCB: start\n"));
170 tdsaRoot = (tdsaRoot_t *)dmRoot->tdData;
171 if (tdsaRoot == agNULL)
173 TI_DBG1(("tddmDiscoverCB: tdsaRoot is NULL\n"));
177 tdsaAllShared = &(tdsaRoot->tdsaAllShared);
178 if (tdsaAllShared == agNULL)
180 TI_DBG1(("tddmDiscoverCB: tdsaAllShared is NULL\n"));
184 tiRoot = tdsaAllShared->agRootOsDataForInt.tiRoot;
185 if (tiRoot == agNULL)
187 TI_DBG1(("tddmDiscoverCB: tiRoot is NULL\n"));
191 onePortContext = (tdsaPortContext_t *)dmPortContext->tdData;
192 if (onePortContext == agNULL)
194 TI_DBG1(("tddmDiscoverCB: onePortContext is NULL\n"));
198 TI_DBG2(("tddmDiscoverCB: localMCN 0x%x\n", tdsaFindLocalMCN(tiRoot, onePortContext)));
200 if (eventStatus == dmDiscCompleted)
202 TI_DBG1(("tddmDiscoverCB: dmDiscCompleted\n"));
203 onePortContext->DiscoveryState = ITD_DSTATE_COMPLETED;
204 onePortContext->DMDiscoveryState = dmDiscCompleted;
205 TI_DBG1(("tddmDiscoverCB: pid %d tiPortalContext %p\n", onePortContext->id, onePortContext->tiPortalContext));
207 /* update onePortContext->UpdateMCN = agFALSE */
208 if ( onePortContext->UpdateMCN == agTRUE)
210 TI_DBG2(("tddmDiscoverCB: calling tdsaUpdateMCN\n"));
211 onePortContext->UpdateMCN = agFALSE;
212 tdsaUpdateMCN(dmRoot, onePortContext);
217 onePortContext->tiPortalContext,
219 tiIntrEventTypeDiscovery,
224 else if (eventStatus == dmDiscFailed )
226 TI_DBG1(("tddmDiscoverCB: dmDiscFailed \n"));
227 onePortContext->DiscoveryState = ITD_DSTATE_COMPLETED;
228 onePortContext->DMDiscoveryState = dmDiscFailed;
229 TI_DBG1(("tddmDiscoverCB: pid %d tiPortalContext %p\n", onePortContext->id, onePortContext->tiPortalContext));
230 agRoot = &(tdsaAllShared->agRootNonInt);
231 if (agRoot == agNULL)
233 TI_DBG1(("tddmDiscoverCB: agRoot is NULL\n"));
236 agPortContext = onePortContext->agPortContext;
237 if (agPortContext == agNULL)
239 TI_DBG1(("tddmDiscoverCB: agPortContext is NULL\n"));
243 invalidate all devices in this port
245 tddmInvalidateDevicesInPort(tiRoot, onePortContext);
247 saPortControl(agRoot,
258 onePortContext->tiPortalContext,
260 tiIntrEventTypeDiscovery,
265 else if (eventStatus == dmDiscAborted )
267 TI_DBG1(("tddmDiscoverCB: dmDiscAborted \n"));
268 onePortContext->DMDiscoveryState = dmDiscAborted;
270 else if (eventStatus == dmDiscAbortFailed )
272 TI_DBG1(("tddmDiscoverCB: dmDiscAbortFailed \n"));
273 onePortContext->DMDiscoveryState = dmDiscAbortFailed;
275 else if (eventStatus == dmDiscAbortInvalid )
277 TI_DBG1(("tddmDiscoverCB: dmDiscAbortInvalid \n"));
278 onePortContext->DMDiscoveryState = dmDiscAbortInvalid;
280 else if (eventStatus == dmDiscAbortInProgress )
282 TI_DBG1(("tddmDiscoverCB: dmDiscAbortInProgress \n"));
283 onePortContext->DMDiscoveryState = dmDiscAbortInProgress;
287 TI_DBG1(("tddmDiscoverCB: undefined eventStatus 0x%x\n", eventStatus));
288 onePortContext->DMDiscoveryState = dmDiscFailed;
296 tddmQueryDiscoveryCB(
298 dmPortContext_t *dmPortContext,
303 tdsaPortContext_t *onePortContext = agNULL;
305 TI_DBG2(("tddmQueryDiscoveryCB: start\n"));
306 onePortContext = (tdsaPortContext_t *)dmPortContext->tdData;
307 if (onePortContext == agNULL)
309 TI_DBG1(("tddmQueryDiscoveryCB: onePortContext is NULL\n"));
312 TI_DBG2(("tddmQueryDiscoveryCB: discType %d discState %d\n", discType, discState));
314 onePortContext->DMDiscoveryState = discState;
319 tddmInvalidateDevicesInPort(
321 tdsaPortContext_t *onePortContext
324 tdsaRoot_t *tdsaRoot = (tdsaRoot_t *) tiRoot->tdData;
325 tdsaContext_t *tdsaAllShared = (tdsaContext_t *)&tdsaRoot->tdsaAllShared;
326 tdsaDeviceData_t *oneDeviceData = agNULL;
327 tdList_t *DeviceListList;
329 TI_DBG1(("tddmInvalidateDevicesInPort: start\n"));
331 /* find a device's existence */
332 DeviceListList = tdsaAllShared->MainDeviceList.flink;
333 while (DeviceListList != &(tdsaAllShared->MainDeviceList))
335 oneDeviceData = TDLIST_OBJECT_BASE(tdsaDeviceData_t, MainLink, DeviceListList);
336 if (oneDeviceData == agNULL)
338 TI_DBG1(("tddmInvalidateDevicesInPort: oneDeviceData is NULL!!!\n"));
341 if ((oneDeviceData->registered == agTRUE) &&
342 (oneDeviceData->tdPortContext == onePortContext)
346 TI_DBG3(("tddmInvalidateDevicesInPort: Found pid %d did %d\n", onePortContext->id, oneDeviceData->id));
347 if (oneDeviceData->SASAddressID.sasAddressHi == onePortContext->sasRemoteAddressHi &&
348 oneDeviceData->SASAddressID.sasAddressLo == onePortContext->sasRemoteAddressLo
351 TI_DBG1(("tddmInvalidateDevicesInPort: keeping\n"));
352 oneDeviceData->valid = agTRUE;
353 oneDeviceData->valid2 = agFALSE;
355 else if (oneDeviceData->valid == agTRUE)
357 oneDeviceData->valid = agFALSE;
358 oneDeviceData->valid2 = agFALSE;
359 oneDeviceData->registered = agFALSE;
362 DeviceListList = DeviceListList->flink;
365 TI_DBG3(("tddmInvalidateDevicesInPort: end\n"));
373 tdsaPortContext_t *onePortContext,
374 tdsaSASSubID_t *agSASSubID
377 tdsaRoot_t *tdsaRoot = (tdsaRoot_t *) tiRoot->tdData;
378 tdsaContext_t *tdsaAllShared = (tdsaContext_t *)&tdsaRoot->tdsaAllShared;
379 tdsaDeviceData_t *oneDeviceData = agNULL;
380 tdList_t *DeviceListList;
383 TI_DBG3(("tddmNewSASorNot: start\n"));
385 /* find a device's existence */
386 DeviceListList = tdsaAllShared->MainDeviceList.flink;
387 while (DeviceListList != &(tdsaAllShared->MainDeviceList))
389 oneDeviceData = TDLIST_OBJECT_BASE(tdsaDeviceData_t, MainLink, DeviceListList);
390 if (oneDeviceData == agNULL)
392 TI_DBG1(("tddmNewSASorNot: oneDeviceData is NULL!!!\n"));
395 if ((oneDeviceData->SASAddressID.sasAddressHi == agSASSubID->sasAddressHi) &&
396 (oneDeviceData->SASAddressID.sasAddressLo == agSASSubID->sasAddressLo) &&
397 (oneDeviceData->registered == agTRUE) &&
398 (oneDeviceData->tdPortContext == onePortContext)
401 TI_DBG3(("tddmNewSASorNot: Found pid %d did %d\n", onePortContext->id, oneDeviceData->id));
405 DeviceListList = DeviceListList->flink;
410 TI_DBG3(("tddmNewSASorNot: end\n"));
415 osGLOBAL tdsaDeviceData_t *
416 tddmPortSASDeviceFind(
418 tdsaPortContext_t *onePortContext,
423 tdsaRoot_t *tdsaRoot = (tdsaRoot_t *) tiRoot->tdData;
424 tdsaContext_t *tdsaAllShared = (tdsaContext_t *)&tdsaRoot->tdsaAllShared;
425 tdsaDeviceData_t *oneDeviceData, *RetDeviceData=agNULL;
426 tdList_t *DeviceListList;
428 TI_DBG2(("tddmPortSASDeviceFind: start\n"));
430 TD_ASSERT((agNULL != tiRoot), "");
431 TD_ASSERT((agNULL != onePortContext), "");
433 tdsaSingleThreadedEnter(tiRoot, TD_DEVICE_LOCK);
435 /* find a device's existence */
436 DeviceListList = tdsaAllShared->MainDeviceList.flink;
437 while (DeviceListList != &(tdsaAllShared->MainDeviceList))
439 oneDeviceData = TDLIST_OBJECT_BASE(tdsaDeviceData_t, MainLink, DeviceListList);
440 if (oneDeviceData == agNULL)
442 TI_DBG1(("tddmPortSASDeviceFind: oneDeviceData is NULL!!!\n"));
445 if ((oneDeviceData->SASAddressID.sasAddressHi == sasAddrHi) &&
446 (oneDeviceData->SASAddressID.sasAddressLo == sasAddrLo) &&
447 (oneDeviceData->valid == agTRUE) &&
448 (oneDeviceData->tdPortContext == onePortContext)
451 TI_DBG2(("tddmPortSASDeviceFind: Found pid %d did %d\n", onePortContext->id, oneDeviceData->id));
452 TI_DBG2(("tddmPortSASDeviceFind: sasAddressHi 0x%08x\n", oneDeviceData->SASAddressID.sasAddressHi));
453 TI_DBG2(("tddmPortSASDeviceFind: sasAddressLo 0x%08x\n", oneDeviceData->SASAddressID.sasAddressLo));
454 RetDeviceData = oneDeviceData;
457 DeviceListList = DeviceListList->flink;
460 tdsaSingleThreadedLeave(tiRoot, TD_DEVICE_LOCK);
462 return RetDeviceData;
466 osGLOBAL tdsaDeviceData_t *
467 tddmAddToSharedcontext(
469 tdsaPortContext_t *onePortContext,
470 tdsaSASSubID_t *agSASSubID,
471 tdsaDeviceData_t *oneExpDeviceData,
475 tdsaDeviceData_t *oneDeviceData = agNULL;
476 tdList_t *DeviceListList;
477 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
478 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
479 tdsaRoot_t *tdsaRoot = (tdsaRoot_t *) tiRoot->tdData;
480 tdsaContext_t *tdsaAllShared = (tdsaContext_t *)&tdsaRoot->tdsaAllShared;
481 bit32 new_device = agTRUE;
483 TI_DBG1(("tddmAddToSharedcontext: start\n"));
485 TI_DBG1(("tddmAddToSharedcontext: oneportContext ID %d\n", onePortContext->id));
486 /* find a device's existence */
487 DeviceListList = tdsaAllShared->MainDeviceList.flink;
488 while (DeviceListList != &(tdsaAllShared->MainDeviceList))
490 oneDeviceData = TDLIST_OBJECT_BASE(tdsaDeviceData_t, MainLink, DeviceListList);
491 if (oneDeviceData == agNULL)
493 TI_DBG1(("tddmAddToSharedcontext: oneDeviceData is NULL!!!\n"));
496 if ((oneDeviceData->SASAddressID.sasAddressHi == agSASSubID->sasAddressHi) &&
497 (oneDeviceData->SASAddressID.sasAddressLo == agSASSubID->sasAddressLo) &&
498 (oneDeviceData->tdPortContext == onePortContext)
501 TI_DBG1(("tddmAddToSharedcontext: pid %dtddmAddToSharedcontext did %d\n", onePortContext->id, oneDeviceData->id));
502 new_device = agFALSE;
505 DeviceListList = DeviceListList->flink;
509 if (new_device == agTRUE)
511 TI_DBG1(("tddmAddToSharedcontext: new device\n"));
512 tdsaSingleThreadedEnter(tiRoot, TD_DEVICE_LOCK);
513 if (!TDLIST_NOT_EMPTY(&(tdsaAllShared->FreeDeviceList)))
515 tdsaSingleThreadedLeave(tiRoot, TD_DEVICE_LOCK);
516 TI_DBG1(("tddmAddToSharedcontext: empty DeviceData FreeLink\n"));
520 TDLIST_DEQUEUE_FROM_HEAD(&DeviceListList, &(tdsaAllShared->FreeDeviceList));
521 tdsaSingleThreadedLeave(tiRoot, TD_DEVICE_LOCK);
522 oneDeviceData = TDLIST_OBJECT_BASE(tdsaDeviceData_t, FreeLink, DeviceListList);
524 TI_DBG1(("tddmAddToSharedcontext: oneDeviceData %p did %d\n", oneDeviceData, oneDeviceData->id));
526 onePortContext->Count++;
527 oneDeviceData->agRoot = agRoot;
528 /* saving sas address */
529 oneDeviceData->SASAddressID.sasAddressLo = agSASSubID->sasAddressLo;
530 oneDeviceData->SASAddressID.sasAddressHi = agSASSubID->sasAddressHi;
531 oneDeviceData->initiator_ssp_stp_smp = agSASSubID->initiator_ssp_stp_smp;
532 oneDeviceData->target_ssp_stp_smp = agSASSubID->target_ssp_stp_smp;
533 oneDeviceData->tdPortContext = onePortContext;
534 /* handles both SAS target and STP-target, SATA-device */
535 if (!DEVICE_IS_SATA_DEVICE(oneDeviceData) && !DEVICE_IS_STP_TARGET(oneDeviceData))
537 oneDeviceData->DeviceType = TD_SAS_DEVICE;
541 oneDeviceData->DeviceType = TD_SATA_DEVICE;
544 oneDeviceData->ExpDevice = oneExpDeviceData;
545 /* set phyID only when it has initial value of 0xFF */
546 if (oneDeviceData->phyID == 0xFF)
548 oneDeviceData->phyID = phyID;
551 oneDeviceData->valid = agTRUE;
553 /* add the devicedata to the portcontext */
554 tdsaSingleThreadedEnter(tiRoot, TD_DEVICE_LOCK);
555 TDLIST_ENQUEUE_AT_TAIL(&(oneDeviceData->MainLink), &(tdsaAllShared->MainDeviceList));
556 tdsaSingleThreadedLeave(tiRoot, TD_DEVICE_LOCK);
557 TI_DBG1(("tddmAddToSharedcontext: one case pid %d did %d \n", onePortContext->id, oneDeviceData->id));
558 TI_DBG1(("tddmAddToSharedcontext: new case pid %d did %d phyID %d\n", onePortContext->id, oneDeviceData->id, oneDeviceData->phyID));
560 else /* old device */
562 TI_DBG1(("tddmAddToSharedcontext: old device\n"));
563 TI_DBG1(("tddmAddToSharedcontext: oneDeviceData %p did %d\n", oneDeviceData, oneDeviceData->id));
565 oneDeviceData->agRoot = agRoot;
566 /* saving sas address */
567 oneDeviceData->SASAddressID.sasAddressLo = agSASSubID->sasAddressLo;
568 oneDeviceData->SASAddressID.sasAddressHi = agSASSubID->sasAddressHi;
569 oneDeviceData->initiator_ssp_stp_smp = agSASSubID->initiator_ssp_stp_smp;
570 oneDeviceData->target_ssp_stp_smp = agSASSubID->target_ssp_stp_smp;
571 oneDeviceData->tdPortContext = onePortContext;
572 /* handles both SAS target and STP-target, SATA-device */
573 if (!DEVICE_IS_SATA_DEVICE(oneDeviceData) && !DEVICE_IS_STP_TARGET(oneDeviceData))
575 oneDeviceData->DeviceType = TD_SAS_DEVICE;
579 oneDeviceData->DeviceType = TD_SATA_DEVICE;
582 oneDeviceData->ExpDevice = oneExpDeviceData;
583 /* set phyID only when it has initial value of 0xFF */
584 if (oneDeviceData->phyID == 0xFF)
586 oneDeviceData->phyID = phyID;
589 oneDeviceData->valid = agTRUE;
590 TI_DBG1(("tddmAddToSharedcontext: old case pid %d did %d phyID %d\n", onePortContext->id, oneDeviceData->id, oneDeviceData->phyID));
593 return oneDeviceData;
599 calls saRegisterNewDevice()
600 in ossaDeviceRegistrationCB(), if an expander, register to DM
601 #define DEVICE_IS_SMP_TARGET(DeviceData) \
602 (((DeviceData)->target_ssp_stp_smp & DEVICE_SMP_BIT) == DEVICE_SMP_BIT)
604 osGLOBAL tdsaDeviceData_t *
607 tdsaPortContext_t *onePortContext,
608 dmDeviceInfo_t *dmDeviceInfo,
609 tdsaDeviceData_t *oneExpDeviceData
612 tdsaRoot_t *tdsaRoot = (tdsaRoot_t *) tiRoot->tdData;
613 tdsaContext_t *tdsaAllShared = (tdsaContext_t *)&tdsaRoot->tdsaAllShared;
614 tdsaDeviceData_t *oneDeviceData = agNULL;
615 tdsaSASSubID_t agSASSubID;
618 TI_DBG2(("tddmPortDeviceAdd: start\n"));
621 agSASSubID.sasAddressHi = TD_GET_SAS_ADDRESSHI(dmDeviceInfo->sasAddressHi);
622 agSASSubID.sasAddressLo = TD_GET_SAS_ADDRESSLO(dmDeviceInfo->sasAddressLo);
623 agSASSubID.initiator_ssp_stp_smp = dmDeviceInfo->initiator_ssp_stp_smp;
624 agSASSubID.target_ssp_stp_smp = dmDeviceInfo->target_ssp_stp_smp;
625 phyID = (dmDeviceInfo->ext) & 0xFF;
627 /* old device and already registered to LL; added by link-up event */
628 if ( agFALSE == tdssNewSASorNot(
629 onePortContext->agRoot,
635 /* old device and already registered to LL; added by link-up event */
636 TI_DBG2(("tddmPortDeviceAdd: OLD qqqq initiator_ssp_stp_smp %d target_ssp_stp_smp %d\n", agSASSubID.initiator_ssp_stp_smp, agSASSubID.target_ssp_stp_smp));
637 /* find the old device */
638 oneDeviceData = tdssNewAddSASToSharedcontext(
639 onePortContext->agRoot,
646 if (oneDeviceData == agNULL)
648 TI_DBG1(("tddmPortDeviceAdd: no more device!!! oneDeviceData is null\n"));
651 /* If a device is allocated */
652 if ( oneDeviceData != agNULL )
655 TI_DBG2(("tddmPortDeviceAdd: sasAddressHi 0x%08x\n", agSASSubID.sasAddressHi));
656 TI_DBG2(("tddmPortDeviceAdd: sasAddressLo 0x%08x\n", agSASSubID.sasAddressLo));
657 TI_DBG2(("tddmPortDeviceAdd: phyID 0x%x\n", phyID));
659 /* copy dmDeviceInfo to oneDeviceData->agDeviceInfo except ext field */
660 oneDeviceData->agDeviceInfo.smpTimeout = dmDeviceInfo->smpTimeout;
661 oneDeviceData->agDeviceInfo.it_NexusTimeout = dmDeviceInfo->it_NexusTimeout;
662 oneDeviceData->agDeviceInfo.firstBurstSize = dmDeviceInfo->firstBurstSize;
663 oneDeviceData->agDeviceInfo.devType_S_Rate = dmDeviceInfo->devType_S_Rate;
664 osti_memcpy(&(oneDeviceData->agDeviceInfo.sasAddressHi), &(dmDeviceInfo->sasAddressHi), 4);
665 osti_memcpy(&(oneDeviceData->agDeviceInfo.sasAddressLo), &(dmDeviceInfo->sasAddressLo), 4);
666 if (dmDeviceInfo->sataDeviceType == SATA_ATAPI_DEVICE)
668 oneDeviceData->agDeviceInfo.flag |= ATAPI_DEVICE_FLAG;
671 oneDeviceData->satDevData.satDeviceType = dmDeviceInfo->sataDeviceType;
675 oneDeviceData->agContext.osData = oneDeviceData;
676 oneDeviceData->agContext.sdkData = agNULL;
679 return oneDeviceData;
684 TI_DBG2(("tddmPortDeviceAdd: NEW qqqq initiator_ssp_stp_smp %d target_ssp_stp_smp %d\n", agSASSubID.initiator_ssp_stp_smp, agSASSubID.target_ssp_stp_smp));
686 /* allocate a new device and set the valid bit */
687 oneDeviceData = tdssNewAddSASToSharedcontext(
688 onePortContext->agRoot,
695 if (oneDeviceData == agNULL)
697 TI_DBG1(("tddmPortDeviceAdd: no more device!!! oneDeviceData is null\n"));
700 /* If a device is allocated */
701 if ( oneDeviceData != agNULL )
704 TI_DBG2(("tddmPortDeviceAdd: sasAddressHi 0x%08x\n", agSASSubID.sasAddressHi));
705 TI_DBG2(("tddmPortDeviceAdd: sasAddressLo 0x%08x\n", agSASSubID.sasAddressLo));
706 TI_DBG2(("tddmPortDeviceAdd: phyID 0x%x\n", phyID));
708 /* copy dmDeviceInfo to oneDeviceData->agDeviceInfo except ext field */
709 oneDeviceData->agDeviceInfo.smpTimeout = dmDeviceInfo->smpTimeout;
710 oneDeviceData->agDeviceInfo.it_NexusTimeout = dmDeviceInfo->it_NexusTimeout;
711 oneDeviceData->agDeviceInfo.firstBurstSize = dmDeviceInfo->firstBurstSize;
712 oneDeviceData->agDeviceInfo.devType_S_Rate = dmDeviceInfo->devType_S_Rate;
713 osti_memcpy(&(oneDeviceData->agDeviceInfo.sasAddressHi), &(dmDeviceInfo->sasAddressHi), 4);
714 osti_memcpy(&(oneDeviceData->agDeviceInfo.sasAddressLo), &(dmDeviceInfo->sasAddressLo), 4);
716 oneDeviceData->satDevData.satDeviceType = dmDeviceInfo->sataDeviceType;
717 if (dmDeviceInfo->sataDeviceType == SATA_ATAPI_DEVICE)
719 oneDeviceData->agDeviceInfo.flag |= ATAPI_DEVICE_FLAG;
722 oneDeviceData->agContext.osData = oneDeviceData;
723 oneDeviceData->agContext.sdkData = agNULL;
725 TI_DBG2(("tddmPortDeviceAdd: did %d\n", oneDeviceData->id));
727 /* don't add and register initiator for T2D */
728 if ( (((oneDeviceData->initiator_ssp_stp_smp & DEVICE_SSP_BIT) == DEVICE_SSP_BIT) &&
729 ((oneDeviceData->target_ssp_stp_smp & DEVICE_SSP_BIT) != DEVICE_SSP_BIT))
731 (((oneDeviceData->initiator_ssp_stp_smp & DEVICE_STP_BIT) == DEVICE_STP_BIT) &&
732 ((oneDeviceData->target_ssp_stp_smp & DEVICE_SSP_BIT) != DEVICE_SSP_BIT))
735 TI_DBG1(("tddmPortDeviceAdd: initiator. no add and registration\n"));
736 TI_DBG1(("tddmPortDeviceAdd: sasAddressHi 0x%08x\n", agSASSubID.sasAddressHi));
737 TI_DBG1(("tddmPortDeviceAdd: sasAddressLo 0x%08x\n", agSASSubID.sasAddressLo));
742 if (oneDeviceData->registered == agFALSE)
745 //temp; setting MCN to tdsaAllShared->MCN
746 oneDeviceData->agDeviceInfo.flag = oneDeviceData->agDeviceInfo.flag | (tdsaAllShared->MCN << 16);
749 if( tdsaAllShared->sflag )
751 if( ! DEVICE_IS_SMP_TARGET(oneDeviceData))
753 TI_DBG1(("tddmPortDeviceAdd: saRegisterNewDevice sflag %d\n", tdsaAllShared->sflag));
754 oneDeviceData->agDeviceInfo.flag = oneDeviceData->agDeviceInfo.flag | TD_XFER_RDY_PRIORTY_DEVICE_FLAG;
757 saRegisterNewDevice( /* tddmPortDeviceAdd */
758 onePortContext->agRoot,
759 &oneDeviceData->agContext,
761 &oneDeviceData->agDeviceInfo,
762 onePortContext->agPortContext,
769 return oneDeviceData;
774 each call, add the device to the device list
777 bit16 it_NexusTimeout;
778 bit16 firstBurstSize;
781 bit8 sasAddressHi[4];
782 bit8 sasAddressLo[4];
785 find oneExpDeviceData (expander device data) from dmExpDeviceInfo and
786 pass it to tddmPortDeviceAdd()
787 start here - change spec from bit32 to void
789 phyID = ((dmDeviceInfo->flag) & 0xFC) >> 2;
790 Initiators are not registered
796 dmPortContext_t *dmPortContext,
797 dmDeviceInfo_t *dmDeviceInfo, /* device */
798 dmDeviceInfo_t *dmExpDeviceInfo, /* expander the device is attached to */
804 tdsaRoot_t *tdsaRoot;
805 tdsaContext_t *tdsaAllShared;
807 tdsaDeviceData_t *oneExpDeviceData = agNULL;
808 bit32 sasAddressHi, sasAddressLo;
809 tdsaPortContext_t *onePortContext;
810 tdsaDeviceData_t *oneDeviceData = agNULL;
811 bit32 localMCN = 0, finalMCN = 0;
821 TI_DBG2(("tddmReportDevice: start\n"));
822 tdsaRoot = (tdsaRoot_t *)dmRoot->tdData;
823 if (tdsaRoot == agNULL)
825 TI_DBG1(("tddmReportDevice: tdsaRoot is NULL\n"));
829 tdsaAllShared = &(tdsaRoot->tdsaAllShared);
830 if (tdsaAllShared == agNULL)
832 TI_DBG1(("tddmReportDevice: tdsaAllShared is NULL\n"));
836 tiRoot = tdsaAllShared->agRootOsDataForInt.tiRoot;
837 if (tiRoot == agNULL)
839 TI_DBG1(("tddmReportDevice: tiRoot is NULL\n"));
843 onePortContext = (tdsaPortContext_t *)dmPortContext->tdData;
844 if (onePortContext == agNULL)
846 TI_DBG1(("tddmReportDevice: onePortContext is NULL\n"));
851 smRoot = &(tdsaAllShared->smRoot);
854 TI_DBG2(("tddmReportDevice: device addrHi 0x%08x addrLo 0x%08x\n",
855 TD_GET_SAS_ADDRESSHI(dmDeviceInfo->sasAddressHi), TD_GET_SAS_ADDRESSHI(dmDeviceInfo->sasAddressLo)));
857 if (dmExpDeviceInfo != agNULL)
859 TI_DBG2(("tddmReportDevice: attached expander addrHi 0x%08x addrLo 0x%08x\n",
860 TD_GET_SAS_ADDRESSHI(dmExpDeviceInfo->sasAddressHi), TD_GET_SAS_ADDRESSLO(dmExpDeviceInfo->sasAddressLo)));
864 TI_DBG2(("tddmReportDevice: No attached expander\n"));
867 /* initiators only (e.g. SPC or SPCv) are discarded */
868 if ( (dmDeviceInfo->target_ssp_stp_smp == 0) &&
869 ( DEVICE_IS_SSP_INITIATOR(dmDeviceInfo) || DEVICE_IS_STP_INITIATOR(dmDeviceInfo) || DEVICE_IS_SMP_INITIATOR(dmDeviceInfo))
872 TI_DBG3(("tddmReportDevice: Initiators are not added\n"));
873 TI_DBG3(("tddmReportDevice: device addrHi 0x%08x addrLo 0x%08x\n",
874 TD_GET_SAS_ADDRESSHI(dmDeviceInfo->sasAddressHi), TD_GET_SAS_ADDRESSHI(dmDeviceInfo->sasAddressLo)));
878 if (flag == dmDeviceArrival)
880 TI_DBG2(("tddmReportDevice: arrival\n"));
881 if (dmExpDeviceInfo != agNULL)
883 sasAddressHi = TD_GET_SAS_ADDRESSHI(dmExpDeviceInfo->sasAddressHi);
884 sasAddressLo = TD_GET_SAS_ADDRESSLO(dmExpDeviceInfo->sasAddressLo);
886 oneExpDeviceData = tddmPortSASDeviceFind(tiRoot, onePortContext, sasAddressLo, sasAddressHi);
889 tddmPortDeviceAdd(tiRoot, onePortContext, dmDeviceInfo, oneExpDeviceData);
892 else if (flag == dmDeviceRemoval)
894 TI_DBG2(("tddmReportDevice: removal\n"));
895 sasAddressHi = TD_GET_SAS_ADDRESSHI(dmDeviceInfo->sasAddressHi);
896 sasAddressLo = TD_GET_SAS_ADDRESSLO(dmDeviceInfo->sasAddressLo);
897 oneDeviceData = tddmPortSASDeviceFind(tiRoot, onePortContext, sasAddressLo, sasAddressHi);
898 if (oneDeviceData == agNULL)
900 TI_DBG2(("tddmReportDevice: oneDeviceData is NULL!!!\n"));
904 /* invalidate device */
905 TI_DBG2(("tddmReportDevice: invalidating\n"));
906 TI_DBG2(("tddmReportDevice: agDevHandle %p\n", oneDeviceData->agDevHandle));
907 if ( oneDeviceData->agDevHandle != agNULL)
909 TI_DBG2(("tddmReportDevice: agDevHandle->sdkData %p\n", oneDeviceData->agDevHandle->sdkData));
913 TI_DBG2(("tddmReportDevice: agDevHandle->sdkData is NULL\n"));
915 oneDeviceData->valid = agFALSE;
916 //to do; to be tested
917 agRoot = oneDeviceData->agRoot;
918 if ( (oneDeviceData->registered == agTRUE) &&
919 ( DEVICE_IS_SSP_TARGET(oneDeviceData) || DEVICE_IS_STP_TARGET(oneDeviceData)
920 || DEVICE_IS_SATA_DEVICE(oneDeviceData) || DEVICE_IS_SMP_TARGET(oneDeviceData) )
923 if ( !( DEVICE_IS_SMP_TARGET(oneDeviceData) && oneDeviceData->directlyAttached == agTRUE))
925 tdsaAbortAll(tiRoot, agRoot, oneDeviceData);
926 oneDeviceData->registered = agFALSE;
930 TI_DBG2(("tddmReportDevice: keeping\n"));
931 oneDeviceData->registered = agTRUE;
934 else if (oneDeviceData->registered == agTRUE)
936 if ( oneDeviceData->agDevHandle == agNULL)
938 TI_DBG1(("tddmReportDevice: agDevHandle->sdkData is NULL. Error!!! \n"));
940 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
941 oneDeviceData->registered = agFALSE;
945 if (DEVICE_IS_SATA_DEVICE(oneDeviceData))
947 TI_DBG2(("tddmReportDevice: smDeregisterDevice\n"));
948 smDeregisterDevice(smRoot, agNULL, oneDeviceData->agDevHandle, &(oneDeviceData->smDeviceHandle));
949 oneDeviceData->satDevData.IDDeviceValid = agFALSE;
954 else if (flag == dmDeviceNoChange)
956 TI_DBG2(("tddmReportDevice: no change; do nothing \n"));
958 sasAddressHi = TD_GET_SAS_ADDRESSHI(dmDeviceInfo->sasAddressHi);
959 sasAddressLo = TD_GET_SAS_ADDRESSLO(dmDeviceInfo->sasAddressLo);
960 oneDeviceData = tddmPortSASDeviceFind(tiRoot, onePortContext, sasAddressLo, sasAddressHi);
961 if (oneDeviceData == agNULL)
963 TI_DBG2(("tddmReportDevice: oneDeviceData is NULL!!!\n"));
967 agRoot = oneDeviceData->agRoot;
968 if ( (DEVICE_IS_SATA_DEVICE(oneDeviceData) || DEVICE_IS_STP_TARGET(oneDeviceData))
970 oneDeviceData->satDevData.IDDeviceValid == agFALSE)
972 tdIDStart(tiRoot, agRoot, smRoot, oneDeviceData, onePortContext);
977 else if (flag == dmDeviceMCNChange)
979 TI_DBG2(("tddmReportDevice: dmDeviceMCNChange \n"));
980 localMCN = tdsaFindLocalMCN(tiRoot, onePortContext);
981 devMCN = DEVINFO_GET_EXT_MCN(dmDeviceInfo);
982 TI_DBG2(("tddmReportDevice: devMCN 0x%08x localMCN 0x%08x\n", devMCN, localMCN));
984 sasAddressHi = TD_GET_SAS_ADDRESSHI(dmDeviceInfo->sasAddressHi);
985 sasAddressLo = TD_GET_SAS_ADDRESSLO(dmDeviceInfo->sasAddressLo);
986 oneDeviceData = tddmPortSASDeviceFind(tiRoot, onePortContext, sasAddressLo, sasAddressHi);
987 if (oneDeviceData == agNULL)
989 TI_DBG1(("tddmReportDevice: oneDeviceData is NULL!!!\n"));
993 agRoot = oneDeviceData->agRoot;
994 oneDeviceData->devMCN = devMCN;
995 TI_DBG2(("tddmReportDevice: sasAddrHi 0x%08x sasAddrLo 0x%08x\n", sasAddressHi, sasAddressLo));
996 if (oneDeviceData->directlyAttached == agTRUE)
999 TI_DBG2(("tddmReportDevice: directlyAttached, Final MCN 0x%08x\n", finalMCN));
1003 finalMCN = MIN(devMCN, localMCN);
1004 TI_DBG2(("tddmReportDevice: Not directlyAttached, Final MCN 0x%08x\n", finalMCN));
1006 if ( oneDeviceData->registered == agTRUE)
1008 /* saSetDeviceInfo to change MCN, using finalMCN */
1009 option = 8; /* setting only MCN 1000b */
1010 param = finalMCN << 24;
1011 TI_DBG2(("tddmReportDevice: option 0x%x param 0x%x MCN 0x%x\n", option, param, finalMCN));
1012 saSetDeviceInfo(agRoot, agNULL, 0, oneDeviceData->agDevHandle, option, param, ossaSetDeviceInfoCB);
1016 TI_DBG1(("tddmReportDevice: oneDeviceData is not yet registered !!!\n"));
1018 oneDeviceData->finalMCN = finalMCN;
1021 else if (flag == dmDeviceRateChange)
1023 TI_DBG1(("tddmReportDevice: dmDeviceRateChange \n"));
1024 sasAddressHi = TD_GET_SAS_ADDRESSHI(dmDeviceInfo->sasAddressHi);
1025 sasAddressLo = TD_GET_SAS_ADDRESSLO(dmDeviceInfo->sasAddressLo);
1026 oneDeviceData = tddmPortSASDeviceFind(tiRoot, onePortContext, sasAddressLo, sasAddressHi);
1027 if (oneDeviceData == agNULL)
1029 TI_DBG1(("tddmReportDevice: oneDeviceData is NULL!!!\n"));
1033 agRoot = oneDeviceData->agRoot;
1034 if ( oneDeviceData->registered == agTRUE)
1036 option = 0x20; /* bit 5 */
1037 DLR = DEVINFO_GET_LINKRATE(dmDeviceInfo);
1039 TI_DBG1(("tddmReportDevice: option 0x%x param 0x%x DLR 0x%x\n", option, param, DLR));
1040 saSetDeviceInfo(agRoot, agNULL, 0, oneDeviceData->agDevHandle, option, param, ossaSetDeviceInfoCB);
1045 TI_DBG1(("tddmReportDevice: oneDeviceData is not yet registered !!!\n"));
1052 TI_DBG1(("tddmReportDevice: unknown flag 0x%x, wrong\n", flag));
1061 tdsaPortContext_t *onePortContext
1064 tdsaRoot_t *tdsaRoot;
1065 tdsaContext_t *tdsaAllShared;
1067 tdsaDeviceData_t *oneDeviceData = agNULL;
1068 tdList_t *DeviceListList;
1069 bit32 localMCN = 0, finalMCN = 0;
1074 TI_DBG3(("tdsaUpdateMCN: start\n"));
1075 tdsaRoot = (tdsaRoot_t *)dmRoot->tdData;
1076 if (tdsaRoot == agNULL)
1078 TI_DBG1(("tdsaUpdateMCN: tdsaRoot is NULL\n"));
1082 tdsaAllShared = &(tdsaRoot->tdsaAllShared);
1083 if (tdsaAllShared == agNULL)
1085 TI_DBG1(("tdsaUpdateMCN: tdsaAllShared is NULL\n"));
1089 tiRoot = tdsaAllShared->agRootOsDataForInt.tiRoot;
1090 if (tiRoot == agNULL)
1092 TI_DBG1(("tdsaUpdateMCN: tiRoot is NULL\n"));
1096 if (onePortContext->valid == agFALSE)
1098 TI_DBG1(("tdsaUpdateMCN: onePortContext is invalid\n"));
1102 TI_DBG3(("tdsaUpdateMCN: pid %d\n", onePortContext->id));
1104 localMCN = tdsaFindLocalMCN(tiRoot, onePortContext);
1106 if (TDLIST_EMPTY(&(tdsaAllShared->MainDeviceList)))
1108 TI_DBG1(("tdsaUpdateMCN: empty device list\n"));
1112 /* update directly and behind expander device */
1113 DeviceListList = tdsaAllShared->MainDeviceList.flink;
1114 while (DeviceListList != &(tdsaAllShared->MainDeviceList))
1116 oneDeviceData = TDLIST_OBJECT_BASE(tdsaDeviceData_t, MainLink, DeviceListList);
1117 if (oneDeviceData == agNULL)
1119 TI_DBG1(("tdsaUpdateMCN: oneDeviceData is NULL!!!\n"));
1122 TI_DBG3(("tdsaUpdateMCN: loop did %d\n", oneDeviceData->id));
1123 TI_DBG3(("tdsaUpdateMCN: sasAddrHi 0x%08x sasAddrLo 0x%08x\n", oneDeviceData->SASAddressID.sasAddressHi, oneDeviceData->SASAddressID.sasAddressLo));
1124 devMCN = oneDeviceData->devMCN;
1125 if ( oneDeviceData->tdPortContext == onePortContext)
1127 if (oneDeviceData->valid == agTRUE && oneDeviceData->registered == agTRUE && oneDeviceData->directlyAttached == agTRUE)
1129 TI_DBG3(("tdsaUpdateMCN: found directly attached\n"));
1130 finalMCN = localMCN;
1131 TI_DBG3(("tdsaUpdateMCN: devMCN 0x%08x localMCN 0x%08x\n", devMCN, localMCN));
1132 TI_DBG3(("tdsaUpdateMCN: finalMCN 0x%08x\n", finalMCN));
1133 if (oneDeviceData->finalMCN != finalMCN)
1135 /* saSetDeviceInfo using finalMCN */
1136 option = 8; /* setting only MCN 1000b */
1137 param = finalMCN << 24;
1138 TI_DBG3(("tdsaUpdateMCN: option 0x%x param 0x%x MCN 0x%x\n", option, param, finalMCN));
1139 saSetDeviceInfo(oneDeviceData->agRoot, agNULL, 0, oneDeviceData->agDevHandle, option, param, ossaSetDeviceInfoCB);
1140 oneDeviceData->finalMCN = finalMCN;
1144 else if (oneDeviceData->valid == agTRUE && oneDeviceData->registered == agTRUE && oneDeviceData->directlyAttached == agFALSE)
1146 TI_DBG3(("tdsaUpdateMCN: found behind expander device\n"));
1147 finalMCN = MIN(localMCN, devMCN);
1148 TI_DBG3(("tdsaUpdateMCN: devMCN 0x%08x localMCN 0x%08x\n", devMCN, localMCN));
1149 TI_DBG3(("tdsaUpdateMCN: finalMCN 0x%08x\n", finalMCN));
1150 if (oneDeviceData->finalMCN != finalMCN)
1152 /* saSetDeviceInfo using finalMCN */
1153 option = 8; /* setting only MCN 1000b */
1154 param = finalMCN << 24;
1155 TI_DBG3(("tdsaUpdateMCN: option 0x%x param 0x%x MCN 0x%x\n", option, param, finalMCN));
1156 saSetDeviceInfo(oneDeviceData->agRoot, agNULL, 0, oneDeviceData->agDevHandle, option, param, ossaSetDeviceInfoCB);
1157 oneDeviceData->finalMCN = finalMCN;
1161 DeviceListList = DeviceListList->flink;
1165 if (oneDeviceData->tdPortContext != agNULL)
1167 TI_DBG3(("tdsaUpdateMCN: different portcontext; oneDeviceData->tdPortContext pid %d oneportcontext pid %d\n", oneDeviceData->tdPortContext->id, onePortContext->id));
1171 TI_DBG3(("tdsaUpdateMCN: different portcontext; oneDeviceData->tdPortContext pid NULL oneportcontext pid %d\n", onePortContext->id));
1173 DeviceListList = DeviceListList->flink;
1181 tddmSATADeviceTypeDecode(bit8 * pSignature)
1183 return (bit8)tdssSATADeviceTypeDecode(pSignature);
1188 tddmSingleThreadedEnter(
1193 tdsaRoot_t *tdsaRoot;
1194 tdsaContext_t *tdsaAllShared;
1198 TI_DBG7(("tddmSingleThreadedEnter: start\n"));
1200 tdsaRoot = (tdsaRoot_t *)dmRoot->tdData;
1201 if (tdsaRoot == agNULL)
1203 TI_DBG1(("tddmSingleThreadedEnter: tdsaRoot is NULL\n"));
1207 tdsaAllShared = &(tdsaRoot->tdsaAllShared);
1208 if (tdsaAllShared == agNULL)
1210 TI_DBG1(("tddmSingleThreadedEnter: tdsaAllShared is NULL\n"));
1214 tiRoot = tdsaAllShared->agRootOsDataForInt.tiRoot;
1215 if (tiRoot == agNULL)
1217 TI_DBG1(("tddmSingleThreadedEnter: tiRoot is NULL\n"));
1220 offset = tdsaAllShared->MaxNumLLLocks + tdsaAllShared->MaxNumOSLocks + TD_MAX_LOCKS;
1222 ostiSingleThreadedEnter(tiRoot, syncLockId + offset);
1227 tddmSingleThreadedLeave(
1232 tdsaRoot_t *tdsaRoot;
1233 tdsaContext_t *tdsaAllShared;
1237 TI_DBG7(("tddmSingleThreadedLeave: start\n"));
1239 tdsaRoot = (tdsaRoot_t *)dmRoot->tdData;
1240 if (tdsaRoot == agNULL)
1242 TI_DBG1(("tddmSingleThreadedLeave: tdsaRoot is NULL\n"));
1246 tdsaAllShared = &(tdsaRoot->tdsaAllShared);
1247 if (tdsaAllShared == agNULL)
1249 TI_DBG1(("tddmSingleThreadedLeave: tdsaAllShared is NULL\n"));
1253 tiRoot = tdsaAllShared->agRootOsDataForInt.tiRoot;
1254 if (tiRoot == agNULL)
1256 TI_DBG1(("tddmSingleThreadedLeave: tiRoot is NULL\n"));
1259 offset = tdsaAllShared->MaxNumLLLocks + tdsaAllShared->MaxNumOSLocks + TD_MAX_LOCKS;
1261 ostiSingleThreadedLeave(tiRoot, syncLockId + offset);
1266 osGLOBAL bit32 tddmGetTransportParam(
1280 bit32 ret = tiError;
1282 TI_DBG7(("tddmGetTransportParam: start\n"));
1283 ret = ostiGetTransportParam(agNULL,