FreeBSD kernel pms device code
ossacmnapi.c
Go to the documentation of this file.
1/*******************************************************************************
2*Copyright (c) 2014 PMC-Sierra, Inc. All rights reserved.
3*
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
7*following disclaimer.
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.
11*
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
20
21********************************************************************************/
22/*******************************************************************************/
30#include <sys/cdefs.h>
31__FBSDID("$FreeBSD$");
32#include <dev/pms/config.h>
33
37
41
46
47#ifdef FDS_SM
51#endif
52
53#ifdef FDS_DM
57#endif
58
62
63#ifdef INITIATOR_DRIVER
67#endif
68
69#ifdef TARGET_DRIVER
71#include <dev/pms/RefTisa/tisa/sassata/sas/tgt/ttdxchg.h>
73#endif
74
77
78#ifdef ECHO_TESTING
79/* temporary to test saEchoCommand() */
80extern bit8 gEcho;
81#endif
82
83#if defined(SALLSDK_DEBUG)
84extern bit32 gLLDebugLevel;
85#endif
86
87
89
90#ifdef SA_ENABLE_TRACE_FUNCTIONS
91
92#ifdef siTraceFileID
93#undef siTraceFileID
94#endif
95#define siTraceFileID 'R'
96#endif
97/*
98 functions that are common to SAS and SATA
99*/
100
103 agsaRoot_t *agRoot,
104 void *osMemHandle,
105 void *virtPtr,
106 bit32 length
107 )
108{
109 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
110 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
111
112 TI_DBG6(("ossaCacheInvalidate: start\n"));
113 ostiCacheInvalidate(tiRoot, osMemHandle, virtPtr, length);
114 return;
115}
116
119 agsaRoot_t *agRoot,
120 void *osMemHandle,
121 void *virtPtr,
122 bit32 length
123 )
124{
125 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
126 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
127
128 TI_DBG6(("ossaCacheFlush: start\n"));
129 ostiCacheFlush(tiRoot, osMemHandle, virtPtr, length);
130 return;
131}
132
135 agsaRoot_t *agRoot,
136 void *osMemHandle,
137 void *virtPtr,
138 bit32 length
139 )
140
141{
142 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
143 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
144
145 TI_DBG6(("ossaCachePreFlush: start\n"));
146 ostiCachePreFlush(tiRoot, osMemHandle, virtPtr, length);
147 return;
148}
149
150/*****************************************************************************
151*! \brief ossaDeviceHandleAccept
152*
153* Purpose: This function is called by lower layer to inform TD layer of
154* a new SAS device arrival. Used only at the target
155*
156*
157* \param agRoot Pointer to chip/driver Instance.
158* \param agDevHandle Pointer to the device handle of the device
159* \param agDevInfo Pointer to the device info structure
160* \param agPortContext Pointer to a port context
161*
162* \return:
163* OSSA_RC_REJECT A device is accpeted
164* OSSA_RC_ACCEPT A device is rejected
165*
166* \note - For details, refer to SAS/SATA Low-Level API Specification
167*
168*****************************************************************************/
170 agsaRoot_t *agRoot,
171 agsaDevHandle_t *agDevHandle,
172 agsaSASDeviceInfo_t *agDevInfo,
173 agsaPortContext_t *agPortContext,
174 bit32 *hostAssignedDeviceId
175 )
176{
177#ifdef TARGET_DRIVER
178 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
179 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
180 tdsaRoot_t *tdsaRoot = (tdsaRoot_t *) tiRoot->tdData;
181 tdsaContext_t *tdsaAllShared = (tdsaContext_t *)&tdsaRoot->tdsaAllShared;
182
183 tdsaPortContext_t *onePortContext = agNULL;
185 tdsaDeviceData_t *oneDeviceData = agNULL;
187 tdsaSASSubID_t agSASSubID;
188 bit32 option;
189 bit32 param;
190 /*
191 at target only
192 by default TD layer accpets all devices
193 */
194 /*
195 at this point,
196 by LINK_UP event tdsaPortContext should have been created
197 */
199 TI_DBG1(("ossaDeviceHandleAccept: start hostAssignedDeviceId 0x%X\n",*hostAssignedDeviceId));
200
201
202 if (agPortContext == agNULL)
203 {
204 TI_DBG1(("ossaDeviceHandleAccept: NULL agsaPortContext; wrong\n"));
206 return OSSA_RC_REJECT;
207 }
208
209
210 onePortContext = (tdsaPortContext_t *)agPortContext->osData;
211
212 if (onePortContext == agNULL)
213 {
214 TI_DBG1(("ossaDeviceHandleAccept: NULL oneportcontext; wrong\n"));
216 return OSSA_RC_REJECT;
217 }
218
220
221 if (tiPortalContext == agNULL)
222 {
223 TI_DBG1(("ossaDeviceHandleAccept: NULL tiPortalContext; wrong\n"));
225 return OSSA_RC_REJECT;
226 }
227
228 /*
229 add the device to device list
230 cf) OSSA_DISCOVER_FOUND_DEVICE
231 */
232 TI_DBG4(("ossaDeviceHandleAccept: sasAddressHi 0x%08x\n", SA_DEVINFO_GET_SAS_ADDRESSHI(&agDevInfo->commonDevInfo)));
233 TI_DBG4(("ossaDeviceHandleAccept: sasAddressLo 0x%08x\n", SA_DEVINFO_GET_SAS_ADDRESSLO(&agDevInfo->commonDevInfo)));
234 TI_DBG4(("ossaDeviceHandleAccept: device type 0x%x\n", DEVINFO_GET_DEVICETTYPE(&agDevInfo->commonDevInfo)));
235 TI_DBG4(("ossaDeviceHandleAccept: phys %d\n", agDevInfo->numOfPhys));
236 TI_DBG4(("ossaDeviceHandleAccept: pid %d\n", onePortContext->id));
237
239 {
240 TI_DBG4(("ossaDeviceHandleAccept: SAS_END_DEVICE\n"));
241 }
243 {
244 TI_DBG4(("ossaDeviceHandleAccept: SAS_EDGE_EXPANDER_DEVICE\n"));
245 }
246 else /* SAS_FANOUT_EXPANDER_DEVICE */
247 {
248 TI_DBG4(("ossaDeviceHandleAccept: SAS_FANOUT_EXPANDER_DEVICE\n"));
249 }
252 agSASSubID.initiator_ssp_stp_smp = agDevInfo->initiator_ssp_stp_smp;
253 agSASSubID.target_ssp_stp_smp = agDevInfo->target_ssp_stp_smp;
254
255
257 onePortContext,
258 agRoot,
259 agDevHandle,
260 &agSASSubID,
261 agTRUE,
262 0xFF,
264 );
265
266 /* at this point devicedata for new device exists */
267 oneDeviceData = (tdsaDeviceData_t *)agDevHandle->osData;
268
269 if (oneDeviceData == agNULL)
270 {
271 TI_DBG1(("ossaDeviceHandleAccept: NULL oneDeviceData; wrong\n"));
272 return OSSA_RC_REJECT;
273 }
274
275 oneDeviceData->registered = agTRUE;
276
277 tiDeviceHandle = &(oneDeviceData->tiDeviceHandle);
278
279 if (tiDeviceHandle == agNULL)
280 {
281 TI_DBG1(("ossaDeviceHandleAccept: NULL tiDeviceHandle; wrong\n"));
283 return OSSA_RC_REJECT;
284 }
285
286 /* setting MCN in agsaDeviceInfo_t*/
287 agDevInfo->commonDevInfo.flag = agDevInfo->commonDevInfo.flag | (tdsaAllShared->MCN << 16);
288 /* increment RegisteredDevNums */
289 onePortContext->RegisteredDevNums++;
290
291 *hostAssignedDeviceId |= 0xBEEF0000;
292
293 TI_DBG1(("ossaDeviceHandleAccept: Now hostAssignedDeviceId 0x%X\n", *hostAssignedDeviceId));
294
295
296 /* no login in SAS */
297 /*
298 osGLOBAL bit32 ostiTargetEvent (
299 tiRoot_t *tiRoot,
300 tiPortalContext_t *portalContext,
301 tiDeviceHandle_t *tiDeviceHandle,
302 tiTgtEventType_t eventType,
303 bit32 eventStatus,
304 void *parm
305 );
306 */
307
309 tiRoot,
314 agNULL
315 );
316 /* set MCN and initiator role bit using saSetDeviceInfo */
317 option = 24; /* setting MCN and initiator role 1 1000b*/
318 param = (1 << 18) | (tdsaAllShared->MCN << 24);
319 TI_DBG1(("ossaDeviceHandleAccept: option 0x%x param 0x%x MCN 0x%x\n", option, param, tdsaAllShared->MCN));
320 saSetDeviceInfo(agRoot, agNULL, 0, agDevHandle, option, param, ossaSetDeviceInfoCB);
322 return OSSA_RC_ACCEPT;
323#endif
324
325#ifdef INITIATOR_DRIVER
326 /* this function is not used in case of Initiator */
327 return OSSA_RC_ACCEPT;
328#endif
329}
330
331#ifdef INITIATOR_DRIVER
332/*****************************************************************************
333*! \brief ossaDiscoverSasCB
334*
335* Purpose: This function is called by lower layer to inform TD layer of
336* SAS discovery results
337*
338*
339* \param agRoot Pointer to chip/driver Instance.
340* \param agPortContext Pointer to the port context of TD and Lower layer
341* \param event event type
342* \param pParm1 Pointer to data associated with event
343* \param pParm2 Pointer to data associated with event
344*
345* \return: none
346*
347* \note - For details, refer to SAS/SATA Low-Level API Specification
348*
349*****************************************************************************/
351 agsaPortContext_t *agPortContext,
352 bit32 event,
353 void *pParm1,
354 void *pParm2
355 )
356{
357 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
358 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
359 tdsaContext_t *tdsaAllShared = (tdsaContext_t *)osData->tdsaAllShared;
360
361 tdsaPortContext_t *onePortContext = agNULL;
362 tdsaDeviceData_t *oneDeviceData = agNULL;
363
364 agsaDevHandle_t *agDevHandle = agNULL;
365 agsaSASDeviceInfo_t *agDeviceInfo = agNULL;
367 tdList_t *DeviceListList;
368 tdsaSASSubID_t agSASSubID;
369
371 TI_DBG2(("ossaDiscoverSasCB: start\n"));
372
373 if (agPortContext == agNULL)
374 {
375 TI_DBG1(("ossaDiscoverSasCB: NULL agsaPortContext; wrong\n"));
376 return;
377 }
378
379 onePortContext = (tdsaPortContext_t *)agPortContext->osData;
380 tiPortalContext = (tiPortalContext_t *)onePortContext->tiPortalContext;
381
382 switch ( event )
383 {
385 {
386 TI_DBG3(("ossaDiscoverSasCB: STARTED pid %d\n", onePortContext->id));
387 /*
388 invalidate all devices in current device list
389 */
390 DeviceListList = tdsaAllShared->MainDeviceList.flink;
391 while (DeviceListList != &(tdsaAllShared->MainDeviceList))
392 {
393 oneDeviceData = TDLIST_OBJECT_BASE(tdsaDeviceData_t, MainLink, DeviceListList);
394 TI_DBG3(("ossaDiscoverSasCB: loop did %d\n", oneDeviceData->id));
395 TI_DBG3(("ossaDiscoverSasCB: loop sasAddressHi 0x%08x\n", oneDeviceData->SASAddressID.sasAddressHi));
396 TI_DBG6(("ossaDiscoverSasCB: loop sasAddressLo 0x%08x\n", oneDeviceData->SASAddressID.sasAddressLo));
397 if (oneDeviceData->tdPortContext == onePortContext)
398 {
399 TI_DBG3(("ossaDiscoverSasCB: did %d is invalidated \n", oneDeviceData->id));
400 /* temporary solution: only for sata direct attached */
401 }
402 DeviceListList = DeviceListList->flink;
403 }
404 onePortContext->DiscoveryState = ITD_DSTATE_STARTED;
405 break;
406 }
407
409 {
410 TI_DBG4(("ossaDiscoverSasCB: $$$$$ FOUND_DEVICE pid %d\n", onePortContext->id));
411 agDevHandle = (agsaDevHandle_t *)pParm1;
412 agDeviceInfo = (agsaSASDeviceInfo_t *)pParm2;
413 TI_DBG5(("ossaDiscoverSasCB: sasAddressHi 0x%08x\n", SA_DEVINFO_GET_SAS_ADDRESSHI(&agDeviceInfo->commonDevInfo)));
414 TI_DBG5(("ossaDiscoverSasCB: sasAddressLo 0x%08x\n", SA_DEVINFO_GET_SAS_ADDRESSLO(&agDeviceInfo->commonDevInfo)));
415 TI_DBG5(("ossaDiscoverSasCB: device type 0x%x\n", DEVINFO_GET_DEVICETTYPE(&agDeviceInfo->commonDevInfo)));
416
417 TI_DBG6(("ossaDiscoverSasCB: phys %d\n", agDeviceInfo->numOfPhys));
418 TI_DBG4(("ossaDiscoverSasCB: pid %d\n", onePortContext->id));
419
420
421 /* Add only target devices; do not add expander device */
422 if (DEVINFO_GET_DEVICETTYPE(&agDeviceInfo->commonDevInfo) == SAS_END_DEVICE)
423 {
424 agSASSubID.sasAddressHi = SA_DEVINFO_GET_SAS_ADDRESSHI(&agDeviceInfo->commonDevInfo);
425 agSASSubID.sasAddressLo = SA_DEVINFO_GET_SAS_ADDRESSLO(&agDeviceInfo->commonDevInfo);
426 agSASSubID.initiator_ssp_stp_smp = agDeviceInfo->initiator_ssp_stp_smp;
427 agSASSubID.target_ssp_stp_smp = agDeviceInfo->target_ssp_stp_smp;
428
429 TI_DBG2(("ossaDiscoverSasCB: adding ....\n"));
430
432 onePortContext,
433 agRoot,
434 agDevHandle,
435 &agSASSubID,
436 agTRUE,
437 agDeviceInfo->phyIdentifier,
439 );
441 tiRoot,
443 agNULL,
446 agNULL
447 );
448 }
449 else
450 {
451 TI_DBG5(("ossaDiscoverSasCB: $$$$$ not end device. not adding....\n"));
452 }
453
454
455 break;
456 }
457
459 {
460 TI_DBG3(("ossaDiscoverSasCB: REMOVED_DEVICE\n"));
461 agDevHandle = (agsaDevHandle_t *)pParm1;
462 agDeviceInfo = (agsaSASDeviceInfo_t *)pParm2;
463 oneDeviceData = (tdsaDeviceData_t *) agDevHandle->osData;
464
465 TI_DBG6(("ossaDiscoverSasCB: sasAddressHi 0x%08x\n",
466 SA_DEVINFO_GET_SAS_ADDRESSHI(&agDeviceInfo->commonDevInfo)));
467 TI_DBG6(("ossaDiscoverSasCB: sasAddressLo 0x%08x\n",
468 SA_DEVINFO_GET_SAS_ADDRESSLO(&agDeviceInfo->commonDevInfo)));
469 TI_DBG6(("ossaDiscoverSasCB: phys %d\n", agDeviceInfo->numOfPhys));
470 TI_DBG6(("ossaDiscoverSasCB: onePortContext->id %d\n", onePortContext->id));
471
472 if (oneDeviceData == agNULL)
473 {
474 TI_DBG1(("ossaDiscoverSasCB: Wrong. DevHandle->osData is NULL but is being removed\n"));
475 }
476 else
477 {
478 tdssRemoveSASFromSharedcontext(onePortContext,
479 oneDeviceData,
480 agRoot);
481 agDevHandle->osData = agNULL;
483 tiRoot,
485 agNULL,
488 agNULL
489 );
490 }
491
492 break;
493 }
495 {
496 TI_DBG2(("ossaDiscoverSasCB: SAS COMPLETE pid %d\n", onePortContext->id));
497 /*
498 note:
499 SAS discovery must be called before SATA discovery
500 "onePortContext->DiscoveryState = ITD_DSTATE_COMPLETED" is
501 in ossaDiscoverSataCB not in ossaDiscoverSasCB when SATA_ENABLE
502 */
503#ifndef SATA_ENABLE
504 onePortContext->DiscoveryState = ITD_DSTATE_COMPLETED;
505 TI_DBG6(("ossaDiscoverSasCB: COMPLETE pid %d\n", onePortContext->id));
506#endif
507
508#ifdef SATA_ENABLE
509 TI_DBG2(("ossaDiscoverSasCB: calling SATA discovery\n"));
510
511 /* Continue with SATA discovery */
512 saDiscover(agRoot, agPortContext, AG_SA_DISCOVERY_TYPE_SATA,
513 onePortContext->discoveryOptions);
514
515#else /* SATA not enable */
516
517#ifdef TD_INTERNAL_DEBUG /* for debugging */
518 /* dump device list */
519 DeviceListList = tdsaAllShared->MainPortContextList.flink;
520
521 while (DeviceListList != &(tdsaAllShared->MainPortContextList))
522 {
523 oneDeviceData = TDLIST_OBJECT_BASE(tdsaDeviceData_t, MainLink, DeviceListList);
524 TI_DBG2(("ossaDiscoverSasCB: did %d valid %d\n", oneDeviceData->id, oneDeviceData->valid));
525 TI_DBG2(("ossaDiscoverSasCB: device AddrHi 0x%08x\n", oneDeviceData->SASAddressID.sasAddressHi));
526 TI_DBG2(("ossaDiscoverSasCB: device AddrLo 0x%08x\n", oneDeviceData->SASAddressID.sasAddressLo));
527 DeviceListList = DeviceListList->flink;
528 }
529#endif
530
531 /* letting OS layer know discovery has been successfully complete */
533 tiRoot,
535 agNULL,
537 tiDiscOK,
538 agNULL
539 );
540#endif /* SATA_ENABLE */
541
542 break;
543 }
545 {
546 TI_DBG3(("ossaDiscoverSasCB: ABORT\n"));
547 /* letting OS layer know discovery has not been successfully complete */
549 tiRoot,
551 agNULL,
554 agNULL
555 );
556 break;
557 }
559 {
560 TI_DBG3(("ossaDiscoverSasCB: ERROR 1\n"));
561 /* letting OS layer know discovery has not been successfully complete */
563 tiRoot,
565 agNULL,
568 agNULL
569 );
570 break;
571 }
572
574 {
575 TI_DBG3(("ossaDiscoverSasCB: ERROR 2\n"));
576 /* letting OS layer know discovery has not been successfully complete */
578 tiRoot,
580 agNULL,
583 agNULL
584 );
585 break;
586 }
587
589 {
590 TI_DBG3(("ossaDiscoverSasCB: ERROR 3\n"));
591 /* letting OS layer know discovery has not been successfully complete */
593 tiRoot,
595 agNULL,
598 agNULL
599 );
600 break;
601 }
603 {
604 TI_DBG3(("ossaDiscoverSasCB: ERROR 4\n"));
605 /* letting OS layer know discovery has not been successfully complete */
607 tiRoot,
609 agNULL,
612 agNULL
613 );
614 break;
615 }
617 {
618 TI_DBG3(("ossaDiscoverSasCB: ERROR 5\n"));
619 /* letting OS layer know discovery has not been successfully complete */
621 tiRoot,
623 agNULL,
626 agNULL
627 );
628 break;
629 }
631 {
632 TI_DBG3(("ossaDiscoverSasCB: ERROR 6\n"));
633 /* letting OS layer know discovery has not been successfully complete */
635 tiRoot,
637 agNULL,
640 agNULL
641 );
642 break;
643 }
645 {
646 TI_DBG3(("ossaDiscoverSasCB: ERROR 7\n"));
647 /* letting OS layer know discovery has not been successfully complete */
649 tiRoot,
651 agNULL,
654 agNULL
655 );
656 break;
657 }
659 {
660 TI_DBG3(("ossaDiscoverSasCB: ERROR 8\n"));
661 /* letting OS layer know discovery has not been successfully complete */
663 tiRoot,
665 agNULL,
668 agNULL
669 );
670 break;
671 }
673 {
674 TI_DBG3(("ossaDiscoverSasCB: ERROR 9\n"));
675 /* letting OS layer know discovery has not been successfully complete */
677 tiRoot,
679 agNULL,
682 agNULL
683 );
684 break;
685 }
686 default:
687 TI_DBG3(("ossaDiscoverSasCB: ERROR default event 0x%x\n", event));
688 /* letting OS layer know discovery has not been successfully complete */
690 tiRoot,
692 agNULL,
695 agNULL
696 );
697 break;
698 } /* end of switch */
700 return;
701}
702#endif // #ifdef INITIATOR_DRIVER
703
705 agsaRoot_t *agRoot,
706 bit32 traceCode
707 )
708{
709 return;
710}
711
713 agsaRoot_t *agRoot,
714 bit32 traceCode,
715 bit32 value1
716 )
717{
718 return;
719}
720
722 agsaRoot_t *agRoot,
723 bit32 traceCode,
724 bit32 value1,
725 bit32 value2
726 )
727{
728 return;
729}
730
732 agsaRoot_t *agRoot,
733 bit32 traceCode,
734 bit32 value1,
735 bit32 value2,
736 bit32 value3
737 )
738{
739 return;
740}
741
742
743osGLOBAL void
745 agsaRoot_t *agRoot,
746 bit32 traceCode,
747 bit32 value1,
748 bit32 value2,
749 bit32 value3,
750 bit32 value4
751 )
752{
753 return;
754}
755
756
757/*****************************************************************************
758*! \brief ossaHwCB
759*
760* Purpose: This function is called by lower layer to inform TD layer of
761* HW related results
762*
763* \param agRoot Pointer to chip/driver Instance.
764* \param agPortContext Pointer to the port context of TD and Lower layer
765* \param event event type
766* \param eventParm1 event-specific parameter
767* \param eventParm2 event-specific parameter
768* \param eventParm3 event-specific parameter of pointer type
769*
770* \return: none
771*
772* \note - For details, refer to SAS/SATA Low-Level API Specification
773*
774*****************************************************************************/
776 agsaRoot_t *agRoot,
777 agsaPortContext_t *agPortContext,
778 bit32 event,
779 bit32 eventParm1,
780 void *eventParm2,
781 void *eventParm3
782 )
783{
784 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
785 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
786 tdsaContext_t *tdsaAllShared = (tdsaContext_t *)osData->tdsaAllShared;
787 tdList_t *PortContextList = agNULL;
788 tdsaPortContext_t *onePortContext = agNULL;
789 agsaDevHandle_t *agDevHandle = agNULL;
790 agsaSASIdentify_t *IDframe = agNULL;
791 int i = 0;
792#ifdef INITIATOR_DRIVER
793 tdsaSASSubID_t agSASSubID;
794#endif
795 bit32 PhyID;
796 bit32 PhyStatus;
797 bit32 LinkRate;
798 bit32 PortState;
799 bit32 HwAckSatus = AGSA_RC_SUCCESS;
800
801// #ifdef INITIATOR_DRIVER
802#ifdef INITIATOR_DRIVER
804 tdsaDeviceData_t *oneDeviceData = agNULL;
805 tdList_t *DeviceListList;
806#endif
807#ifdef REMOVED
808 bit32 found = agFALSE;
809#endif
810 agsaHWEventEncrypt_t *pEncryptCBData;
811 agsaEncryptInfo_t *pEncryptInfo;
812 agsaHWEventMode_t *pModeEvent;
813 tiEncryptPort_t encryptEventData;
814 tiEncryptInfo_t encryptInfo;
815 bit32 *pModePage;
816 bit32 securityMode;
817 bit32 cipherMode;
818 bit32 encryptStatus;
819 bit32 securitySetModeStatus;
820 bit32 securityModeStatus;
821
822// #endif /* INITIATOR_DRIVER */
823 agsaPhyErrCountersPage_t *agPhyErrCountersPage;
824 agsaEventSource_t eventSource;
825
826#ifdef FDS_DM
827 dmRoot_t *dmRoot = &(tdsaAllShared->dmRoot);
828 dmPortContext_t *dmPortContext = agNULL;
830 dmPortInfo_t dmPortInfo;
831// bit32 discStatus = dmDiscInProgress;
832#endif
833
835
836 TI_DBG2(("ossaHwCB: agPortContext %p event 0x%x eventParm1 0x%x eventParm2 %p eventParm3 %p\n",
837 agPortContext,event,eventParm1,eventParm2,eventParm3 ));
838
839 switch ( event )
840 {
842 {
843 PhyID = TD_GET_PHY_ID(eventParm1);
844 LinkRate = TD_GET_LINK_RATE(eventParm1);
845 PortState = TD_GET_PORT_STATE(eventParm1);
846 agDevHandle = agNULL;
847 IDframe = (agsaSASIdentify_t *)eventParm3;
848
849
850 TI_DBG2(("ossaHwCB: Phy%d SAS link Up\n", PhyID));
851
852 if (agPortContext == agNULL)
853 {
854 TI_DBG1(("ossaHwCB: agPortContext null, wrong\n"));
856 return;
857 }
858 if (agDevHandle == agNULL)
859 {
860 TI_DBG3(("ossaHwCB: agDevHandle null by design change\n"));
861 }
862
863 if (IDframe == agNULL)
864 {
865 TI_DBG1(("ossaHwCB: IDframe null, wrong\n"));
867 return;
868 }
869 /* debugging only */
870 if (LinkRate == 0x01)
871 {
872 TI_DBG1(("ossaHwCB: SAS Link Rate is 1.5 Gbps PhyID %d\n",PhyID));
873 }
874 if (LinkRate == 0x02)
875 {
876 TI_DBG1(("ossaHwCB: SAS Link Rate is 3.0 Gbps PhyID %d\n",PhyID));
877 }
878 if (LinkRate == 0x04)
879 {
880 TI_DBG1(("ossaHwCB: SAS Link Rate is 6.0 Gbps PhyID %d\n",PhyID));
881 }
882 if (LinkRate == 0x08)
883 {
884 TI_DBG1(("ossaHwCB: SAS Link Rate is 12.0 Gbps PhyID %d\n",PhyID));
885 }
886
887 if (PortState == OSSA_PORT_INVALID)
888 {
889 TI_DBG1(("ossaHwCB: Wrong port state with SAS link up\n"));
891 return;
892 }
893
894 if ( agPortContext->osData == agNULL)
895 {/* if */
896 TI_DBG6 (("ossaHwCB: PhyID %d tdsaAllShared %p\n", PhyID, tdsaAllShared));
897 if (tdsaAllShared->Ports[PhyID].tiPortalContext == agNULL)
898 {
899 TI_DBG6(("ossaHwCB: NULL portalcontext\n"));
900 }
901 else
902 {
903 TI_DBG6(("ossaHwCB: NOT NULL portalcontext\n"));
904 }
905
906 if (IDframe == agNULL)
907 {
908 TI_DBG1(("ossaHwCB: IDFrame is NULL; SATA !!!!\n"));
909 }
910 else
911 {
912 TI_DBG3(("ossaHwCB: IDframe->sasAddressHi 0x%08x \n",
914 TI_DBG3(("ossaHwCB: IDframe->sasAddressLo 0x%08x \n",
916
917 }
918 /*
919 setting tdsaPortContext fields
920 take the head from the FreeLink of tdsaPortContext_t
921 then modify it
922 then put it in MainLink of tdsaPortContext_t
923 */
925 if (TDLIST_NOT_EMPTY(&(tdsaAllShared->FreePortContextList)))
926 {
927 TDLIST_DEQUEUE_FROM_HEAD(&PortContextList, &(tdsaAllShared->FreePortContextList));
929 onePortContext = TDLIST_OBJECT_BASE(tdsaPortContext_t, FreeLink, PortContextList);
930 TI_DBG2(("ossaHwCB: pid %d\n", onePortContext->id));
931 TI_DBG6(("ossaHwCB: onePortContext %p\n", onePortContext));
932 if (onePortContext == agNULL)
933 {
934 TI_DBG1(("ossaHwCB: onePortContext is NULL in allocation, wrong!\n"));
935 return;
936 }
937
938 /* sets fields of tdsaportcontext */
939#ifdef INITIATOR_DRIVER
940 onePortContext->DiscoveryState = ITD_DSTATE_NOT_STARTED;
941 onePortContext->discoveryOptions = AG_SA_DISCOVERY_OPTION_FULL_START;
942#endif
943 onePortContext->PhyIDList[PhyID] = agTRUE;
944 if (IDframe == agNULL)
945 {
946 onePortContext->sasRemoteAddressHi = 0xFFFFFFFF;
947 onePortContext->sasRemoteAddressLo = 0xFFFFFFFF;
948 onePortContext->directAttatchedSAS = agTRUE;
949 }
950 else
951 {
952 onePortContext->sasRemoteAddressHi = SA_IDFRM_GET_SAS_ADDRESSHI(IDframe);
953 onePortContext->sasRemoteAddressLo = SA_IDFRM_GET_SAS_ADDRESSLO(IDframe);
954 /* Create ID frame and storing ID frame */
955 osti_memcpy(&onePortContext->sasIDframe, IDframe, sizeof(agsaSASIdentify_t));
956 tdhexdump("ossaHWCB: sasIDframe", (bit8 *)(&onePortContext->sasIDframe), sizeof(agsaSASIdentify_t));
958 {
959 onePortContext->directAttatchedSAS = agTRUE;
960 }
961#ifdef FDS_DM
964 )
965 {
966 onePortContext->UseDM = agTRUE;
967 }
968#endif
969 }
970
971 onePortContext->sasLocalAddressHi = SA_IDFRM_GET_SAS_ADDRESSHI(&tdsaAllShared->Ports[PhyID].SASID);
972 onePortContext->sasLocalAddressLo = SA_IDFRM_GET_SAS_ADDRESSLO(&tdsaAllShared->Ports[PhyID].SASID);
973 onePortContext->tiPortalContext = tdsaAllShared->Ports[PhyID].tiPortalContext;
974 onePortContext->agRoot = agRoot;
975 onePortContext->agPortContext = agPortContext;
976 tdsaAllShared->Ports[PhyID].portContext = onePortContext;
977 agPortContext->osData = onePortContext;
978 onePortContext->valid = agTRUE;
979 if (LinkRate == 0x01)
980 {
981 onePortContext->LinkRate = SAS_CONNECTION_RATE_1_5G;
982 }
983 else if (LinkRate == 0x02)
984 {
985 onePortContext->LinkRate = SAS_CONNECTION_RATE_3_0G;
986 }
987 else if (LinkRate == 0x04)
988 {
989 onePortContext->LinkRate = SAS_CONNECTION_RATE_6_0G;
990 }
991 else /* (LinkRate == 0x08) */
992 {
993 onePortContext->LinkRate = SAS_CONNECTION_RATE_12_0G;
994 }
995
997 TDLIST_ENQUEUE_AT_TAIL(&(onePortContext->MainLink), &(tdsaAllShared->MainPortContextList));
999#ifdef FDS_DM
1000 dmPortContext = &(onePortContext->dmPortContext);
1001 dmPortContext->tdData = onePortContext;
1002 /* set up dmPortInfo_t */
1003 PORTINFO_PUT_SAS_REMOTE_ADDRESSLO(&dmPortInfo, onePortContext->sasRemoteAddressLo);
1004 PORTINFO_PUT_SAS_REMOTE_ADDRESSHI(&dmPortInfo, onePortContext->sasRemoteAddressHi);
1005 PORTINFO_PUT_SAS_LOCAL_ADDRESSLO(&dmPortInfo, onePortContext->sasLocalAddressLo);
1006 PORTINFO_PUT_SAS_LOCAL_ADDRESSHI(&dmPortInfo, onePortContext->sasLocalAddressHi);
1007
1008 TI_DBG2(("ossaHwCB: phy %d hi 0x%x lo 0x%x\n", PhyID,
1009 SA_IDFRM_GET_SAS_ADDRESSHI(&(tdsaAllShared->Ports[PhyID].SASID)),
1010 SA_IDFRM_GET_SAS_ADDRESSLO(&(tdsaAllShared->Ports[PhyID].SASID))));
1011 TI_DBG2(("ossaHwCB: LocalAddrHi 0x%08x LocaAddrLo 0x%08x\n", onePortContext->sasLocalAddressHi, onePortContext->sasLocalAddressLo));
1012
1013 dmPortInfo.flag = onePortContext->LinkRate;
1014
1015 if (onePortContext->UseDM == agTRUE)
1016 {
1017 TI_DBG1(("ossaHwCB: calling dmCreatePort\n"));
1018 status = dmCreatePort(dmRoot, dmPortContext, &dmPortInfo);
1019 if (status != DM_RC_SUCCESS)
1020 {
1021 TI_DBG1(("ossaHwCB: dmCreatePort failed!!! 0x%x\n", status));
1022 }
1023 }
1024#endif
1025
1026 }
1027 else
1028 {
1030 TI_DBG1(("\nossaHwCB: Attention!!! no more free PortContext.\n"));
1031 }
1032#ifdef TD_INTERNAL_DEBUG /* for debugging only */
1033
1034 print_tdlist_flink(&(tdsaPortContext->FreeLink), 1, 1);
1035 print_tdlist_flink(&(tdsaPortContext->MainLink), 1, 2);
1036 print_tdlist_flink(&(tdsaDeviceData->FreeLink), 2, 1);
1037 print_tdlist_flink(&(tdsaDeviceData->MainLink), 2, 2);
1038#endif
1039
1040#ifdef TD_INTERNAL_DEBUG /* for debugging */
1041 PortContextList = tdsaPortContext->MainLink.flink;
1042 while (PortContextList != &(tdsaPortContext->MainLink))
1043 {
1044 twoPortContext = TDLIST_OBJECT_BASE(tdsaPortContext_t, MainLink, PortContextList);
1045 TI_DBG6(("ossaHwCB: in while portContext ID %d\n", twoPortContext->id));
1046 TI_DBG6(("ossaHwCB: in while PortContext %p\n", twoPortContext));
1047 PortContextList = PortContextList->flink;
1048 }
1049#endif
1050 /* add agDevHandle */
1052 {
1053#ifdef INITIATOR_DRIVER
1054 agSASSubID.sasAddressHi = SA_IDFRM_GET_SAS_ADDRESSHI(IDframe);
1055 agSASSubID.sasAddressLo = SA_IDFRM_GET_SAS_ADDRESSLO(IDframe);
1056 agSASSubID.initiator_ssp_stp_smp = IDframe->initiator_ssp_stp_smp;
1057 agSASSubID.target_ssp_stp_smp = IDframe->target_ssp_stp_smp;
1058#endif
1059
1060 TI_DBG2(("ossaHwCB: adding ....\n"));
1061 /* uses only SASIDframe not agsaSASDeviceInfo_t */
1062#ifdef INITIATOR_DRIVER
1064 onePortContext,
1065 agRoot,
1066 agDevHandle, /* agNULL */
1067 &agSASSubID,
1068 agTRUE,
1069 (bit8)PhyID,
1071 );
1072#endif
1073
1074#ifdef FDS_DM
1075 if (SA_IDFRM_GET_DEVICETTYPE(IDframe) == SAS_END_DEVICE &&
1076 SA_IDFRM_IS_SSP_TARGET(IDframe) )
1077 {
1078 TI_DBG2(("ossaHwCB: NOTIFY_ENABLE_SPINUP PhyID %d \n", PhyID));
1079
1080 for (i=0;i<TD_MAX_NUM_NOTIFY_SPINUP;i++)
1081 {
1083 }
1084 }
1085
1086 /* update MCN */
1087 tdsaUpdateMCN(dmRoot, onePortContext);
1088#endif
1089
1090#ifdef TARGET_DRIVER
1091 TI_DBG1(("ossaHwCB: target, link up PhyID 0x%x\n",PhyID));
1092
1093 /* notifying link up */
1095 tiRoot,
1097 tiSuccess,
1098 (void *)tdsaAllShared->Ports[PhyID].tiPortalContext
1099 );
1100#endif
1101 }
1102 else
1103 {
1104 TI_DBG5(("ossaHwCB: $$$$$ not end device. not adding....\n"));
1105 }
1106
1107 saPortControl(agRoot, /* AGSA_PORT_SET_PORT_RECOVERY_TIME */
1108 agNULL,
1109 0,
1110 agPortContext,
1112 tdsaAllShared->portTMO, //PORT_RECOVERY_TIMEOUT
1113 0
1114 );
1115 /* setting SAS PORT RESET TMO and SATA PORT RESET TMO*/
1116 if (tIsSPCV12G(agRoot))
1117 {
1118 saPortControl(agRoot, /* AGSA_PORT_SET_PORT_RESET_TIME */
1119 agNULL,
1120 0,
1121 agPortContext,
1123 SAS_12G_PORT_RESET_TMO, // 800 ms
1124 0
1125 );
1126 }
1127 else
1128 {
1129 saPortControl(agRoot, /* AGSA_PORT_SET_PORT_RESET_TIME */
1130 agNULL,
1131 0,
1132 agPortContext,
1134 SAS_PORT_RESET_TMO, // 300 ms
1135 0
1136 );
1137 }
1138 }
1139 else
1140 {
1141 /*
1142 an existing portcontext
1143 to be tested
1144 */
1145
1146 TI_DBG2(("ossaHwCB: SAS existing portcontext returned\n"));
1147
1148 onePortContext = (tdsaPortContext_t *)agPortContext->osData;
1149 if (onePortContext == agNULL)
1150 {
1151 TI_DBG1(("ossaHwCB: onePortContext is NULL, wrong!\n"));
1152 return;
1153 }
1154 if (onePortContext->valid == agFALSE)
1155 {
1156 /* port has been invalidated; needs to be allocated */
1157 TI_DBG2(("ossaHwCB: SAS allocating port context\n"));
1158
1160 if (TDLIST_NOT_EMPTY(&(tdsaAllShared->FreePortContextList)))
1161 {
1162 TDLIST_DEQUEUE_FROM_HEAD(&PortContextList, &(tdsaAllShared->FreePortContextList));
1164 onePortContext = TDLIST_OBJECT_BASE(tdsaPortContext_t, FreeLink, PortContextList);
1165 TI_DBG2(("ossaHwCB: allocating pid %d\n", onePortContext->id));
1166 TI_DBG6(("ossaHwCB: allocating onePortContext %p\n", onePortContext));
1167 if (onePortContext == agNULL)
1168 {
1169 TI_DBG1(("ossaHwCB: onePortContext is NULL in allocation, wrong!\n"));
1170 return;
1171 }
1172 /* sets fields of tdsaportcontext */
1173#ifdef INITIATOR_DRIVER
1174 onePortContext->DiscoveryState = ITD_DSTATE_NOT_STARTED;
1175 onePortContext->discoveryOptions = AG_SA_DISCOVERY_OPTION_FULL_START;
1176#endif
1177 onePortContext->PhyIDList[PhyID] = agTRUE;
1178 if (IDframe == agNULL)
1179 {
1180 onePortContext->sasRemoteAddressHi = 0xFFFFFFFF;
1181 onePortContext->sasRemoteAddressLo = 0xFFFFFFFF;
1182 onePortContext->directAttatchedSAS = agTRUE;
1183 }
1184 else
1185 {
1186 onePortContext->sasRemoteAddressHi = SA_IDFRM_GET_SAS_ADDRESSHI(IDframe);
1187 onePortContext->sasRemoteAddressLo = SA_IDFRM_GET_SAS_ADDRESSLO(IDframe);
1188 /* Create ID frame and storing ID frame */
1189 osti_memcpy(&onePortContext->sasIDframe, IDframe, sizeof(agsaSASIdentify_t));
1190 tdhexdump("ossaHWCB: sasIDframe", (bit8 *)(&onePortContext->sasIDframe), sizeof(agsaSASIdentify_t));
1192 {
1193 onePortContext->directAttatchedSAS = agTRUE;
1194 }
1195 }
1196
1197 onePortContext->sasLocalAddressHi = SA_IDFRM_GET_SAS_ADDRESSHI(&tdsaAllShared->Ports[PhyID].SASID);
1198 onePortContext->sasLocalAddressLo = SA_IDFRM_GET_SAS_ADDRESSLO(&tdsaAllShared->Ports[PhyID].SASID);
1199 onePortContext->tiPortalContext = tdsaAllShared->Ports[PhyID].tiPortalContext;
1200 onePortContext->agRoot = agRoot;
1201 onePortContext->agPortContext = agPortContext;
1202 tdsaAllShared->Ports[PhyID].portContext = onePortContext;
1203 agPortContext->osData = onePortContext;
1204 onePortContext->valid = agTRUE;
1205 if (LinkRate == 0x01)
1206 {
1207 onePortContext->LinkRate = SAS_CONNECTION_RATE_1_5G;
1208 }
1209 else if (LinkRate == 0x02)
1210 {
1211 onePortContext->LinkRate = SAS_CONNECTION_RATE_3_0G;
1212 }
1213 else if (LinkRate == 0x04)
1214 {
1215 onePortContext->LinkRate = SAS_CONNECTION_RATE_6_0G;
1216 }
1217 else /* (LinkRate == 0x08) */
1218 {
1219 onePortContext->LinkRate = SAS_CONNECTION_RATE_12_0G;
1220 }
1222 TDLIST_ENQUEUE_AT_TAIL(&(onePortContext->MainLink), &(tdsaAllShared->MainPortContextList));
1224 }
1225 else
1226 {
1228 TI_DBG1(("\nossaHwCB: Attention!!! no more free PortContext.\n"));
1229 smTraceFuncExit(hpDBG_VERY_LOUD, 'd', "Y2");
1230 return;
1231 }
1232 } /* invalidated port */
1233 else
1234 {
1235 /* already alloacated */
1236 TI_DBG2(("ossaHwCB: SAS already allocated port context\n"));
1237 if (TDLIST_EMPTY(&(tdsaAllShared->MainPortContextList)))
1238 {
1239 TI_DBG1(("ossaHwCB: wrong!!! null tdsaPortContext list\n"));
1240 smTraceFuncExit(hpDBG_VERY_LOUD, 'e', "Y2");
1241 return;
1242 }
1243 if (onePortContext == agNULL)
1244 {
1245 TI_DBG1(("ossaHwCB: wrong !!! No corressponding tdsaPortContext\n"));
1246 smTraceFuncExit(hpDBG_VERY_LOUD, 'f', "Y2");
1247 return;
1248 }
1249
1250 TI_DBG2(("ossaHwCB: existing pid %d\n", onePortContext->id));
1251 if (tdsaAllShared->Ports[PhyID].portContext == agNULL)
1252 {
1253 TI_DBG1(("ossaHwCB: existing allshared pid is NULL\n"));
1254 }
1255 else
1256 {
1257 TI_DBG2(("ossaHwCB: existing allshared pid %d\n", tdsaAllShared->Ports[PhyID].portContext->id));
1258 }
1259 /* updates PhyID belong to a port */
1260 onePortContext->PhyIDList[PhyID] = agTRUE;
1261#ifdef FDS_DM
1262 if (SA_IDFRM_GET_DEVICETTYPE(IDframe) == SAS_END_DEVICE &&
1263 SA_IDFRM_IS_SSP_TARGET(IDframe) )
1264 {
1265 TI_DBG2(("ossaHwCB: NOTIFY_ENABLE_SPINUP PhyID %d \n", PhyID));
1266
1267 for (i=0;i<TD_MAX_NUM_NOTIFY_SPINUP;i++)
1268 {
1270 }
1271 }
1272
1273 /* update MCN */
1274 tdsaUpdateMCN(dmRoot, onePortContext);
1275#endif
1276 }
1277 onePortContext->SeenLinkUp = agTRUE;
1278 } /* else, old portcontext */
1279
1280 break;
1281 }
1282#ifdef INITIATOR_DRIVER
1284 {
1285 PhyID = TD_GET_PHY_ID(eventParm1);
1286 LinkRate = TD_GET_LINK_RATE(eventParm1);
1287 PortState = TD_GET_PORT_STATE(eventParm1);
1288 agDevHandle = agNULL;
1289 RegD2H = ( agsaFisRegDeviceToHost_t *)eventParm3;
1290
1291 TI_DBG2(("ossaHwCB: Phy%d SATA link Up\n", PhyID));
1292
1293 if (agDevHandle == agNULL)
1294 {
1295 TI_DBG3(("ossaHwCB: agDevHandle null by design change\n"));
1296 }
1297
1298 if (RegD2H == agNULL)
1299 {
1300 TI_DBG1(("ossaHwCB: RegD2H null, wrong\n"));
1301 smTraceFuncExit(hpDBG_VERY_LOUD, 'g', "Y2");
1302 return;
1303 }
1304
1305
1306 TI_DBG2(("ossaHwCB: agDevHandle %p\n", agDevHandle));
1307 tdhexdump("ossaHWCB RegD2H", (bit8 *)RegD2H, sizeof(agsaFisRegDeviceToHost_t));
1308 TI_DBG2(("ossaHwCB: Sector Count %d\n", RegD2H->d.sectorCount));
1309 TI_DBG2(("ossaHwCB: LBA LOW %d\n", RegD2H->d.lbaLow));
1310 TI_DBG2(("ossaHwCB: LBA MID %d\n", RegD2H->d.lbaMid));
1311 TI_DBG2(("ossaHwCB: LBA HIGH %d\n", RegD2H->d.lbaHigh));
1312 TI_DBG2(("ossaHwCB: DEVICE %d\n", RegD2H->d.device));
1313
1314 /* debugging only */
1315 if (LinkRate == 0x01)
1316 {
1317 TI_DBG1(("ossaHwCB: SATA Link Rate is 1.5 Gbps PhyID %d\n",PhyID));
1318 }
1319 if (LinkRate == 0x02)
1320 {
1321 TI_DBG1(("ossaHwCB: SATA Link Rate is 3.0 Gbps PhyID %d\n",PhyID));
1322 }
1323 if (LinkRate == 0x04)
1324 {
1325 TI_DBG1(("ossaHwCB: SATA Link Rate is 6.0 Gbps PhyID %d\n",PhyID));
1326 }
1327 if (LinkRate == 0x08)
1328 {
1329 TI_DBG1(("ossaHwCB: SATA Link Rate is 12.0 Gbps PhyID %d\n",PhyID));
1330 }
1331
1332 if (PortState == OSSA_PORT_INVALID)
1333 {
1334 TI_DBG1(("ossaHwCB: Wrong port state with SATA link up\n"));
1335 smTraceFuncExit(hpDBG_VERY_LOUD, 'h', "Y2");
1336 return;
1337 }
1338
1339 if ( agPortContext->osData == agNULL)
1340 {/* if */
1341 TI_DBG6 (("ossaHwCB: PhyID %d tdsaAllShared %p\n", PhyID, tdsaAllShared));
1343 if (TDLIST_NOT_EMPTY(&(tdsaAllShared->FreePortContextList)))
1344 {
1345 TDLIST_DEQUEUE_FROM_HEAD(&PortContextList, &(tdsaAllShared->FreePortContextList));
1347 onePortContext = TDLIST_OBJECT_BASE(tdsaPortContext_t, FreeLink, PortContextList);
1348 TI_DBG2(("ossaHwCB: pid %d\n", onePortContext->id));
1349 TI_DBG6(("ossaHwCB: onePortContext %p\n", onePortContext));
1350 if (onePortContext == agNULL)
1351 {
1352 TI_DBG1(("ossaHwCB: onePortContext is NULL in allocation, wrong!\n"));
1353 return;
1354 }
1355
1356 /* sets fields of tdsaportcontext */
1357 onePortContext->DiscoveryState = ITD_DSTATE_NOT_STARTED;
1358 onePortContext->discoveryOptions = AG_SA_DISCOVERY_OPTION_FULL_START;
1359 onePortContext->PhyIDList[PhyID] = agTRUE;
1360 /* NO sas address for SATA */
1361 onePortContext->sasRemoteAddressHi = 0xFFFFFFFF;
1362 onePortContext->sasRemoteAddressLo = 0xFFFFFFFF;
1363 /* copying the signature */
1364 onePortContext->remoteSignature[0] = RegD2H->d.sectorCount;
1365 onePortContext->remoteSignature[1] = RegD2H->d.lbaLow;
1366 onePortContext->remoteSignature[2] = RegD2H->d.lbaMid;
1367 onePortContext->remoteSignature[3] = RegD2H->d.lbaHigh;
1368 onePortContext->remoteSignature[4] = RegD2H->d.device;
1369
1370 onePortContext->sasLocalAddressHi = SA_IDFRM_GET_SAS_ADDRESSHI(&tdsaAllShared->Ports[PhyID].SASID);
1371 onePortContext->sasLocalAddressLo = SA_IDFRM_GET_SAS_ADDRESSLO(&tdsaAllShared->Ports[PhyID].SASID);
1372 onePortContext->tiPortalContext = tdsaAllShared->Ports[PhyID].tiPortalContext;
1373 onePortContext->agRoot = agRoot;
1374 onePortContext->agPortContext = agPortContext;
1375 tdsaAllShared->Ports[PhyID].portContext = onePortContext;
1376 agPortContext->osData = onePortContext;
1377 onePortContext->nativeSATAMode = agTRUE;
1378 onePortContext->valid = agTRUE;
1379 if (LinkRate == 0x01)
1380 {
1381 onePortContext->LinkRate = SAS_CONNECTION_RATE_1_5G;
1382 }
1383 else if (LinkRate == 0x02)
1384 {
1385 onePortContext->LinkRate = SAS_CONNECTION_RATE_3_0G;
1386 }
1387 else if (LinkRate == 0x04)
1388 {
1389 onePortContext->LinkRate = SAS_CONNECTION_RATE_6_0G;
1390 }
1391 else /* (LinkRate == 0x08) */
1392 {
1393 onePortContext->LinkRate = SAS_CONNECTION_RATE_12_0G;
1394 }
1395
1397 TDLIST_ENQUEUE_AT_TAIL(&(onePortContext->MainLink), &(tdsaAllShared->MainPortContextList));
1399 }
1400 else
1401 {
1403 TI_DBG1(("\nossaHwCB: Attention!!! no more free PortContext.\n"));
1404 smTraceFuncExit(hpDBG_VERY_LOUD, 'i', "Y2");
1405 return;
1406 }
1407#ifdef SATA_ENABLE
1408 /* tdssAddSATAToSharedcontext() sends identify device data to find out the uniqueness of
1409 target. In identify device data CB fn (satAddSATAIDDevCB()),
1410 tiPortLinkUp and tiPortDiscoveryReady happen
1411 */
1413 onePortContext,
1414 agRoot,
1415 agDevHandle, /* agNULL */
1416 agNULL,
1417 agTRUE,
1418 (bit8)PhyID
1419 );
1420#endif
1421 /* setting SAS PORT RESET TMO and SATA PORT RESET TMO*/
1422 saPortControl(agRoot, /* AGSA_PORT_SET_PORT_RESET_TIME */
1423 agNULL,
1424 0,
1425 agPortContext,
1427 0,
1428 SATA_PORT_RESET_TMO // 8000 ms
1429 );
1430
1431 }
1432 else
1433 {
1434 /*
1435 an existing portcontext
1436 to be tested
1437 */
1438
1439 TI_DBG1(("ossaHwCB: SATA existing portcontext returned. need testing\n"));
1440 onePortContext = (tdsaPortContext_t *)agPortContext->osData;
1441 /* for debugging only */
1442 if (onePortContext->valid == agFALSE)
1443 {
1444 /* port has been invalidated; needs to be allocated */
1445 TI_DBG2(("ossaHwCB: SATA allocating port context\n"));
1446 }
1447 else
1448 {
1449 /* already alloacated */
1450 TI_DBG1(("ossaHwCB: Wrong!!! SATA already allocated port context\n"));
1451 smTraceFuncExit(hpDBG_VERY_LOUD, 'j', "Y2");
1452 return;
1453 }
1454
1456 if (TDLIST_NOT_EMPTY(&(tdsaAllShared->FreePortContextList)))
1457 {
1458 TDLIST_DEQUEUE_FROM_HEAD(&PortContextList, &(tdsaAllShared->FreePortContextList));
1460 onePortContext = TDLIST_OBJECT_BASE(tdsaPortContext_t, FreeLink, PortContextList);
1461 TI_DBG2(("ossaHwCB: pid %d\n", onePortContext->id));
1462 TI_DBG6(("ossaHwCB: onePortContext %p\n", onePortContext));
1463 if (onePortContext == agNULL)
1464 {
1465 TI_DBG1(("ossaHwCB: onePortContext is NULL in allocation, wrong!\n"));
1466 return;
1467 }
1468
1469 /* sets fields of tdsaportcontext */
1470 onePortContext->DiscoveryState = ITD_DSTATE_NOT_STARTED;
1471 onePortContext->discoveryOptions = AG_SA_DISCOVERY_OPTION_FULL_START;
1472 onePortContext->PhyIDList[PhyID] = agTRUE;
1473 /* NO sas address for SATA */
1474 onePortContext->sasRemoteAddressHi = 0xFFFFFFFF;
1475 onePortContext->sasRemoteAddressLo = 0xFFFFFFFF;
1476 /* copying the signature */
1477 onePortContext->remoteSignature[0] = RegD2H->d.sectorCount;
1478 onePortContext->remoteSignature[1] = RegD2H->d.lbaLow;
1479 onePortContext->remoteSignature[2] = RegD2H->d.lbaMid;
1480 onePortContext->remoteSignature[3] = RegD2H->d.lbaHigh;
1481 onePortContext->remoteSignature[4] = RegD2H->d.device;
1482
1483 onePortContext->sasLocalAddressHi = SA_IDFRM_GET_SAS_ADDRESSHI(&tdsaAllShared->Ports[PhyID].SASID);
1484 onePortContext->sasLocalAddressLo = SA_IDFRM_GET_SAS_ADDRESSLO(&tdsaAllShared->Ports[PhyID].SASID);
1485 onePortContext->tiPortalContext = tdsaAllShared->Ports[PhyID].tiPortalContext;
1486 onePortContext->agRoot = agRoot;
1487 onePortContext->agPortContext = agPortContext;
1488 tdsaAllShared->Ports[PhyID].portContext = onePortContext;
1489 agPortContext->osData = onePortContext;
1490 onePortContext->nativeSATAMode = agTRUE;
1491 onePortContext->valid = agTRUE;
1492 if (LinkRate == 0x01)
1493 {
1494 onePortContext->LinkRate = SAS_CONNECTION_RATE_1_5G;
1495 }
1496 else if (LinkRate == 0x02)
1497 {
1498 onePortContext->LinkRate = SAS_CONNECTION_RATE_3_0G;
1499 }
1500 else if (LinkRate == 0x04)
1501 {
1502 onePortContext->LinkRate = SAS_CONNECTION_RATE_6_0G;
1503 }
1504 else /* (LinkRate == 0x08) */
1505 {
1506 onePortContext->LinkRate = SAS_CONNECTION_RATE_12_0G;
1507 }
1508
1510 TDLIST_ENQUEUE_AT_TAIL(&(onePortContext->MainLink), &(tdsaAllShared->MainPortContextList));
1512 }
1513 else
1514 {
1516 TI_DBG1(("\nossaHwCB: Attention!!! no more free PortContext.\n"));
1517 smTraceFuncExit(hpDBG_VERY_LOUD, 'k', "Y2");
1518 return;
1519 }
1520
1521
1522 /*hotplug */
1523#ifdef SATA_ENABLE
1525 onePortContext,
1526 agRoot,
1527 agDevHandle, /* agNULL */
1528 agNULL,
1529 agTRUE,
1530 (bit8)PhyID
1531 );
1532#endif
1533 /* end hotplug */
1534 }
1535
1536 break;
1537 }
1538#endif
1540 {
1541 PhyID = TD_GET_PHY_ID(eventParm1);
1542
1543 TI_DBG2(("ossaHwCB: spinup hold PhyID %d\n", PhyID));
1544 break;
1545 }
1546
1548 {
1549 bit32 AllPhyDown = agTRUE;
1550
1551 /* 4/15/08 spec */
1552 PhyID = TD_GET_PHY_ID(eventParm1);
1553 LinkRate = TD_GET_LINK_RATE(eventParm1);
1554 PortState = TD_GET_PORT_STATE(eventParm1);
1555
1556
1557 TI_DBG2(("ossaHwCB: Phy%d link Down\n", PhyID));
1558
1559 if (agPortContext == agNULL)
1560 {
1561 TI_DBG1(("ossaHwCB: agPortContext null, wrong\n"));
1562 smTraceFuncExit(hpDBG_VERY_LOUD, 'l', "Y2");
1563 return;
1564 }
1565
1566 if ( agPortContext->osData == agNULL)
1567 { /* if */
1568 /* PortContext must exit at this point */
1569 TI_DBG1(("ossaHwCB: NULL portalcontext. Error. Can't be NULL\n"));
1570 }
1571 else
1572 {
1573 TI_DBG3(("ossaHwCB: NOT NULL portalcontext\n"));
1574 onePortContext = (tdsaPortContext_t *)agPortContext->osData;
1575 if (onePortContext == agNULL)
1576 {
1577 TI_DBG1(("ossaHwCB: wrong !!! No corressponding tdsaPortContext\n"));
1578 smTraceFuncExit(hpDBG_VERY_LOUD, 'm', "Y2");
1579 return;
1580 }
1581 onePortContext->PhyIDList[PhyID] = agFALSE;
1582 for(i=0;i<TD_MAX_NUM_PHYS;i++)
1583 {
1584 if (onePortContext->PhyIDList[i] == agTRUE)
1585 {
1586 TI_DBG3(("ossaHwCB: Phy %d is still up\n", i));
1587 AllPhyDown = agFALSE;
1588 break;
1589 }
1590 }
1591
1592 /* last phy belong to the portcontext */
1593 if (AllPhyDown == agTRUE)
1594 {
1595#ifdef NOT_YET
1596 TI_DBG1(("ossaHwCB: calling tiPortLinkDown\n"));
1598 tiRoot,
1600 tiSuccess,
1601 (void *)onePortContext->tiPortalContext
1602 );
1603#endif
1604 }
1605
1606 if (PortState == OSSA_PORT_VALID)
1607 {
1608 /* do nothing */
1609 /* no ack for every phy down */
1610#ifdef FDS_DM
1611 /* update MCN for all devices belong to this port */
1612 tdsaUpdateMCN(dmRoot, onePortContext);
1613#endif
1614 }
1615 else if (PortState == OSSA_PORT_LOSTCOMM)
1616 {
1617 /*
1618 1. Mark the port as invalid and stop the io for that port and its device
1619 No ack here. Otherwise, port will be released by FW.
1620 */
1621 TI_DBG2(("ossaHwCB: phy Down and OSSA_PORT_LOSTCOMM\n"));
1622 /* save eventSource related information in tdsaAllShared */
1623 tdsaAllShared->eventSource[PhyID].EventValid = agTRUE;
1624 tdsaAllShared->eventSource[PhyID].Source.agPortContext = agPortContext;
1625 tdsaAllShared->eventSource[PhyID].Source.event = OSSA_HW_EVENT_PHY_DOWN;
1626 /* phy ID */
1627 tdsaAllShared->eventSource[PhyID].Source.param = PhyID;
1628 /* phy ID */
1629 onePortContext->eventPhyID = PhyID;
1630 /* to stop IO's */
1631 onePortContext->valid = agFALSE;
1632 break;
1633 }
1634 else if (PortState == OSSA_PORT_IN_RESET)
1635 {
1636 TI_DBG2(("ossaHwCB: phy Down and OSSA_PORT_IN_RESET\n"));
1637 /* save eventSource related information in tdsaAllShared */
1638 tdsaAllShared->eventSource[PhyID].EventValid = agTRUE;
1639 tdsaAllShared->eventSource[PhyID].Source.agPortContext = agPortContext;
1640 tdsaAllShared->eventSource[PhyID].Source.event = OSSA_HW_EVENT_PHY_DOWN;
1641 /* phy ID */
1642 tdsaAllShared->eventSource[PhyID].Source.param = PhyID;
1643 /* phy ID */
1644 onePortContext->eventPhyID = PhyID;
1645 /* to stop IO's */
1646 onePortContext->valid = agFALSE;
1647 break;
1648 }
1649 else if (PortState == OSSA_PORT_INVALID)
1650 {
1651 TI_DBG1(("ossaHwCB: Last phy Down and port invalid OSSA_PORT_INVALID\n"));
1652 /*
1653 invalidate port
1654 then, saHwEventAck() in ossaDeregisterDeviceHandleCB()
1655 */
1656
1657 /* save eventSource related information in tdsaAllShared */
1658 tdsaAllShared->eventSource[PhyID].EventValid = agTRUE;
1659 tdsaAllShared->eventSource[PhyID].Source.agPortContext = agPortContext;
1660 tdsaAllShared->eventSource[PhyID].Source.event = OSSA_HW_EVENT_PHY_DOWN;
1661 /* phy ID */
1662 tdsaAllShared->eventSource[PhyID].Source.param = PhyID;
1663 /* phy ID */
1664 onePortContext->eventPhyID = PhyID;
1665
1666 onePortContext->valid = agFALSE;
1667
1668 TI_DBG2(("ossaHwCB: pid %d\n", onePortContext->id));
1669#ifdef INITIATOR_DRIVER
1670 /* notifying link down (all links belonging to a port are down) */
1672 tiRoot,
1674 tiSuccess,
1675 (void *)onePortContext->tiPortalContext
1676 );
1677#endif
1678
1679#ifdef TARGET_DRIVER
1681 tiRoot,
1683 tiSuccess,
1684 (void *)onePortContext->tiPortalContext
1685 );
1686
1687#endif
1688
1689#ifdef INITIATOR_DRIVER
1690 tdssReportRemovals(agRoot,
1691 onePortContext,
1692 agFALSE
1693 );
1694#endif
1695#ifdef TARGET_DRIVER
1696 ttdssReportRemovals(agRoot,
1697 onePortContext,
1698 agFALSE
1699 );
1700
1701#endif
1702
1703 /* find a PhyID and reset for portContext in tdssSASShared */
1704 for(i=0;i<TD_MAX_NUM_PHYS;i++)
1705 {
1706 if (onePortContext->PhyIDList[i] == agTRUE)
1707 {
1708 tdsaAllShared->Ports[i].portContext = agNULL;
1709 }
1710 }
1711 /* portcontext is removed from MainLink to FreeLink in tdssReportRemovals or
1712 ossaDeregisterDeviceHandleCB
1713 */
1714 }/* OSSA_PORT_INVALID */
1715 else
1716 {
1717 /* other newly defined port state */
1718 /* do nothing */
1719 TI_DBG2(("ossaHwCB: portstate 0x%x\n", PortState));
1720 }
1721 } /* big else */
1722 break;
1723 }
1725 {
1726 PhyID = TD_GET_PHY_ID(eventParm1);
1727 PhyStatus = TD_GET_PHY_STATUS(eventParm1);
1728
1729 TI_DBG6(("ossaHwCB: OSSA_HW_EVENT_PHY_START_STATUS\n"));
1730 if (PhyStatus == 0x00)
1731 {
1732 TI_DBG6(("ossaHwCB: OSSA_HW_EVENT_PHY_START_STATUS, SUCCESS\n"));
1733 }
1734 else if (PhyStatus == 0x01)
1735 {
1736 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_START_STATUS, INVALID_PHY\n"));
1737 }
1738 else if (PhyStatus == 0x02)
1739 {
1740 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_START_STATUS, PHY_NOT_DISABLED\n"));
1741 }
1742 else
1743 {
1744 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_START_STATUS, OTHER_FAILURE %d\n", PhyStatus));
1745 }
1746 break;
1747 }
1749 {
1750 agsaContext_t *agContext;
1751 PhyID = TD_GET_PHY_ID(eventParm1);
1752 PhyStatus = TD_GET_PHY_STATUS(eventParm1);
1753 PortState = TD_GET_PORT_STATE(eventParm1);
1754
1755 TI_DBG2(("ossaHwCB: OSSA_HW_EVENT_PHY_STOP_STATUS\n"));
1756 if (PhyStatus == 0x00)
1757 {
1758 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_STOP_STATUS, SUCCESS\n"));
1759 agContext = (agsaContext_t *)eventParm2;
1760 onePortContext = (tdsaPortContext_t *)agContext->osData;
1761 if (onePortContext == agNULL)
1762 {
1763 TI_DBG1(("ossaHwCB: onePortContext is null, wrong!!!\n"));
1764 return;
1765 }
1766 onePortContext->PhyIDList[PhyID] = agFALSE;
1767 if (PortState == OSSA_PORT_INVALID) /* invalid port */
1768 {
1769 TI_DBG1(("ossaHwCB: OSSA_PORT_INVALID\n"));
1770 tdsaAllShared->eventSource[PhyID].EventValid = NO_ACK;
1771 onePortContext->eventPhyID = PhyID;
1772 onePortContext->valid = agFALSE;
1773
1774 TI_DBG2(("ossaHwCB: pid %d\n", onePortContext->id));
1775#ifdef INITIATOR_DRIVER
1776 /* notifying link down (all links belonging to a port are down) */
1778 tiRoot,
1780 tiSuccess,
1781 (void *)onePortContext->tiPortalContext
1782 );
1783#endif
1784
1785#ifdef TARGET_DRIVER
1787 tiRoot,
1789 tiSuccess,
1790 (void *)onePortContext->tiPortalContext
1791 );
1792
1793#endif
1794
1795#ifdef INITIATOR_DRIVER
1796 tdssReportRemovals(agRoot,
1797 onePortContext,
1798 agFALSE
1799 );
1800#endif
1801#ifdef TARGET_DRIVER
1802 ttdssReportRemovals(agRoot,
1803 onePortContext,
1804 agFALSE
1805 );
1806
1807#endif
1808
1809 /* find a PhyID and reset for portContext in tdssSASShared */
1810 for(i=0;i<TD_MAX_NUM_PHYS;i++)
1811 {
1812 if (onePortContext->PhyIDList[i] == agTRUE)
1813 {
1814 tdsaAllShared->Ports[i].portContext = agNULL;
1815 }
1816 }
1817 /* portcontext is removed from MainLink to FreeLink in tdssReportRemovals or
1818 ossaDeregisterDeviceHandleCB
1819 */
1820 } /* invalid port */
1821 }
1822 else if (PhyStatus == 0x01)
1823 {
1824 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_STOP_STATUS, INVALID_PHY\n"));
1825 }
1826 else if (PhyStatus == 0x02)
1827 {
1828 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_STOP_STATUS, DEVICES_ATTACHED\n"));
1829 }
1830 else if (PhyStatus == 0x03)
1831 {
1832 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_STOP_STATUS, OTHER_FAILURE\n"));
1833 }
1834 else if (PhyStatus == 0x04)
1835 {
1836 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_STOP_STATUS, PHY_NOT_DISABLED\n"));
1837 }
1838 else
1839 {
1840 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_STOP_STATUS, Unknown %d\n", PhyStatus));
1841 }
1842 break;
1843 }
1844
1846 {
1847 bit32 new_status = TD_GET_RESET_STATUS(eventParm1);
1848 TI_DBG2(("ossaHwCB: RESET_START, status %d\n", new_status));
1849 if (new_status == OSSA_SUCCESS)
1850 {
1851 tdsaAllShared->flags.resetInProgress = agTRUE;
1852 TI_DBG2(("ossaHwCB: RESET_START, SUCCESS\n"));
1853 }
1854 else if (new_status == OSSA_FAILURE)
1855 {
1856 TI_DBG1(("ossaHwCB: RESET_START, FAILURE\n"));
1857 }
1858 else
1859 {
1860 TI_DBG1(("ossaHwCB: RESET_START, PENDING\n"));
1861 }
1862 break;
1863 }
1864
1866 {
1867 bit32 new_status = TD_GET_RESET_STATUS(eventParm1);
1868#ifdef SOFT_RESET_TEST
1869 DbgPrint("Reset Complete\n");
1870#endif
1871 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_RESET_COMPLETE, status %d\n", new_status));
1872 if (new_status == OSSA_SUCCESS)
1873 {
1874 /* remove all portcontext and devices */
1875#ifdef INITIATOR_DRIVER
1877#endif
1878 tdsaAllShared->flags.resetInProgress = agFALSE;
1879 /*
1880 a callback notifying reset completion
1881 */
1883 tiRoot,
1885 tiSuccess,
1886 agNULL
1887 );
1888 }
1889 else
1890 {
1891 /*
1892 a callback notifying reset completion
1893 */
1894 tdsaAllShared->flags.resetInProgress = agFALSE;
1896 tiRoot,
1898 tiError,
1899 agNULL
1900 );
1901
1902 }
1903 break;
1904 }
1905
1907 {
1908 PhyID = TD_GET_PHY_ID(eventParm1);
1909 PortState = TD_GET_PORT_STATE(eventParm1);
1910 agPhyErrCountersPage = (agsaPhyErrCountersPage_t *)eventParm2;
1911
1912 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_ERR_INBOUND_CRC from PhyID %d; to be tested\n", PhyID));
1913
1914 if (PortState == OSSA_PORT_INVALID)
1915 {
1916 TI_DBG1(("ossaHwCB: Wrong port state with OSSA_HW_EVENT_PHY_ERR_INBOUND_CRC\n"));
1917 smTraceFuncExit(hpDBG_VERY_LOUD, 'n', "Y2");
1918 return;
1919 }
1920
1921 if (agPhyErrCountersPage != agNULL)
1922 {
1923 TI_DBG2(("ossaHwCB: OSSA_HW_EVENT_PHY_ERR_INBOUND_CRC from PhyID %d\n", PhyID));
1924 TI_DBG1(("ossaHwCB: iDw %d rDE %d cV %d lS %d rP %d iCRC %d\n",
1925 agPhyErrCountersPage->invalidDword,
1926 agPhyErrCountersPage->runningDisparityError,
1927 agPhyErrCountersPage->codeViolation,
1928 agPhyErrCountersPage->lossOfDwordSynch,
1929 agPhyErrCountersPage->phyResetProblem,
1930 agPhyErrCountersPage->inboundCRCError ));
1931 }
1932 else
1933 {
1934 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_ERR_INBOUND_CRC: Error!!! eventParm2 is NULL\n"));
1935 }
1936
1937 /* saHwEventAck() */
1938 eventSource.agPortContext = agPortContext;
1939 eventSource.event = OSSA_HW_EVENT_PHY_ERR_INBOUND_CRC;
1940 /* phy ID */
1941 eventSource.param = PhyID;
1942 HwAckSatus = saHwEventAck(
1943 agRoot,
1944 agNULL, /* agContext */
1945 0,
1946 &eventSource, /* agsaEventSource_t */
1947 0,
1948 0
1949 );
1950 if ( HwAckSatus != AGSA_RC_SUCCESS)
1951 {
1952 TI_DBG1(("ossaHwCB: failing in saHwEventAck; status %d\n", HwAckSatus));
1953 smTraceFuncExit(hpDBG_VERY_LOUD, 'o', "Y2");
1954 return;
1955 }
1956 break;
1957 }
1958#ifdef REMOVED
1959 case OSSA_HW_EVENT_PORT_INVALID:
1960 {
1961 TI_DBG1(("ossaHwCB: PORT_INVALID\n"));
1962
1963 if ( agPortContext == agNULL)
1964 {
1965 TI_DBG1(("ossaHwCB: agPortContext is NULL, wrong.\n"));
1966 smTraceFuncExit(hpDBG_VERY_LOUD, 'p', "Y2");
1967 return;
1968 }
1969 if ( agPortContext->osData != agNULL)
1970 {
1971 TI_DBG1(("ossaHwCB: NOT NULL osDATA\n"));
1972 /*
1973 put the old portcontext back to free list
1974 */
1975 onePortContext = (tdsaPortContext_t *)agPortContext->osData;
1976 TI_DBG1(("ossaHwCB: pid %d\n", onePortContext->id));
1977
1978#ifdef INITIATOR_DRIVER
1979 /* notifying link down (all links belonging to a port are down) */
1981 tiRoot,
1983 tiSuccess,
1984 (void *)onePortContext->tiPortalContext
1985
1986 );
1987#endif /* INITIATOR_DRIVER */
1988#ifdef TARGET_DRIVER
1990 tiRoot,
1992 tiSuccess,
1993 (void *)onePortContext->tiPortalContext
1994 );
1995
1996#endif /*TARGET_DRIVER */
1997
1998 /* find the device belonging to the port and remove it from the device list */
1999 //tdssRemoveSASSATAFromSharedcontext(agRoot, tdsaDeviceData, onePortContext);
2000
2001
2002#ifdef INITIATOR_DRIVER
2003 /* reset the fields of portcontext */
2004 onePortContext->DiscoveryState = ITD_DSTATE_NOT_STARTED;
2005 tdssReportRemovals(agRoot,
2006 onePortContext,
2007 agFALSE
2008 );
2009
2010 onePortContext->discoveryOptions = AG_SA_DISCOVERY_OPTION_FULL_START;
2011 onePortContext->DiscoveryRdyGiven = agFALSE;
2012 onePortContext->SeenLinkUp = agFALSE;
2013
2014#endif /* INITIATOR_DRIVER */
2015
2016
2017
2018 /* for hotplug */
2019
2020 /* find a PhyID and reset for portContext in tdssSASShared */
2021 for(i=0;i<TD_MAX_NUM_PHYS;i++)
2022 {
2023 if (onePortContext->PhyIDList[i] == agTRUE)
2024 {
2025 tdsaAllShared->Ports[i].portContext = agNULL;
2026 }
2027 }
2028
2029 /* reset PhyIDList in portcontext */
2030 for(i=0;i<TD_MAX_NUM_PHYS;i++)
2031 {
2032 onePortContext->PhyIDList[i] = agFALSE;
2033 }
2034
2035// onePortContext->tiPortalContext = agNULL;
2036// onePortContext->agRoot = agNULL;
2037 onePortContext->agPortContext = agNULL;
2038 onePortContext->valid = agFALSE;
2039
2040 TI_DBG4(("ossaHwCB: pid %d count %d\n", onePortContext->id, onePortContext->Count));
2041
2042 /* resets the number of devices in onePortContext */
2043 onePortContext->Count = 0;
2044 onePortContext->discovery.pendingSMP = 0;
2045 onePortContext->discovery.SeenBC = agFALSE;
2046
2047
2048 /*
2049 put all devices belonging to the onePortContext
2050 back to the free link
2051 */
2052
2054 TDLIST_DEQUEUE_THIS(&(onePortContext->MainLink));
2055 TDLIST_ENQUEUE_AT_TAIL(&(onePortContext->FreeLink), &(tdsaPortContext->FreeLink));
2057 }
2058 else
2059 {
2060 TI_DBG1(("ossaHwCB: NULL osDATA: wrong\n"));
2061 }
2062 TI_DBG6(("ossaHwCB: PORT_INVALID end\n"));
2063 break;
2064 }
2065#endif /* REMOVED */
2066
2068 {
2069 PhyID = TD_GET_PHY_ID(eventParm1);
2070 PortState = TD_GET_PORT_STATE(eventParm1);
2071 TI_DBG1(("ossaHwCB: BROADCAST_CHANGE from PhyID %d\n", PhyID));
2072
2073 if (PortState == OSSA_PORT_INVALID)
2074 {
2075 TI_DBG1(("ossaHwCB: Wrong port state with BROADCAST_CHANGE\n"));
2076 smTraceFuncExit(hpDBG_VERY_LOUD, 'q', "Y2");
2077 return;
2078 }
2079 /* saHwEventAck() */
2080 eventSource.agPortContext = agPortContext;
2081 eventSource.event = OSSA_HW_EVENT_BROADCAST_CHANGE;
2082 /* phy ID */
2083 eventSource.param = PhyID;
2084 HwAckSatus = saHwEventAck(
2085 agRoot,
2086 agNULL, /* agContext */
2087 0,
2088 &eventSource, /* agsaEventSource_t */
2089 0,
2090 0
2091 );
2092 TI_DBG4(("ossaHwCB: calling saHwEventAck\n"));
2093
2094 if ( HwAckSatus != AGSA_RC_SUCCESS)
2095 {
2096 TI_DBG1(("ossaHwCB: failing in saHwEventAck; status %d\n", HwAckSatus));
2097 smTraceFuncExit(hpDBG_VERY_LOUD, 'r', "Y2");
2098 return;
2099 }
2100 if (tIsSPC12SATA(agRoot))
2101 {
2102 TI_DBG1(("ossaHwCB: BROADCAST_CHANGE received for SATA Controller\n"));
2103 break;
2104 }
2105 /*
2106 * incremental discovery is to be tested and debugged further
2107 */
2108
2109 /* just for testing discovery abort */
2110#ifdef FDS_DM_NO
2111 if (agPortContext == agNULL)
2112 {
2113 /* this case happens when broadcase is received first before the link up */
2114 TI_DBG2(("ossaHwCB: agPortContext is NULL. Do nothing.\n"));
2115 }
2116 else if ( agPortContext->osData != agNULL)
2117 {
2118 dmRoot = &(tdsaAllShared->dmRoot);
2119 onePortContext = (tdsaPortContext_t *)agPortContext->osData;
2120 dmPortContext = &(onePortContext->dmPortContext);
2121
2122 dmQueryDiscovery(dmRoot, dmPortContext);
2123// dmDiscover(dmRoot, dmPortContext, DM_DISCOVERY_OPTION_ABORT);
2124
2125#if 1
2126 if (onePortContext->DMDiscoveryState == dmDiscInProgress)
2127 {
2128 dmDiscover(dmRoot, dmPortContext, DM_DISCOVERY_OPTION_ABORT);
2129 }
2130#endif /* 1 */
2131
2132 TI_DBG2(("ossaHwCB: portcontext pid %d\n", onePortContext->id));
2133 if (onePortContext->DMDiscoveryState == dmDiscCompleted ||
2134 onePortContext->DMDiscoveryState == dmDiscAborted ||
2135 onePortContext->DMDiscoveryState == dmDiscAbortInvalid )
2136 {
2137 TI_DBG1(("ossaHwCB: BROADCAST_CHANGE; calling dmNotifyBC and does incremental discovery\n"));
2138 dmNotifyBC(dmRoot, dmPortContext, OSSA_HW_EVENT_BROADCAST_CHANGE);
2139 dmDiscover(dmRoot, dmPortContext, DM_DISCOVERY_OPTION_INCREMENTAL_START);
2140
2141 }
2142 else
2143 {
2144 TI_DBG2(("ossaHwCB: pid %d BROADCAST_CHANGE; updating SeenBC. calling dmNotifyBC\n", onePortContext->id));
2145 dmNotifyBC(dmRoot, dmPortContext, OSSA_HW_EVENT_BROADCAST_CHANGE);
2146 }
2147 }
2148 else
2149 {
2150 TI_DBG1(("ossaHwCB: BROADCAST_CHANGE NULL osDATA wrong !!! \n"));
2151 }
2152
2153
2154#endif /* FDS_DM_NO */
2155
2156#ifdef FDS_DM
2157 if (agPortContext == agNULL)
2158 {
2159 /* this case happens when broadcase is received first before the link up */
2160 TI_DBG2(("ossaHwCB: agPortContext is NULL. Do nothing.\n"));
2161 }
2162 else if ( agPortContext->osData != agNULL)
2163 {
2164 dmRoot = &(tdsaAllShared->dmRoot);
2165 onePortContext = (tdsaPortContext_t *)agPortContext->osData;
2166 dmPortContext = &(onePortContext->dmPortContext);
2167
2168 dmQueryDiscovery(dmRoot, dmPortContext);
2169
2170 TI_DBG2(("ossaHwCB: portcontext pid %d\n", onePortContext->id));
2171 if (onePortContext->DMDiscoveryState == dmDiscCompleted ||
2172 onePortContext->DMDiscoveryState == dmDiscAborted ||
2173 onePortContext->DMDiscoveryState == dmDiscAbortInvalid )
2174 {
2175 TI_DBG1(("ossaHwCB: BROADCAST_CHANGE; calling dmNotifyBC and does incremental discovery, pid %d\n", onePortContext->id));
2176 onePortContext->DiscoveryState = ITD_DSTATE_STARTED;
2177 dmNotifyBC(dmRoot, dmPortContext, OSSA_HW_EVENT_BROADCAST_CHANGE);
2178 dmDiscover(dmRoot, dmPortContext, DM_DISCOVERY_OPTION_INCREMENTAL_START);
2179
2180 }
2181 else if (onePortContext->DMDiscoveryState == dmDiscFailed )
2182 {
2183 TI_DBG1(("ossaHwCB: dmDiscFailed; pid %d BROADCAST_CHANGE; updating SeenBC. calling dmNotifyBC\n", onePortContext->id));
2184 onePortContext->DiscFailNSeenBC = agTRUE;
2185 dmNotifyBC(dmRoot, dmPortContext, OSSA_HW_EVENT_BROADCAST_CHANGE);
2186 }
2187 else
2188 {
2189 TI_DBG2(("ossaHwCB: pid %d BROADCAST_CHANGE; updating SeenBC. calling dmNotifyBC\n", onePortContext->id));
2190 dmNotifyBC(dmRoot, dmPortContext, OSSA_HW_EVENT_BROADCAST_CHANGE);
2191 }
2192 }
2193 else
2194 {
2195 TI_DBG1(("ossaHwCB: BROADCAST_CHANGE NULL osDATA wrong !!! \n"));
2196 }
2197#endif /* FDS_DM */
2198
2199#ifdef FDS_DM_WORKED
2200 if (agPortContext == agNULL)
2201 {
2202 /* this case happens when broadcase is received first before the link up */
2203 TI_DBG2(("ossaHwCB: agPortContext is NULL. Do nothing.\n"));
2204 }
2205 else if ( agPortContext->osData != agNULL)
2206 {
2207 onePortContext = (tdsaPortContext_t *)agPortContext->osData;
2208 TI_DBG2(("ossaHwCB: calling dmNotifyBC\n"));
2209 dmRoot = &(tdsaAllShared->dmRoot);
2210 dmPortContext = &(onePortContext->dmPortContext);
2211 dmNotifyBC(dmRoot, dmPortContext, OSSA_HW_EVENT_BROADCAST_CHANGE);
2212 }
2213#endif /* FDS_DM_WORKED */
2214
2215#ifndef FDS_DM
2216#ifdef INITIATOR_DRIVER
2217 if (agPortContext == agNULL)
2218 {
2219 /* this case happens when broadcase is received first before the link up */
2220 TI_DBG2(("ossaHwCB: agPortContext is NULL. Do nothing.\n"));
2221 }
2222 else if ( agPortContext->osData != agNULL)
2223 {
2224 onePortContext = (tdsaPortContext_t *)agPortContext->osData;
2225 TI_DBG2(("ossaHwCB: portcontext pid %d\n", onePortContext->id));
2226 if (onePortContext->DiscoveryState == ITD_DSTATE_COMPLETED)
2227 {
2228 TI_DBG1(("ossaHwCB: BROADCAST_CHANGE; does incremental discovery\n"));
2229 onePortContext->DiscoveryState = ITD_DSTATE_NOT_STARTED;
2230 onePortContext->discoveryOptions = AG_SA_DISCOVERY_OPTION_INCREMENTAL_START;
2231 /* processed broadcast change */
2232 onePortContext->discovery.SeenBC = agFALSE;
2233#ifdef TD_DISCOVER
2234 if (tdsaAllShared->ResetInDiscovery != 0 &&
2235 onePortContext->discovery.ResetTriggerred == agTRUE)
2236 {
2237 TI_DBG2(("ossaHwCB: tdsaBCTimer\n"));
2238 tdsaBCTimer(tiRoot, onePortContext);
2239 }
2240 else
2241 {
2242 tdsaDiscover(
2243 tiRoot,
2244 onePortContext,
2245 TDSA_DISCOVERY_TYPE_SAS,
2246 TDSA_DISCOVERY_OPTION_INCREMENTAL_START
2247 );
2248 }
2249#else
2250 saDiscover(agRoot,
2251 agPortContext,
2253 onePortContext->discoveryOptions);
2254#endif
2255 }
2256 else
2257 {
2258 TI_DBG2(("ossaHwCB: pid %d BROADCAST_CHANGE; updating SeenBC. Do nothing.\n", onePortContext->id));
2259 onePortContext->discovery.SeenBC = agTRUE;
2260 }
2261 }
2262 else
2263 {
2264 TI_DBG1(("ossaHwCB: BROADCAST_CHANGE NULL osDATA wrong !!! \n"));
2265 }
2266#endif
2267#endif /* ifndef FDS_DM */
2268
2269 break;
2270 }
2271
2273 {
2274 PhyID = TD_GET_PHY_ID(eventParm1);
2275 PortState = TD_GET_PORT_STATE(eventParm1);
2276
2277 /*
2278 1. tear town the portcontext just like link down last phy down
2279 2. ack
2280 port state must be invalid
2281 */
2282
2283 TI_DBG2(("ossaHwCB: OSSA_HW_EVENT_PORT_RECOVERY_TIMER_TMO\n"));
2284
2285 if (PortState == OSSA_PORT_VALID)
2286 {
2287 TI_DBG1(("ossaHwCB: Wrong port state\n"));
2288 smTraceFuncExit(hpDBG_VERY_LOUD, 's', "Y2");
2289 return;
2290 }
2291
2292 TD_ASSERT(agPortContext, "agPortContext");
2293 if ( agPortContext->osData == agNULL)
2294 { /* if */
2295 /* PortContext must exit at this point */
2296 TI_DBG1(("ossaHwCB: NULL portalcontext. Error. Can't be NULL\n"));
2297 }
2298 else
2299 {
2300 onePortContext = (tdsaPortContext_t *)agPortContext->osData;
2301 onePortContext->valid = agFALSE;
2302
2303 TI_DBG1(("ossaHwCB: tiPortStopped pid %d\n", onePortContext->id));
2304#ifdef INITIATOR_DRIVER
2305 /* notifying link down (all links belonging to a port are down) */
2307 tiRoot,
2309 tiSuccess,
2310 (void *)onePortContext->tiPortalContext
2311 );
2312#endif
2313
2314#ifdef TARGET_DRIVER
2316 tiRoot,
2318 tiSuccess,
2319 (void *)onePortContext->tiPortalContext
2320 );
2321
2322#endif
2323
2324#ifdef INITIATOR_DRIVER
2325 tdssReportRemovals(agRoot,
2326 onePortContext,
2327 agFALSE
2328 );
2329#endif
2330#ifdef TARGET_DRIVER
2331 ttdssReportRemovals(agRoot,
2332 onePortContext,
2333 agFALSE
2334 );
2335
2336#endif
2337 /* find a PhyID and reset for portContext in tdssSASShared */
2338 for(i=0;i<TD_MAX_NUM_PHYS;i++)
2339 {
2340 if (onePortContext->PhyIDList[i] == agTRUE)
2341 {
2342 tdsaAllShared->Ports[i].portContext = agNULL;
2343 }
2344 }
2345 /* portcontext is removed from MainLink to FreeLink in tdssReportRemovals or
2346 ossaDeregisterDeviceHandleCB
2347 */
2348 }
2349
2350 break;
2351 }
2352
2354 {
2355 /*
2356 clean up
2357 */
2358 PhyID = TD_GET_PHY_ID(eventParm1);
2359 PortState = TD_GET_PORT_STATE(eventParm1);
2360
2361 TI_DBG2(("ossaHwCB: OSSA_HW_EVENT_PORT_RESET_TIMER_TMO\n"));
2362
2363 if (PortState == OSSA_PORT_VALID)
2364 {
2365 TI_DBG1(("ossaHwCB: Wrong port state\n"));
2366 smTraceFuncExit(hpDBG_VERY_LOUD, 't', "Y2");
2367 return;
2368 }
2369
2370 if (agPortContext == agNULL)
2371 {
2372 TI_DBG1(("ossaHwCB: agPortContext is NULL, error\n"));
2373 smTraceFuncExit(hpDBG_VERY_LOUD, 'u', "Y2");
2374 return;
2375 }
2376
2377 if ( agPortContext->osData == agNULL)
2378 { /* if */
2379 /* PortContext must exit at this point */
2380 TI_DBG1(("ossaHwCB: NULL portalcontext. Error. Can't be NULL\n"));
2381 }
2382 else
2383 {
2384 onePortContext = (tdsaPortContext_t *)agPortContext->osData;
2385 onePortContext->valid = agFALSE;
2386
2387 TI_DBG1(("ossaHwCB: pid %d tiPortStopped\n", onePortContext->id));
2388
2389#ifdef INITIATOR_DRIVER
2390 /* notifying link down (all links belonging to a port are down) */
2392 tiRoot,
2394 tiSuccess,
2395 (void *)onePortContext->tiPortalContext
2396 );
2397#endif
2398
2399#ifdef TARGET_DRIVER
2401 tiRoot,
2403 tiSuccess,
2404 (void *)onePortContext->tiPortalContext
2405 );
2406
2407#endif
2408
2409#ifdef INITIATOR_DRIVER
2410 tdssReportRemovals(agRoot,
2411 onePortContext,
2412 agFALSE
2413 );
2414#endif
2415#ifdef TARGET_DRIVER
2416 ttdssReportRemovals(agRoot,
2417 onePortContext,
2418 agFALSE
2419 );
2420
2421#endif
2422 /* find a PhyID and reset for portContext in tdssSASShared */
2423 for(i=0;i<TD_MAX_NUM_PHYS;i++)
2424 {
2425 if (onePortContext->PhyIDList[i] == agTRUE)
2426 {
2427 tdsaAllShared->Ports[i].portContext = agNULL;
2428 }
2429 }
2430 /* portcontext is removed from MainLink to FreeLink in tdssReportRemovals or
2431 ossaDeregisterDeviceHandleCB
2432 */
2433 }
2434
2435 break;
2436 }
2437
2439 {
2440#ifdef INITIATOR_DRIVER
2441 tiIORequest_t *currentTaskTag = agNULL;
2442#endif
2443
2444#ifdef REMOVED
2445 smRoot_t *smRoot = &(tdsaAllShared->smRoot);
2446#endif
2447
2448 PhyID = TD_GET_PHY_ID(eventParm1);
2449 PortState = TD_GET_PORT_STATE(eventParm1);
2450 IDframe = (agsaSASIdentify_t *)eventParm3;
2451
2452 /* completes for Lun Reset and Target reset for directly attached SATA */
2453 /* completes for Target reset for directly attached SAS */
2454
2455 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PORT_RESET_COMPLETE, phyID %d\n", PhyID));
2456
2457 /* error check */
2458 if (PortState == OSSA_PORT_INVALID)
2459 {
2460 TI_DBG1(("ossaHwCB: Wrong port state\n"));
2461 smTraceFuncExit(hpDBG_VERY_LOUD, 'v', "Y2");
2462 return;
2463 }
2464
2465 if (agPortContext == agNULL)
2466 {
2467 TI_DBG1(("ossaHwCB: agPortContext null, wrong\n"));
2468 smTraceFuncExit(hpDBG_VERY_LOUD, 'w', "Y2");
2469 return;
2470 }
2471 if ( agPortContext->osData == agNULL)
2472 {
2473 TI_DBG1(("ossaHwCB: agPortContext->osData null, wrong\n"));
2474 smTraceFuncExit(hpDBG_VERY_LOUD, 'x', "Y2");
2475 return;
2476 }
2477
2478 /* find a corresponding portcontext */
2479 onePortContext = (tdsaPortContext_t *)agPortContext->osData;
2480
2481 if (onePortContext == agNULL)
2482 {
2483 TI_DBG1(("ossaHwCB: oneportContext is NULL; wrong??????\n"));
2484 }
2485 else
2486 {
2487 TI_DBG1(("ossaHwCB: oneportContext %p pid %d\n", onePortContext, onePortContext->id));
2488 onePortContext->valid = agTRUE;
2489#ifdef INITIATOR_DRIVER
2490#ifdef REMOVED
2491 if (tdsaAllShared->ResetInDiscovery != 0)
2492 {
2493 DeviceListList = tdsaAllShared->MainDeviceList.flink;
2494 while (DeviceListList != &(tdsaAllShared->MainDeviceList))
2495 {
2496 oneDeviceData = TDLIST_OBJECT_BASE(tdsaDeviceData_t, MainLink, DeviceListList);
2497 if (oneDeviceData->tdPortContext != onePortContext)
2498 {
2499 DeviceListList = DeviceListList->flink;
2500 }
2501 else
2502 {
2503 found = agTRUE;
2504 break;
2505 }
2506 } /* while */
2507 if (found == agTRUE)
2508 {
2509 /* applied to only SATA devices */
2510 if (DEVICE_IS_SATA_DEVICE(oneDeviceData) || DEVICE_IS_STP_TARGET(oneDeviceData))
2511 {
2512 #ifdef FDS_SM
2513 tdIDStart(tiRoot, agRoot, smRoot, oneDeviceData, onePortContext);
2514 #else
2515 tdssRetrySATAID(tiRoot, oneDeviceData);
2516 #endif
2517 }
2518 }
2519 else
2520 {
2521 TI_DBG1(("ossaHwCB: no onedevicedata found!\n"));
2522 }
2523 }
2524#endif
2525 /* completed TM */
2526 DeviceListList = tdsaAllShared->MainDeviceList.flink;
2527 while (DeviceListList != &(tdsaAllShared->MainDeviceList))
2528 {
2529 oneDeviceData = TDLIST_OBJECT_BASE(tdsaDeviceData_t, MainLink, DeviceListList);
2530 if ( oneDeviceData == agNULL)
2531 {
2532 TI_DBG1(("ossaHwCB: oneDeviceData is NULL!!!\n"));
2533 return;
2534 }
2535
2536 if ( (oneDeviceData->tdPortContext == onePortContext) &&
2537 (oneDeviceData->directlyAttached == agTRUE) &&
2538 (oneDeviceData->phyID == PhyID) )
2539 {
2540 TI_DBG1(("ossaHwCB: found the onePortContext and oneDeviceData!!\n"));
2541
2542 currentTaskTag = (tiIORequest_t *)oneDeviceData->agDeviceResetContext.osData;
2543 if (currentTaskTag != agNULL )
2544 {
2545 /* applied to only SATA devices */
2546 if (DEVICE_IS_SATA_DEVICE(oneDeviceData))
2547 {
2548 tdIORequestBody_t *SMTMtdIORequestBody = agNULL;
2549 SMTMtdIORequestBody = (tdIORequestBody_t *)currentTaskTag->tdData;
2550 if (SMTMtdIORequestBody != agNULL)
2551 {
2552 /* free the SMTMtdIORequestBody memory allocated in tiINITaskManagement function */
2554 tiRoot,
2555 SMTMtdIORequestBody->IOType.InitiatorTMIO.osMemHandle,
2556 sizeof(tdIORequestBody_t)
2557 );
2558 }
2559 else
2560 {
2561 TI_DBG1(("ossaHwCB: SATA device but SMTMtdIORequestBody is NULL!!!\n"));
2562 }
2563 }
2564 /* set device state to DS_OPERATIONAL */
2565 saSetDeviceState(agRoot,
2566 agNULL,
2567 tdsaRotateQnumber(tiRoot, oneDeviceData),
2568 oneDeviceData->agDevHandle,
2570 );
2571 /* notify OS layer to complete the TMF IO */
2573 agNULL,
2574 agNULL,
2576 tiTMOK,
2577 currentTaskTag
2578 );
2579
2580 }
2581 else
2582 {
2583 TI_DBG1(("ossaHwCB: currentTaskTag is NULL!!!\n"));
2584 }
2585
2586 break;
2587 }
2588 else
2589 {
2590 DeviceListList = DeviceListList->flink;
2591 }
2592 }
2593#endif
2594 }
2595 break;
2596 }
2598 {
2599 PhyID = TD_GET_PHY_ID(eventParm1);
2600 PortState = TD_GET_PORT_STATE(eventParm1);
2601
2602 TI_DBG2(("ossaHwCB: OSSA_HW_EVENT_BROADCAST_ASYNCH_EVENT\n"));
2603 if (tIsSPC12SATA(agRoot))
2604 {
2605 TI_DBG1(("ossaHwCB: BROADCAST_ASYNCH_EVENT received for SATA Controller\n"));
2606 break;
2607 }
2608 if (agPortContext == agNULL)
2609 {
2610 TI_DBG1(("ossaHwCB: Error!!! agPortContext is NULL %d\n", PhyID));
2611 smTraceFuncExit(hpDBG_VERY_LOUD, 'y', "Y2");
2612 return;
2613 }
2614 onePortContext = (tdsaPortContext_t *)agPortContext->osData;
2615 if (onePortContext == agNULL)
2616 {
2617 TI_DBG1(("ossaHwCB: Error!!! onePortContext is NULL %d\n", PhyID));
2618 smTraceFuncExit(hpDBG_VERY_LOUD, 'z', "Y2");
2619 return;
2620 }
2621
2622 if (onePortContext->tiPortalContext != agNULL)
2623 {
2624#if 0
2626 tiRoot,
2627 onePortContext->tiPortalContext,
2628 agNULL,
2631 agNULL
2632 );
2633#endif
2634 }
2635 else
2636 {
2637 TI_DBG1(("ossaHwCB: Error!!! onePortContext->tiPortalContext is NULL\n"));
2638 smTraceFuncExit(hpDBG_VERY_LOUD, 'A', "Y2");
2639 return;
2640 }
2641
2642 break;
2643 }
2644
2646 {
2647
2648 PhyID = TD_GET_PHY_ID(eventParm1);
2649 if (agPortContext == agNULL)
2650 {
2651 TI_DBG1(("ossaHwCB: Error!!! agPortContext is NULL %d\n", PhyID));
2652 smTraceFuncExit(hpDBG_VERY_LOUD, 'B', "Y2");
2653 return;
2654 }
2655
2656 LinkRate = TD_GET_LINK_RATE(eventParm1);
2657 PortState = TD_GET_PORT_STATE(eventParm1);
2658 agDevHandle = agNULL;
2659 IDframe = (agsaSASIdentify_t *)eventParm3;
2660
2661 /*
2662 1. this is like link up
2663 2. handle the phyID
2664 3. no trigger discovery (broadcast change will do this later)
2665 port state must be valid
2666 */
2667
2668 TI_DBG2(("ossaHwCB: OSSA_HW_EVENT_PORT_RECOVER, phyID %d\n", PhyID));
2669
2670 if (PortState == OSSA_PORT_INVALID)
2671 {
2672 TI_DBG1(("ossaHwCB: Wrong port state\n"));
2673 smTraceFuncExit(hpDBG_VERY_LOUD, 'C', "Y2");
2674 return;
2675 }
2676 if ( agPortContext->osData == agNULL)
2677 { /* if */
2678 /* PortContext must exit at this point */
2679 TI_DBG1(("ossaHwCB: NULL portalcontext. Error. Can't be NULL\n"));
2680 }
2681 else
2682 {
2683 onePortContext = (tdsaPortContext_t *)agPortContext->osData;
2684 TI_DBG2(("ossaHwCB: pid %d\n", onePortContext->id));
2685 onePortContext->PhyIDList[PhyID] = agTRUE;
2686 onePortContext->valid = agTRUE;
2687 tdsaAllShared->Ports[PhyID].portContext = onePortContext;
2688 onePortContext->tiPortalContext = tdsaAllShared->Ports[PhyID].tiPortalContext;
2689 onePortContext->PortRecoverPhyID = PhyID;
2690 if (LinkRate == 0x01)
2691 {
2692 onePortContext->LinkRate = SAS_CONNECTION_RATE_1_5G;
2693 }
2694 else if (LinkRate == 0x02)
2695 {
2696 onePortContext->LinkRate = SAS_CONNECTION_RATE_3_0G;
2697 }
2698 else if (LinkRate == 0x04)
2699 {
2700 onePortContext->LinkRate = SAS_CONNECTION_RATE_6_0G;
2701 }
2702 else /* (LinkRate == 0x08) */
2703 {
2704 onePortContext->LinkRate = SAS_CONNECTION_RATE_12_0G;
2705 }
2706
2707 if (SA_IDFRM_GET_DEVICETTYPE(&onePortContext->sasIDframe) == SAS_END_DEVICE &&
2708 SA_IDFRM_IS_SSP_TARGET(&onePortContext->sasIDframe) )
2709 {
2710 TI_DBG2(("ossaHwCB: OSSA_HW_EVENT_PORT_RECOVER, sending spinup on phyID %d\n", PhyID));
2711 for (i=0;i<TD_MAX_NUM_NOTIFY_SPINUP;i++)
2712 {
2714 }
2715 }
2716
2717 /* transient period between link up and link down/port recovery */
2718 if (onePortContext->Transient == agTRUE && onePortContext->RegisteredDevNums == 0)
2719 {
2720 TI_DBG2(("ossaHwCB: OSSA_HW_EVENT_PORT_RECOVER transient period"));
2722 {
2723#ifdef INITIATOR_DRIVER
2724 agSASSubID.sasAddressHi = SA_IDFRM_GET_SAS_ADDRESSHI(IDframe);
2725 agSASSubID.sasAddressLo = SA_IDFRM_GET_SAS_ADDRESSLO(IDframe);
2726 agSASSubID.initiator_ssp_stp_smp = IDframe->initiator_ssp_stp_smp;
2727 agSASSubID.target_ssp_stp_smp = IDframe->target_ssp_stp_smp;
2729 onePortContext,
2730 agRoot,
2731 agDevHandle, /* agNULL */
2732 &agSASSubID,
2733 agTRUE,
2734 (bit8)PhyID,
2736 );
2737#endif
2738 }
2739 onePortContext->Transient = agFALSE;
2740 }
2741
2742
2743
2744
2745 }
2746 break;
2747 }
2748
2750 {
2751 PhyID = TD_GET_PHY_ID(eventParm1);
2752 PortState = TD_GET_PORT_STATE(eventParm1);
2753
2754 TI_DBG2(("ossaHwCB: BROADCAST_SES from PhyID %d; to be tested\n", PhyID));
2755 if (tIsSPC12SATA(agRoot))
2756 {
2757 TI_DBG1(("ossaHwCB: BROADCAST_SES received for SATA Controller\n"));
2758 break;
2759 }
2760 if (PortState == OSSA_PORT_INVALID)
2761 {
2762 TI_DBG1(("ossaHwCB: Wrong port state with BROADCAST_SES\n"));
2763 smTraceFuncExit(hpDBG_VERY_LOUD, 'D', "Y2");
2764 return;
2765 }
2766
2767 /*
2768 let os layer read payload
2769 */
2770 break;
2771 }
2773 {
2774 PhyID = TD_GET_PHY_ID(eventParm1);
2775 PortState = TD_GET_PORT_STATE(eventParm1);
2776
2777 TI_DBG2(("ossaHwCB: BROADCAST_EXP from PhyID %d; to be tested\n", PhyID));
2778 if (tIsSPC12SATA(agRoot))
2779 {
2780 TI_DBG1(("ossaHwCB: BROADCAST_EXP received for SATA Controller\n"));
2781 break;
2782 }
2783
2784 if (PortState == OSSA_PORT_INVALID)
2785 {
2786 TI_DBG1(("ossaHwCB: Wrong port state with BROADCAST_EXP\n"));
2787 smTraceFuncExit(hpDBG_VERY_LOUD, 'E', "Y2");
2788 return;
2789 }
2790 /* to-do:
2791 let os layer read payload
2792 */
2793 break;
2794 }
2795
2797 {
2798 PhyID = TD_GET_PHY_ID(eventParm1);
2799 PortState = TD_GET_PORT_STATE(eventParm1);
2800
2801 TI_DBG2(("ossaHwCB: HARD_RESET_RECEIVED from PhyID %d\n", PhyID));
2802
2803 if (PortState == OSSA_PORT_VALID && tiIS_SPC(agRoot))
2804 {
2805 TI_DBG1(("ossaHwCB: calling saPortControl and OSSA_PORT_VALID\n"));
2806 saPortControl(agRoot, agNULL, 0, agPortContext, AGSA_PORT_HARD_RESET, 0,0);
2807 }
2808 else if (PortState == OSSA_PORT_3RDPARTY_RESET && (tIsSPCV12or6G(agRoot)) )
2809 {
2810 TI_DBG1(("ossaHwCB: calling saPortControl and OSSA_PORT_3RDPARTY_RESET\n"));
2811 saPortControl(agRoot, agNULL, 0, agPortContext, AGSA_PORT_HARD_RESET, 0,0);
2812 }
2813 else /* PortState == OSSA_PORT_INVALID */
2814 {
2815 TI_DBG1(("ossaHwCB: Error. Port state is invalid\n"));
2816#ifdef REMOVED
2817 TI_DBG1(("ossaHwCB: calling saLocalPhyControl on phyID %d\n", PhyID));
2819#endif
2820 }
2821
2822 break;
2823 }
2824
2826 {
2827#ifdef TD_DEBUG_ENABLE
2828 agsaFatalErrorInfo_t *FatalError = (agsaFatalErrorInfo_t *)eventParm2;
2829#endif
2830 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_MALFUNCTION \n"));
2831 TI_DBG1(("ossaHwCB: errorInfo0 %8X errorInfo1 %8X\n", FatalError->errorInfo0, FatalError->errorInfo1));
2832 TI_DBG1(("ossaHwCB: errorInfo2 %8X errorInfo3 %8X\n", FatalError->errorInfo2, FatalError->errorInfo3));
2833 TI_DBG1(("ossaHwCB: regDumpBusBaseNum0 %8X regDumpOffset0 %8X regDumpLen0 %8X\n", FatalError->regDumpBusBaseNum0, FatalError->regDumpOffset0, FatalError->regDumpLen0));
2834 TI_DBG1(("ossaHwCB: regDumpBusBaseNum1 %8X regDumpOffset1 %8X regDumpLen1 %8X\n", FatalError->regDumpBusBaseNum1, FatalError->regDumpOffset1, FatalError->regDumpLen1));
2835
2836
2837 if (eventParm1 == agTRUE)
2838 {
2839 TI_DBG1(("ossaHwCB: fatal error\n"));
2840 /* port panic */
2842 tiRoot,
2844 0,
2845 agNULL
2846 );
2847 }
2848 else
2849 {
2850 TI_DBG1(("ossaHwCB: non-fatal error \n"));
2851 }
2852 break;
2853 }
2854
2856 {
2857 PhyID = TD_GET_PHY_ID(eventParm1);
2858 PortState = TD_GET_PORT_STATE(eventParm1);
2859
2860 TI_DBG2(("ossaHwCB: OSSA_HW_EVENT_ID_FRAME_TIMEOUT from PhyID %d\n", PhyID));
2861
2862 if (PortState == OSSA_PORT_INVALID)
2863 {
2864 TI_DBG1(("ossaHwCB: Wrong port state with OSSA_HW_EVENT_ID_FRAME_TIMEOUT\n"));
2865 smTraceFuncExit(hpDBG_VERY_LOUD, 'F', "Y2");
2866 return;
2867 }
2868 break;
2869 }
2870
2872 {
2873 PhyID = TD_GET_PHY_ID(eventParm1);
2874 PortState = TD_GET_PORT_STATE(eventParm1);
2875 agPhyErrCountersPage = (agsaPhyErrCountersPage_t *)eventParm2;
2876 TI_DBG2(("ossaHwCB: OSSA_HW_EVENT_PHY_ERR_INVALID_DWORD\n"));
2877
2878 if (PortState == OSSA_PORT_INVALID)
2879 {
2880 TI_DBG1(("ossaHwCB: Wrong port state with OSSA_HW_EVENT_PHY_ERR_INVALID_DWORD\n"));
2881 smTraceFuncExit(hpDBG_VERY_LOUD, 'G', "Y2");
2882 return;
2883 }
2884
2885 if (agPhyErrCountersPage != agNULL)
2886 {
2887 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_ERR_INVALID_DWORD from PhyID %d\n", PhyID));
2888 TI_DBG1(("ossaHwCB: invalidDword %d\n", agPhyErrCountersPage->invalidDword));
2889 }
2890 else
2891 {
2892 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_ERR_INVALID_DWORD: Error!!! eventParm2 is NULL\n"));
2893 }
2894
2895 /* saHwEventAck() */
2896 eventSource.agPortContext = agPortContext;
2897 eventSource.event = OSSA_HW_EVENT_PHY_ERR_INVALID_DWORD;
2898 /* phy ID */
2899 eventSource.param = PhyID;
2900 HwAckSatus = saHwEventAck(
2901 agRoot,
2902 agNULL, /* agContext */
2903 0,
2904 &eventSource, /* agsaEventSource_t */
2905 0,
2906 0
2907 );
2908 if ( HwAckSatus != AGSA_RC_SUCCESS)
2909 {
2910 TI_DBG1(("ossaHwCB: failing in saHwEventAck; status %d\n", HwAckSatus));
2911 smTraceFuncExit(hpDBG_VERY_LOUD, 'H', "Y2");
2912 return;
2913 }
2914
2915 break;
2916 }
2917
2919 {
2920 PhyID = TD_GET_PHY_ID(eventParm1);
2921 PortState = TD_GET_PORT_STATE(eventParm1);
2922 agPhyErrCountersPage = (agsaPhyErrCountersPage_t *)eventParm2;
2923 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_ERR_DISPARITY_ERROR\n"));
2924
2925 if (PortState == OSSA_PORT_INVALID)
2926 {
2927 TI_DBG1(("ossaHwCB: Wrong port state with OSSA_HW_EVENT_PHY_ERR_DISPARITY_ERROR\n"));
2928 smTraceFuncExit(hpDBG_VERY_LOUD, 'I', "Y2");
2929 return;
2930 }
2931
2932 if (agPhyErrCountersPage != agNULL)
2933 {
2934 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_ERR_DISPARITY_ERROR from PhyID %d\n", PhyID));
2935 TI_DBG1(("ossaHwCB: runningDisparityError %d\n", agPhyErrCountersPage->runningDisparityError));
2936 }
2937 else
2938 {
2939 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_ERR_DISPARITY_ERROR: Error!!! eventParm2 is NULL\n"));
2940 }
2941
2942 /* saHwEventAck() */
2943 eventSource.agPortContext = agPortContext;
2944 eventSource.event = OSSA_HW_EVENT_PHY_ERR_DISPARITY_ERROR;
2945 /* phy ID */
2946 eventSource.param = PhyID;
2947 HwAckSatus = saHwEventAck(
2948 agRoot,
2949 agNULL, /* agContext */
2950 0,
2951 &eventSource, /* agsaEventSource_t */
2952 0,
2953 0
2954 );
2955 if ( HwAckSatus != AGSA_RC_SUCCESS)
2956 {
2957 TI_DBG1(("ossaHwCB: failing in saHwEventAck; status %d\n", HwAckSatus));
2958 smTraceFuncExit(hpDBG_VERY_LOUD, 'J', "Y2");
2959 return;
2960 }
2961
2962 break;
2963 }
2964
2966 {
2967 PhyID = TD_GET_PHY_ID(eventParm1);
2968 PortState = TD_GET_PORT_STATE(eventParm1);
2969 agPhyErrCountersPage = (agsaPhyErrCountersPage_t *)eventParm2;
2970 TI_DBG2(("ossaHwCB: OSSA_HW_EVENT_PHY_ERR_CODE_VIOLATION\n"));
2971
2972 if (PortState == OSSA_PORT_INVALID)
2973 {
2974 TI_DBG1(("ossaHwCB: Wrong port state with OSSA_HW_EVENT_PHY_ERR_CODE_VIOLATION\n"));
2975 smTraceFuncExit(hpDBG_VERY_LOUD, 'K', "Y2");
2976 return;
2977 }
2978
2979 if (agPhyErrCountersPage != agNULL)
2980 {
2981 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_ERR_CODE_VIOLATION from PhyID %d\n", PhyID));
2982 TI_DBG1(("ossaHwCB: codeViolation %d\n", agPhyErrCountersPage->codeViolation));
2983 }
2984 else
2985 {
2986 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_ERR_CODE_VIOLATION: Error!!! eventParm2 is NULL\n"));
2987 }
2988
2989 /* saHwEventAck() */
2990 eventSource.agPortContext = agPortContext;
2991 eventSource.event = OSSA_HW_EVENT_PHY_ERR_CODE_VIOLATION;
2992 /* phy ID */
2993 eventSource.param = PhyID;
2994 HwAckSatus = saHwEventAck(
2995 agRoot,
2996 agNULL, /* agContext */
2997 0,
2998 &eventSource, /* agsaEventSource_t */
2999 0,
3000 0
3001 );
3002 if ( HwAckSatus != AGSA_RC_SUCCESS)
3003 {
3004 TI_DBG1(("ossaHwCB: failing in saHwEventAck; status %d\n", HwAckSatus));
3005 smTraceFuncExit(hpDBG_VERY_LOUD, 'L', "Y2");
3006 return;
3007 }
3008
3009 break;
3010 }
3011
3012#ifdef REMOVED
3013 case OSSA_HW_EVENT_LINK_ERR_CODE_VIOLATION1:
3014 {
3015 PhyID = eventParm1 & 0xFF;
3016 agPhyErrCountersPage = (agsaPhyErrCountersPage_t *)eventParm2;
3017
3018 if (agPhyErrCountersPage != agNULL)
3019 {
3020 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_LINK_ERR_CODE_VIOLATION1 from PhyID %d\n", PhyID));
3021 TI_DBG1(("ossaHwCB: invalidDword %d\n", agPhyErrCountersPage->invalidDword));
3022 TI_DBG1(("ossaHwCB: runningDisparityError %d\n", agPhyErrCountersPage->runningDisparityError));
3023 TI_DBG1(("ossaHwCB: codeViolation %d\n", agPhyErrCountersPage->codeViolation));
3024 TI_DBG1(("ossaHwCB: lostOfDwordSynch %d\n", agPhyErrCountersPage->lossOfDwordSynch));
3025 TI_DBG1(("ossaHwCB: phyResetProblem %d\n", agPhyErrCountersPage->phyResetProblem));
3026 TI_DBG1(("ossaHwCB: inboundCRCError %d\n", agPhyErrCountersPage->inboundCRCError));
3027 }
3028 else
3029 {
3030 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_LINK_ERR_CODE_VIOLATION1: Error!!! eventParm2 is NULL\n"));
3031 }
3032 break;
3033 }
3034#endif /* REMOVED */
3035
3037 {
3038 PhyID = TD_GET_PHY_ID(eventParm1);
3039 PortState = TD_GET_PORT_STATE(eventParm1);
3040 agPhyErrCountersPage = (agsaPhyErrCountersPage_t *)eventParm2;
3041 TI_DBG2(("ossaHwCB: OSSA_HW_EVENT_PHY_ERR_LOSS_OF_DWORD_SYNCH\n"));
3042
3043 if (PortState == OSSA_PORT_INVALID)
3044 {
3045 TI_DBG1(("ossaHwCB: Wrong port state with OSSA_HW_EVENT_PHY_ERR_LOSS_OF_DWORD_SYNCH\n"));
3046 smTraceFuncExit(hpDBG_VERY_LOUD, 'M', "Y2");
3047 return;
3048 }
3049
3050 if (agPhyErrCountersPage != agNULL)
3051 {
3052 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_ERR_LOSS_OF_DWORD_SYNCH from PhyID %d\n", PhyID));
3053 TI_DBG1(("ossaHwCB: lostOfDwordSynch %d\n", agPhyErrCountersPage->lossOfDwordSynch));
3054 }
3055 else
3056 {
3057 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_ERR_LOSS_OF_DWORD_SYNCH: Error!!! eventParm2 is NULL\n"));
3058 }
3059
3060 /* saHwEventAck() */
3061 eventSource.agPortContext = agPortContext;
3063 /* phy ID */
3064 eventSource.param = PhyID;
3065 HwAckSatus = saHwEventAck(
3066 agRoot,
3067 agNULL, /* agContext */
3068 0,
3069 &eventSource, /* agsaEventSource_t */
3070 0,
3071 0
3072 );
3073 if ( HwAckSatus != AGSA_RC_SUCCESS)
3074 {
3075 TI_DBG1(("ossaHwCB: failing in saHwEventAck; status %d\n", HwAckSatus));
3076 smTraceFuncExit(hpDBG_VERY_LOUD, 'N', "Y2");
3077 return;
3078 }
3079
3080 break;
3081 }
3082
3084 {
3085 PhyID = TD_GET_PHY_ID(eventParm1);
3086 PortState = TD_GET_PORT_STATE(eventParm1);
3087 agPhyErrCountersPage = (agsaPhyErrCountersPage_t *)eventParm2;
3088
3089 TI_DBG2(("ossaHwCB: OSSA_HW_EVENT_PHY_ERR_PHY_RESET_FAILED\n"));
3090
3091 if (PortState == OSSA_PORT_INVALID)
3092 {
3093 TI_DBG1(("ossaHwCB: Wrong port state with OSSA_HW_EVENT_PHY_ERR_PHY_RESET_FAILED\n"));
3094 smTraceFuncExit(hpDBG_VERY_LOUD, 'O', "Y2");
3095 return;
3096 }
3097
3098 if (agPhyErrCountersPage != agNULL)
3099 {
3100 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_ERR_PHY_RESET_FAILED from PhyID %d\n", PhyID));
3101 TI_DBG1(("ossaHwCB: phyResetProblem %d\n", agPhyErrCountersPage->phyResetProblem));
3102 }
3103 else
3104 {
3105 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_ERR_PHY_RESET_FAILED: Error!!! eventParm2 is NULL\n"));
3106 }
3107
3108 /* saHwEventAck() */
3109 eventSource.agPortContext = agPortContext;
3110 eventSource.event = OSSA_HW_EVENT_PHY_ERR_PHY_RESET_FAILED;
3111 /* phy ID */
3112 eventSource.param = PhyID;
3113 HwAckSatus = saHwEventAck(
3114 agRoot,
3115 agNULL, /* agContext */
3116 0,
3117 &eventSource, /* agsaEventSource_t */
3118 0,
3119 0
3120 );
3121 if ( HwAckSatus != AGSA_RC_SUCCESS)
3122 {
3123 TI_DBG1(("ossaHwCB: failing in saHwEventAck; status %d\n", HwAckSatus));
3124 smTraceFuncExit(hpDBG_VERY_LOUD, 'P', "Y2");
3125 return;
3126 }
3127
3128 break;
3129 }
3130
3131// #ifdef INITIATOR_DRIVER
3133 {
3134 pEncryptCBData = (agsaHWEventEncrypt_t *) eventParm2;
3135 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_ENCRYPTION: encryptOperation 0x%x\n",pEncryptCBData->encryptOperation));
3136 TI_DBG1(("ossaHwCB: event 0x%x eventParm1 0x%x eventParm2 %p eventParm3 %p\n",event,eventParm1,eventParm2,eventParm3));
3137
3138 /*
3139 * All events and status need to be translated from
3140 * SAS specific values to TISA specific values. This
3141 * is effectively a NOP, but the OS layer won't want to
3142 * look for SAS values.
3143 */
3144 if (pEncryptCBData->encryptOperation == OSSA_HW_ENCRYPT_KEK_UPDATE_AND_STORE)
3145 {
3146 TI_DBG1(("ossaHwCB: OSSA_HW_ENCRYPT_KEK_UPDATE_AND_STORE\n"));
3147 encryptEventData.encryptEvent = tiEncryptKekStore;
3148 }
3149 else if (pEncryptCBData->encryptOperation == OSSA_HW_ENCRYPT_KEK_UPDATE)
3150 {
3151 TI_DBG1(("ossaHwCB:OSSA_HW_ENCRYPT_KEK_UPDATE \n"));
3152 encryptEventData.encryptEvent = tiEncryptKekAdd;
3153 }
3154 else if (pEncryptCBData->encryptOperation == OSSA_HW_ENCRYPT_KEK_INVALIDTE)
3155 {
3156 TI_DBG1(("ossaHwCB:OSSA_HW_ENCRYPT_KEK_INVALIDTE \n"));
3157 /* none */
3158 }
3159 else if (pEncryptCBData->encryptOperation == OSSA_HW_ENCRYPT_DEK_UPDATE)
3160 {
3161 TI_DBG1(("ossaHwCB: OSSA_HW_ENCRYPT_DEK_UPDATE\n"));
3162 encryptEventData.encryptEvent = tiEncryptDekAdd;
3163 }
3164 else if (pEncryptCBData->encryptOperation == OSSA_HW_ENCRYPT_DEK_INVALIDTE)
3165 {
3166 TI_DBG1(("ossaHwCB: OSSA_HW_ENCRYPT_DEK_INVALIDTE\n"));
3167 encryptEventData.encryptEvent = tiEncryptDekInvalidate;
3168 }
3169 else if (pEncryptCBData->encryptOperation == OSSA_HW_ENCRYPT_OPERATOR_MANAGEMENT)
3170 {
3171 TI_DBG1(("ossaHwCB: OSSA_HW_ENCRYPT_OPERATOR_MANAGEMENT\n"));
3172 encryptEventData.encryptEvent = tiEncryptOperatorManagement;
3173 }
3174 else if (pEncryptCBData->encryptOperation == OSSA_HW_ENCRYPT_TEST_EXECUTE)
3175 {
3176 TI_DBG1(("ossaHwCB: OSSA_HW_ENCRYPT_TEST_EXECUTE\n"));
3177 encryptEventData.encryptEvent = tiEncryptSelfTest;
3178 encryptEventData.subEvent = pEncryptCBData->eq;
3179 }
3180 else
3181 {
3182 TI_DBG1(("ossaHwCB: unknown encryptOperation 0x%x\n",pEncryptCBData->encryptOperation));
3183 }
3184
3185 if (pEncryptCBData->status != OSSA_SUCCESS)
3186 {
3187 encryptStatus = tiError;
3188
3189 /* prints out status and error qualifier */
3190 TI_DBG1(("ossaHwCB: encrypt response status 0x%x error qualifier 0x%x\n", pEncryptCBData->status, pEncryptCBData->eq));
3191 }
3192 else
3193 {
3194 encryptStatus = tiSuccess;
3195 }
3196
3197 if (pEncryptCBData->encryptOperation == OSSA_HW_ENCRYPT_KEK_UPDATE_AND_STORE ||
3198 pEncryptCBData->encryptOperation == OSSA_HW_ENCRYPT_KEK_UPDATE )
3199 {
3200 /* returning new KEK index */
3201 encryptEventData.pData = pEncryptCBData->handle;
3202 }
3203 else
3204 {
3205 /* returning current KEK index or DEK index */
3206 encryptEventData.pData = pEncryptCBData->param;
3207 }
3208
3211 encryptStatus,
3212 &encryptEventData);
3213 break;
3214 }
3216 {
3217 securitySetModeStatus = eventParm1;
3218 pEncryptInfo = (agsaEncryptInfo_t *) eventParm2;
3219
3220 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_SECURITY_MODE\n"));
3221 if (securitySetModeStatus == OSSA_SUCCESS)
3222 {
3223 securityModeStatus = tiSuccess;
3224 }
3225 else
3226 {
3227 securityModeStatus = tiError;
3228 }
3229
3230 encryptEventData.encryptEvent = tiEncryptSetMode;
3231 /* process status to fill in subevent */
3232 /* See PM 4.26.12.6 */
3233 TI_DBG1(("ossaHwCB: pEncryptInfo->status 0x%x\n", pEncryptInfo->status));
3234 if ( pEncryptInfo->status == OSSA_SUCCESS)
3235 {
3236 encryptEventData.subEvent = tiNVRAMSuccess;
3237 }
3238 else if (pEncryptInfo->status == 0x24)
3239 {
3240 encryptEventData.subEvent = tiNVRAMNotFound;
3241 }
3242 else if (pEncryptInfo->status == 0x05 || pEncryptInfo->status == 0x20 || pEncryptInfo->status == 0x21)
3243 {
3244 encryptEventData.subEvent = tiNVRAMAccessTimeout;
3245 }
3246 else
3247 {
3248 encryptEventData.subEvent = tiNVRAMWriteFail;
3249 }
3250
3251 encryptEventData.pData = agNULL;
3254 securityModeStatus,
3255 &encryptEventData);
3256
3257 break;
3258 }
3259 case OSSA_HW_EVENT_MODE:
3260 {
3261 pModeEvent = (agsaHWEventMode_t *) eventParm2;
3262 pModePage = (bit32 *) pModeEvent->modePage;
3263
3264 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_MODE modePageOperation 0x%x status 0x%x modePageLen 0x%x\n",
3265 pModeEvent->modePageOperation, pModeEvent->status, pModeEvent->modePageLen));
3266
3267 if (pModeEvent->modePageOperation == agsaModePageSet)
3268 {
3269 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_MODE page code 0x%x error qualifier 0x%x\n", (eventParm1 & 0xFF), (eventParm1 >> 16)));
3272 pModeEvent->status,
3273 eventParm2);
3274 }
3275 else if (pModeEvent->modePageOperation == agsaModePageGet)
3276 {
3277 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_MODE error qualifier 0x%x\n", eventParm1));
3278 switch ((*pModePage) & 0xFF)
3279 {
3281 TI_DBG1(("ossaHwCB: AGSA_ENCRYPTION_GENERAL_CONFIG_PAGE 0x%x %p\n", pModeEvent->status,eventParm2));
3282 TI_DBG1(("ossaHwCB:modePageOperation 0x%x status 0x%x modePageLen 0x%x modePage %p context %p\n",
3283 pModeEvent->modePageOperation,
3284 pModeEvent->status,
3285 pModeEvent->modePageLen,
3286 pModeEvent->modePage,
3287 pModeEvent->context));
3290 pModeEvent->status,
3291 eventParm2);
3292 break;
3294 TI_DBG1(("ossaHwCB: AGSA_ENCRYPTION_DEK_CONFIG_PAGE 0x%x %p\n", pModeEvent->status,eventParm2));
3297 pModeEvent->status,
3298 eventParm2);
3299 break;
3301 TI_DBG1(("ossaHwCB: AGSA_ENCRYPTION_HMAC_CONFIG_PAGE 0x%x %p\n", pModeEvent->status,eventParm2));
3304 pModeEvent->status,
3305 eventParm2);
3306 break;
3308 TI_DBG1(("ossaHwCB: AGSA_ENCRYPTION_CONTROL_PARM_PAGE 0x%x %p\n", pModeEvent->status,eventParm2));
3309 /*
3310 * This page is directly related to tiCOMEncryptGetInfo() and
3311 * will be translated into a tiEncrytOperation for the OS layer.
3312 */
3313
3314 /* Fill out tiEncryptInfo_t */
3315 securityMode = *pModePage & 0x0F00 >> 8;
3316 cipherMode = *pModePage & 0xF000 >> 12;
3317
3318 if (securityMode == agsaEncryptSMA)
3319 {
3320 encryptInfo.securityCipherMode = TI_ENCRYPT_SEC_MODE_A;
3321 }
3322 else if (securityMode == agsaEncryptSMB)
3323 {
3324 encryptInfo.securityCipherMode = TI_ENCRYPT_SEC_MODE_B;
3325 }
3326 else
3327 {
3328 encryptInfo.securityCipherMode = TI_ENCRYPT_SEC_MODE_FACT_INIT;
3329 }
3330
3331 if (cipherMode == agsaEncryptCipherModeECB)
3332 {
3333 encryptInfo.securityCipherMode |= TI_ENCRYPT_ATTRIB_CIPHER_ECB;
3334 }
3335
3336 if (cipherMode == agsaEncryptCipherModeXTS)
3337 {
3338 encryptInfo.securityCipherMode |= TI_ENCRYPT_ATTRIB_CIPHER_XTS;
3339 }
3340
3341 /* How will subEvents be tracked? */
3342 encryptInfo.status = 0;
3343
3344 encryptInfo.sectorSize[0] = 512; /* DIF is allowed on 512 BPS SATA drives */
3345 encryptInfo.sectorSize[1] = 520;
3346 encryptInfo.sectorSize[2] = 528;
3347 encryptInfo.sectorSize[3] = 4104;
3348 encryptInfo.sectorSize[4] = 4168;
3349 encryptInfo.sectorSize[5] = 4232;
3350
3351 encryptEventData.encryptEvent = tiEncryptGetInfo;
3352 encryptEventData.subEvent = 0;
3353 encryptEventData.pData = &encryptInfo;
3354
3357 pModeEvent->status,
3358 &encryptEventData);
3359 break;
3361 TI_DBG1(("ossaHwCB: AGSA_SAS_PROTOCOL_TIMER_CONFIG_PAGE 0x%x %p\n", pModeEvent->status,eventParm2));
3362
3363#ifdef IOCTL_INTERRUPT_TIME_CONFIG
3366 pModeEvent->status,
3367 eventParm2
3368 );
3369#endif /* IOCTL_INTERRUPT_TIME_CONFIG */
3370
3371 /*ostiPortEvent(tiRoot,
3372 tiModePageOperation,
3373 pModeEvent->status,
3374 &encryptEventData);*/
3375 break;
3377 TI_DBG1(("ossaHwCB: AGSA_INTERRUPT_CONFIGURATION_PAGE 0x%x %p\n", pModeEvent->status,eventParm2));
3378
3379#ifdef IOCTL_INTERRUPT_TIME_CONFIG
3382 pModeEvent->status,
3383 eventParm2
3384 );
3385#endif /* IOCTL_INTERRUPT_TIME_CONFIG */
3386
3387 break;
3388 default:
3389 TI_DBG1(("ossaHwCB: Unknown Mode Event %x\n", *pModePage));
3390 break;
3391 }
3392
3393 }
3394 else
3395 {
3396 TI_DBG1(("ossaHwCB: Unknown modePageOperation %x\n", pModeEvent->modePageOperation));
3397 }
3398 break;
3399 }
3400
3401// #endif /* INITIATOR_DRIVER */
3402
3403#ifdef REMOVED
3404 case OSSA_HW_EVENT_PHY_UNRECOVERABLE_ERROR:
3405 {
3406 PhyID = TD_GET_PHY_ID(eventParm1);
3407 PortState = TD_GET_PORT_STATE(eventParm1);
3408
3409 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_PHY_UNRECOVERABLE_ERROR\n"));
3410
3411 if (PortState == OSSA_PORT_INVALID)
3412 {
3413 TI_DBG1(("ossaHwCB: INVALID port state\n"));
3414 }
3415 else
3416 {
3417 TI_DBG1(("ossaHwCB: VALID port state\n"));
3418 }
3419 break;
3420 }
3421#endif /* REMOVED */
3423 {
3424 TI_DBG1(("ossaHwCB: OSSA_HW_EVENT_OPEN_RETRY_BACKOFF_THR_ADJUSTED\n"));
3425 break;
3426 }
3427
3428 default:
3429 {
3430 TI_DBG1(("ossaHwCB: default error (0x%X)!!!!!\n",event));
3431 break;
3432 }
3433 }
3434
3435 smTraceFuncExit(hpDBG_VERY_LOUD, 'R', "Y2");
3436 return;
3437}
3438
3440 agsaRoot_t *agRoot,
3441 agsaContext_t *agContext,
3442 agsaPortContext_t *agPortContext,
3443 bit32 portOperation,
3444 bit32 status)
3445{
3446 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
3447 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
3448 tdsaPortContext_t *onePortContext = agNULL;
3449
3450 TI_DBG6(("ossaPortControlCB: start\n"));
3451
3453 if (portOperation == AGSA_PORT_SET_SMP_PHY_WIDTH)
3454 {
3455 TI_DBG1(("ossaPortControlCB: portOperation AGSA_PORT_SET_SMP_PHY_WIDTH\n"));
3456 }
3457 else if (portOperation == AGSA_PORT_SET_PORT_RECOVERY_TIME)
3458 {
3459 TI_DBG1(("ossaPortControlCB: portOperation AGSA_PORT_SET_PORT_RECOVERY_TIME\n"));
3460 }
3461 else if (portOperation == AGSA_PORT_IO_ABORT)
3462 {
3463 TI_DBG1(("ossaPortControlCB: portOperation AGSA_PORT_IO_ABORT\n"));
3464 /* code is here because disocvery failed
3465 deregister all targets. Then, later call discovery if broacast is seen in ossaDeregisterDeviceHandleCB.
3466 */
3467 onePortContext = (tdsaPortContext_t *)agPortContext->osData;
3468 if (onePortContext == agNULL)
3469 {
3470 TI_DBG1(("ossaPortControlCB: onePortContext is NULL\n"));
3471 return;
3472 }
3473 /* qqqqq deregister all devices */
3474 tdsaDeregisterDevicesInPort(tiRoot, onePortContext);
3475
3476 }
3477 else if (portOperation == AGSA_PORT_SET_PORT_RESET_TIME)
3478 {
3479 TI_DBG1(("ossaPortControlCB: portOperation AGSA_PORT_SET_PORT_RESET_TIME\n"));
3480 }
3481 else if (portOperation == AGSA_PORT_HARD_RESET)
3482 {
3483 TI_DBG1(("ossaPortControlCB: portOperation AGSA_PORT_HARD_RESET\n"));
3484 }
3485 else if (portOperation == AGSA_PORT_CLEAN_UP)
3486 {
3487 TI_DBG1(("ossaPortControlCB: portOperation AGSA_PORT_CLEAN_UP\n"));
3488 }
3489 else if (portOperation == AGSA_STOP_PORT_RECOVERY_TIMER)
3490 {
3491 TI_DBG1(("ossaPortControlCB: portOperation AGSA_STOP_PORT_RECOVERY_TIMER\n"));
3492 }
3493 else
3494 {
3495 TI_DBG1(("ossaPortControlCB: undefined portOperation %d\n", portOperation));
3496 }
3497
3498 TI_DBG1(("ossaPortControlCB: status %d\n", status));
3499
3500 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Y3");
3501 return;
3502}
3503
3504/*****************************************************************************
3505*! \brief ossaHwRegRead
3506*
3507* Purpose: This routine is called to read a 32-bit value from the PCI
3508* registers of the controller
3509*
3510* \param agRoot: Pointer to chip/driver Instance.
3511* \param regOffset: Byte offset to chip register from which to read a 32-bit
3512* value.
3513*
3514* \return: 32-bit value.
3515*
3516* \note - The scope is shared target and initiator.
3517*
3518*****************************************************************************/
3520bit32
3522 bit32 regOffset
3523 )
3524{
3525 tdsaRootOsData_t *osData = (tdsaRootOsData_t *) (agRoot->osData);
3526 bit32 return_value;
3527
3528
3529 return_value = ostiChipReadBit32 (
3530 osData->tiRoot,
3531 regOffset
3532 );
3533 if( agNULL != agRoot->sdkData )
3534 {
3535 smTrace(hpDBG_REGISTERS,"RR",regOffset);
3536 /* TP:RR regOffset */
3537 smTrace(hpDBG_REGISTERS,"RV",return_value);
3538 /* TP:RV value read */
3539 }
3540
3541 return(return_value);
3542
3543}
3544
3545/*****************************************************************************
3546*! \brief ossaHwRegWrite
3547*
3548* Purpose: This routine is called to write a 32-bit value to the PCI
3549* registers of the controller.
3550*
3551* \param agRoot: Pointer to chip/driver Instance.
3552* \param regOffset: Byte offset to chip register to which chipIOValue is
3553* written.
3554* \param regValue: 32-bit value to write at chipIOOffset in host byte order.
3555*
3556* \return: None.
3557*
3558* \note - The scope is shared target and initiator.
3559*
3560*****************************************************************************/
3562void
3564 bit32 regOffset,
3565 bit32 regValue
3566 )
3567{
3568
3569 tdsaRootOsData_t *osData = (tdsaRootOsData_t *) (agRoot->osData);
3570 if( agNULL != agRoot->sdkData )
3571 {
3572 smTrace(hpDBG_REGISTERS,"RW",regOffset);
3573 /* TP:RW regOffset */
3574 smTrace(hpDBG_REGISTERS,"VW",regValue);
3575 /* TP:VW value written */
3576 }
3577
3579 osData->tiRoot,
3580 regOffset,
3581 regValue
3582 );
3583 return;
3584}
3585
3586/*****************************************************************************
3587*! \brief ossaHwRegReadExt
3588*
3589* Purpose: This routine is called to read a 32-bit value from a bus-specific
3590* mapped registers of the controller
3591*
3592* \param agRoot: Pointer to chip/driver Instance.
3593* \param regOffset: Byte offset to chip register from which to read a 32-bit
3594* value.
3595*
3596* \return: 32-bit value.
3597*
3598* \note - The scope is shared target and initiator.
3599*
3600*****************************************************************************/
3602bit32
3604 agsaRoot_t *agRoot,
3605 bit32 busBaseNumber,
3606 bit32 regOffset
3607 )
3608{
3609 tdsaRootOsData_t *osData = (tdsaRootOsData_t *) (agRoot->osData);
3610
3611 bit32 return_value;
3612
3613 return_value = ostiChipReadBit32Ext(
3614 osData->tiRoot,
3615 busBaseNumber,
3616 regOffset
3617 );
3618
3619 /* TI_DBG4(("#_R: 0x%x:0x%x=0x%x\n",busBaseNumber,regOffset,return_value)); */
3620
3621 if( agNULL != agRoot->sdkData )
3622 {
3623 smTrace(hpDBG_REGISTERS,"EB",busBaseNumber);
3624 /* TP:EB EX read busBaseNumber */
3625 smTrace(hpDBG_REGISTERS,"EO",regOffset);
3626 /* TP:EO regOffset */
3627 smTrace(hpDBG_REGISTERS,"ER",return_value);
3628 /* TP:ER value read */
3629 }
3630 return(return_value);
3631}
3632
3634{
3635 tdsaRootOsData_t *osData = (tdsaRootOsData_t *) (agRoot->osData);
3636 ostiPCI_TRIGGER(osData->tiRoot);
3637
3638}
3639
3640
3641
3642/*****************************************************************************
3643*! \brief ossaHwRegWriteExt
3644*
3645* Purpose: This routine is called to write a 32-bit value to a bus specific
3646* mapped registers of the controller.
3647*
3648* \param agRoot: Pointer to chip/driver Instance.
3649* \param regOffset: Byte offset to chip register to which chipIOValue is
3650* written.
3651* \param regValue: 32-bit value to write at chipIOOffset in host byte order.
3652*
3653* \return: None.
3654*
3655* \note - The scope is shared target and initiator.
3656*
3657*****************************************************************************/
3659void
3661 agsaRoot_t *agRoot,
3662 bit32 busBaseNumber,
3663 bit32 regOffset,
3664 bit32 regValue
3665 )
3666{
3667 tdsaRootOsData_t *osData = (tdsaRootOsData_t *) (agRoot->osData);
3669 osData->tiRoot,
3670 busBaseNumber,
3671 regOffset,
3672 regValue
3673 );
3674
3675 /* TI_DBG4(("#_W: 0x%x:0x%x=0x%x\n",busBaseNumber,regOffset,regValue)); */
3676
3677 if( agNULL != agRoot->sdkData )
3678 {
3679 smTrace(hpDBG_REGISTERS,"Eb",busBaseNumber);
3680 /* TP:Eb Ex Write busBaseNumber */
3681 smTrace(hpDBG_REGISTERS,"Eo",regOffset);
3682 /* TP:Eo regOffset */
3683 smTrace(hpDBG_REGISTERS,"Ew",regValue);
3684 /* TP:Ew value written regValue*/
3685 }
3686 return;
3687}
3688
3689
3691 agsaRoot_t *agRoot,
3692 bit32 regOffset
3693 )
3694{
3695 tdsaRootOsData_t *osData = (tdsaRootOsData_t *) (agRoot->osData);
3696 bit32 to_ret;
3697 to_ret= ostiChipConfigReadBit32( osData->tiRoot, regOffset);
3698 TI_DBG4(("ossaHwRegReadConfig32: regOffset 0x%x returns 0x%x\n",regOffset,to_ret));
3699 return(to_ret);
3700}
3701
3702
3703
3704
3705#ifdef TD_INT_COALESCE
3706void
3707ossaIntCoalesceInitCB(
3708 agsaRoot_t *agRoot,
3709 agsaIntCoalesceContext_t *agIntCoContext,
3711 )
3712{
3713 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
3714 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
3715 tdsaContext_t *tdsaAllShared = (tdsaContext_t *)osData->tdsaAllShared;
3716 tiIntCoalesceContext_t *tiIntCoalesceCxt;
3717 tdsaIntCoalesceContext_t *tdsaIntCoalCxt;
3718 tdsaIntCoalesceContext_t *tdsaIntCoalCxtHead
3719 = (tdsaIntCoalesceContext_t *)tdsaAllShared->IntCoalesce;
3720 bit32 tiStatus;
3721
3722 TI_DBG2(("ossaIntCoalesceInitCB: start\n"));
3723
3724 tdsaIntCoalCxt = (tdsaIntCoalesceContext_t *)agIntCoContext->osData;
3725 tiIntCoalesceCxt = tdsaIntCoalCxt->tiIntCoalesceCxt;
3726 switch (status)
3727 {
3728 case AGSA_RC_SUCCESS:
3729 tiStatus = tiSuccess;
3730 break;
3731 case AGSA_RC_BUSY:
3732 tiStatus = tiBusy;
3733 break;
3734 case AGSA_RC_FAILURE:
3735 tiStatus = tiError;
3736 break;
3737 default:
3738 TI_DBG1(("ossaIntCoalesceInitCB: unknown status %d\n", status));
3739 tiStatus = tiError;
3740 break;
3741 }
3742
3743 TI_DBG2(("ossaIntCoalesceInitCB: status %d\n", tiStatus));
3744
3745 /* enqueue tdsaIntCoalCxt to freelink */
3746 tdsaIntCoalCxt->tiIntCoalesceCxt = agNULL;
3747 TI_DBG2(("ossaIntCoalesceInitCB: id %d\n", tdsaIntCoalCxt->id));
3748
3749 tdsaSingleThreadedEnter(tiRoot, TD_INTCOAL_LOCK);
3750 TDLIST_DEQUEUE_THIS(&(tdsaIntCoalCxt->MainLink));
3751 TDLIST_ENQUEUE_AT_TAIL(&(tdsaIntCoalCxt->FreeLink), &(tdsaIntCoalCxtHead->FreeLink));
3752 tdsaSingleThreadedLeave(tiRoot, TD_INTCOAL_LOCK);
3753
3754#ifdef OS_INT_COALESCE
3755 ostiInitiatorIntCoalesceInitCB(tiRoot,
3756 tiIntCoalesceCxt,
3757 tiStatus);
3758#endif
3759
3760 TI_DBG2(("ossaIntCoalesceInitCB: return end\n"));
3761
3762 return;
3763}
3764#endif /* TD_INT_COALESCE */
3765
3766/*****************************************************************************/
3784/*****************************************************************************/
3787 agsaRoot_t *agRoot,
3788 bit32 syncLockId
3789 )
3790{
3791 tdsaRootOsData_t *pOsData = agNULL;
3792 tiRoot_t *ptiRoot = agNULL;
3793 tdsaContext_t *tdsaAllShared = agNULL;
3794
3795 TD_ASSERT(agRoot, "agRoot");
3796 pOsData = (tdsaRootOsData_t *) (agRoot->osData);
3797 TD_ASSERT(pOsData, "pOsData");
3798 ptiRoot = pOsData->tiRoot;
3799 TD_ASSERT(ptiRoot, "ptiRoot");
3800
3801 tdsaAllShared = (tdsaContext_t *)pOsData->tdsaAllShared;
3802 TD_ASSERT(tdsaAllShared, "tdsaAllShared");
3803
3804 ostiSingleThreadedEnter(ptiRoot, syncLockId + tdsaAllShared->MaxNumOSLocks);
3805 return;
3806}
3807
3808/*****************************************************************************/
3825/*****************************************************************************/
3828 agsaRoot_t *agRoot,
3829 bit32 syncLockId
3830 )
3831{
3832 tdsaRootOsData_t *pOsData = agNULL;
3833 tiRoot_t *ptiRoot = agNULL;
3834 tdsaContext_t *tdsaAllShared = agNULL;
3835
3836 TD_ASSERT(agRoot, "agRoot");
3837 pOsData = (tdsaRootOsData_t *) (agRoot->osData);
3838 TD_ASSERT(pOsData, "pOsData");
3839 ptiRoot = pOsData->tiRoot;
3840 TD_ASSERT(ptiRoot, "ptiRoot");
3841
3842 tdsaAllShared = (tdsaContext_t *)pOsData->tdsaAllShared;
3843 TD_ASSERT(tdsaAllShared, "tdsaAllShared");
3844
3845 ostiSingleThreadedLeave(ptiRoot, syncLockId + tdsaAllShared->MaxNumOSLocks);
3846 return;
3847}
3848
3849#ifdef PERF_COUNT
3850osGLOBAL void ossaEnter(agsaRoot_t *agRoot, int io)
3851{
3852 ostiEnter(((tdsaRootOsData_t*)(agRoot->osData))->tiRoot, 0, io);
3853 return;
3854}
3855
3856osGLOBAL void ossaLeave(agsaRoot_t *agRoot, int io)
3857{
3858 ostiLeave(((tdsaRootOsData_t*)(agRoot->osData))->tiRoot, 0, io);
3859 return;
3860}
3861#endif
3862
3863
3864osGLOBAL void
3866 agsaRoot_t *agRoot,
3867 agsaIORequest_t *agIORequest,
3868 bit32 agIOStatus,
3869 bit32 agIOInfoLen,
3870 void *agParam,
3871 bit16 sspTag,
3872 bit32 agOtherInfo
3873 )
3874{
3875 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
3876 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
3877 tdIORequestBody_t *tdIORequestBody = (tdIORequestBody_t *)agIORequest->osData;
3878 agsaSASRequestBody_t *agSASRequestBody = agNULL;
3879 agsaSSPInitiatorRequest_t *agSSPFrame = agNULL;
3880 bit8 scsiOpcode = 0;
3881
3882 agSASRequestBody = &(tdIORequestBody->transport.SAS.agSASRequestBody);
3883 agSSPFrame = &(agSASRequestBody->sspInitiatorReq);
3884 scsiOpcode = agSSPFrame->sspCmdIU.cdb[0];
3885
3886 TI_DBG2(("ossaSSPIoctlCompleted: start\n"));
3887
3888 if (agIOStatus == OSSA_SUCCESS)
3889 {
3890 TI_DBG2(("ossaSSPIoctlCompleted: Success status\n"));
3891 }
3892 else
3893 {
3894 TI_DBG1(("ossaSSPIoctlCompleted: Status 0x%x\n", agIOStatus));
3895 }
3896 switch(scsiOpcode)
3897 {
3898 case REPORT_LUN_OPCODE:
3899 ostiNumOfLUNIOCTLRsp(tiRoot, agIOStatus);
3900 break;
3901
3902 default:
3903 TI_DBG1(("ossaSSPIoctlCompleted: Unsupported SCSI command Response 0x%x\n",scsiOpcode));
3904 break;
3905 }
3906 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Yi");
3907 return;
3908
3909}
3910
3911osGLOBAL void
3913 agsaRoot_t *agRoot,
3914 agsaIORequest_t *agIORequest,
3915 bit32 agIOStatus,
3916 bit32 agIOInfoLen,
3917 agsaFrameHandle_t agFrameHandle
3918 )
3919{
3920 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
3921 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
3922 TI_DBG2(("ossaSMPIoctlCompleted: start\n"));
3923
3924 if (agIOStatus == OSSA_SUCCESS)
3925 {
3926 TI_DBG2(("ossaSMPIoctlCompleted: Success status\n"));
3927 }
3928 else
3929 {
3930 TI_DBG1(("ossaSMPIoctlCompleted: Status 0x%x\n", agIOStatus));
3931 }
3932
3933 ostiSendSMPIOCTLRsp(tiRoot, agIOStatus);
3934 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Yi");
3935 return;
3936
3937}
3938
3939
3940/*****************************************************************************/
3960/*****************************************************************************/
3962 agsaRoot_t *agRoot,
3963 agsaIORequest_t *agIORequest,
3964 bit32 agIOStatus,
3965 bit32 agIOInfoLen,
3966 agsaFrameHandle_t agFrameHandle
3967 )
3968{
3969#ifdef PASSTHROUGH
3970 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
3971 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
3972 tdPassthroughCmndBody_t *tdPTCmndBody = (tdPassthroughCmndBody_t *)agIORequest->osData;
3973 bit32 tiStatus = tiPassthroughError;
3974 bit8 SMPframe[agIOInfoLen + sizeof(agsaSMPFrameHeader_t)];
3975 bit8 SMPpayload[agIOInfoLen];
3976
3977 TI_DBG2(("ossaSMPCompleted: start and passthrough\n"));
3978#else /* not PASSTHROUGH */
3979
3980 tdssSMPRequestBody_t *pSMPRequestBody = (tdssSMPRequestBody_t *) agIORequest->osData;
3981 TI_DBG4(("ossaSMPCompleted: start\n"));
3982#endif /* end not PASSTHROUGH */
3983
3984 TDSA_OUT_ENTER((tiRoot_t *)((tdsaRootOsData_t *)agRoot->osData)->tiRoot);
3986
3987#ifdef PASSTHROUGH
3988 if (tdPTCmndBody == agNULL)
3989 {
3990 TI_DBG1(("ossaSMPCompleted: tdPTCmndBody is NULL \n"));
3991 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Y4");
3992 goto ext;
3993 }
3994
3995 if (tdPTCmndBody->EventCB == agNULL)
3996 {
3997 TI_DBG1(("ossaSMPCompleted: tdPTCmndBody->EventCB is NULL \n"));
3998 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "Y4");
3999 goto ext;
4000 }
4001
4002 if (agIOStatus == OSSA_IO_SUCCESS)
4003 {
4004 tiStatus = tiPassthroughSuccess;
4005 }
4006 else if (agIOStatus == OSSA_IO_ABORTED)
4007 {
4008 tiStatus = tiPassthroughAborted;
4009 }
4010 else
4011 {
4012 tiStatus = tiPassthroughError;
4013 }
4014
4015 osti_memset(SMPpayload, 0, agIOInfoLen);
4016 osti_memset(SMPframe, 0, agIOInfoLen + sizeof(agsaSMPFrameHeader_t));
4017
4018 /* combine the header and payload */
4019 saFrameReadBlock(agRoot, agFrameHandle, 0, &SMPpayload, agIOInfoLen);
4020 osti_memcpy(SMPframe, agFrameHeader, sizeof(agsaSMPFrameHeader_t));
4021 osti_memcpy(SMPframe+sizeof(agsaSMPFrameHeader_t), SMPpayload, agIOInfoLen);
4022
4023 tdPTCmndBody->EventCB(tiRoot,
4024 tdPTCmndBody->tiPassthroughRequest,
4025 tiStatus,
4026 SMPframe,
4027 agIOInfoLen + sizeof(agsaSMPFrameHeader_t)
4028 );
4029
4030
4031#else /* not PASSTHROUGH */
4032
4033 /*
4034 At initiator, passing SMP to TD layer, itdssSMPCompleted(), which does nothing.
4035 At target, passing SMP to TD layer, ttdsaSMPCompleted()
4036 */
4037 /*
4038 how to use agFrameHandle, when saFrameReadBlock() is used
4039 */
4040
4041 /* SPC can't be SMP target */
4042
4043 TI_DBG4(("ossaSMPCompleted: start\n"));
4044
4045 if (pSMPRequestBody == agNULL)
4046 {
4047 TI_DBG1(("ossaSMPCompleted: pSMPRequestBody is NULL \n"));
4048 smTraceFuncExit(hpDBG_VERY_LOUD, 'c', "Y4");
4049 goto ext;
4050 }
4051
4052 if (pSMPRequestBody->SMPCompletionFunc == agNULL)
4053 {
4054 TI_DBG1(("ossaSMPCompleted: pSMPRequestBody->SMPCompletionFunc is NULL \n"));
4055 smTraceFuncExit(hpDBG_VERY_LOUD, 'd', "Y4");
4056 goto ext;
4057 }
4058#ifdef TD_INTERNAL_DEBUG /* debugging */
4059 TI_DBG4(("ossaSMPCompleted: agIOrequest %p\n", agIORequest->osData));
4060 TI_DBG4(("ossaSMPCompleted: sizeof(tdIORequestBody_t) %d 0x%x\n", sizeof(tdIORequestBody_t),
4061 sizeof(tdIORequestBody_t)));
4062 TI_DBG4(("ossaSMPCompleted: SMPRequestbody %p\n", pSMPRequestBody));
4063 TI_DBG4(("ossaSMPCompleted: calling callback fn\n"));
4064 TI_DBG4(("ossaSMPCompleted: callback fn %p\n",pSMPRequestBody->SMPCompletionFunc));
4065#endif /* TD_INTERNAL_DEBUG */
4066 /*
4067 if initiator, calling itdssSMPCompleted() in itdcb.c
4068 if target, calling ttdsaSMPCompleted() in ttdsmp.c
4069 */
4070 pSMPRequestBody->SMPCompletionFunc(
4071 agRoot,
4072 agIORequest,
4073 agIOStatus,
4074 agIOInfoLen,
4075 agFrameHandle
4076 );
4077
4078#endif /* Not PASSTHROUGH */
4079
4080 smTraceFuncExit(hpDBG_VERY_LOUD, 'e', "Y4");
4081ext:
4082 TDSA_OUT_LEAVE((tiRoot_t *)((tdsaRootOsData_t *)agRoot->osData)->tiRoot);
4083 return;
4084}
4085
4086osGLOBAL void
4088 agsaRoot_t *agRoot,
4089 agsaDevHandle_t *agDevHandle,
4090 agsaFrameHandle_t agFrameHandle,
4091 bit32 agIOInfoLen,
4092 bit32 phyId
4093 )
4094{
4096 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Y5");
4097 return;
4098}
4099
4100/*****************************************************************************/
4119/*****************************************************************************/
4121 agsaRoot_t *agRoot,
4122 agsaIORequest_t *agIORequest,
4123 bit32 agIOStatus,
4124 bit32 agIOInfoLen,
4125 agsaFrameHandle_t agFrameHandle
4126 )
4127{
4128 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
4129 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
4130 tdIORequestBody_t *tdSMPRequestBody = agNULL;
4131 bit32 context = osData->IntContext;
4133 bit32 PhysUpper32;
4134 bit32 PhysLower32;
4135 bit32 memAllocStatus;
4136 void *osMemHandle;
4137 bit32 *SMPpayload;
4138 TI_DBG2(("ossaSMPCAMCompleted: start\n"));
4139 TI_DBG2(("ossaSMPCAMCompleted: agIOInfoLen %d\n", agIOInfoLen));
4140 if (!agIORequest->osData)
4141 {
4142 TD_ASSERT((0), "ossaSMPCAMCompleted agIORequest->osData");
4143 goto ext;
4144 }
4145 tdSMPRequestBody = (tdIORequestBody_t *)agIORequest->osData;
4146 if (tdSMPRequestBody->tiIORequest->osData == agNULL)
4147 {
4148 TI_DBG1(("ossaSMPCAMCompleted: tdIORequestBody->tiIORequest->osData is null, wrong\n"));
4149 goto ext;
4150 }
4151 /* allocating agIORequest for SMP Payload itself */
4152 memAllocStatus = ostiAllocMemory(
4153 tiRoot,
4154 &osMemHandle,
4155 (void **)&SMPpayload,
4156 &PhysUpper32,
4157 &PhysLower32,
4158 8,
4159 agIOInfoLen,
4160 agTRUE
4161 );
4162 if (memAllocStatus != tiSuccess)
4163 {
4164 /* let os process IO */
4165 TI_DBG1(("ossaSMPCAMCompleted: ostiAllocMemory failed...\n"));
4166 goto ext;
4167 }
4168 if (SMPpayload == agNULL)
4169 {
4170 TI_DBG1(("ossaSMPCAMCompleted: ostiAllocMemory returned NULL SMPpayload\n"));
4171 goto ext;
4172 }
4173 if (agIOStatus == OSSA_IO_SUCCESS)
4174 {
4175 TI_DBG1(("ossaSMPCAMCompleted: Success status\n"));
4176 osti_memset(SMPpayload, 0, agIOInfoLen);
4177 TI_DBG1(("ossaSMPCAMCompleted: after memset\n"));
4178 saFrameReadBlock(agRoot, agFrameHandle, 0, SMPpayload, agIOInfoLen);
4179 TI_DBG1(("ossaSMPCAMCompleted: after read \n"));
4181 }
4182 else if (agIOStatus == OSSA_IO_ABORTED)
4183 {
4184 TI_DBG1(("ossaSMPCAMCompleted: SMP Aborted status\n"));
4186 TI_DBG1(("ossaSMPCAMCompleted: failed status=%d\n", status));
4187 //failed to send smp command, we need to free the memory
4189 tiRoot,
4190 osMemHandle,
4191 agIOInfoLen
4192 );
4193 }
4194 else
4195 {
4196 TI_DBG1(("ossaSMPCAMCompleted: SMP failed status\n"));
4198 TI_DBG1(("ossaSMPCAMCompleted: failed status=%d\n", status));
4199 //failed to send smp command, we need to free the memory
4201 tiRoot,
4202 osMemHandle,
4203 agIOInfoLen
4204 );
4205 }
4207 tdSMPRequestBody->tiIORequest,
4208 status,
4209 agIOInfoLen,
4210 SMPpayload,
4211 context
4212 );
4213 ext:
4214 TDSA_OUT_LEAVE((tiRoot_t*)((tdsaRootOsData_t*)agRoot->osData)->tiRoot);
4215 return;
4216}
4217#ifdef REMOVED
4218#ifdef TARGET_DRIVER
4219/*****************************************************************************/
4236/*****************************************************************************/
4238 agsaRoot_t *agRoot,
4239 agsaDevHandle_t *agDevHandle,
4240 agsaFrameHandle_t agFrameHandle,
4241 bit32 agFrameLength,
4242 bit32 phyId
4243 )
4244{
4245 bit8 smpHeader[4];
4246 agsaSMPFrameHeader_t *agFrameHeader;
4247#ifdef PASSTHROUGH
4248 /* call the registered function(parameter in tiTGTPassthroughCmndRegister() by target */
4249 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
4250 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
4251 ttdsaTgt_t *Target = (ttdsaTgt_t *)osData->ttdsaTgt;
4252
4253 bit8 SMPframe[agIOInfoLen + sizeof(agsaSMPFrameHeader_t)];
4254 bit8 SMPpayload[agIOInfoLen];
4255
4256 TI_DBG2(("ossaSMPReqReceived: start and passthrough\n"));
4257 osti_memset(SMPpayload, 0, agIOInfoLen);
4258 osti_memset(SMPframe, 0, agIOInfoLen + sizeof(agsaSMPFrameHeader_t));
4259 /* combine smp header and payload */
4260 saFrameReadBlock(agRoot, agFrameHandle, 0, &SMPpayload, agIOInfoLen);
4261 osti_memcpy(SMPframe, agFrameHeader, sizeof(agsaSMPFrameHeader_t));
4262 osti_memcpy(SMPframe+sizeof(agsaSMPFrameHeader_t), SMPpayload, agIOInfoLen);
4263
4264 Target->PasthroughCB(
4265 tiRoot,
4266 tiSASATA,
4267 tiSMP,
4268 tiSMPResponse,
4269 SMPframe,
4270 agIOInfoLen + sizeof(agsaSMPFrameHeader_t),
4271 phyId
4272 );
4273
4274#else
4275
4276 /*
4277 agDevHandle_t->osData points to tdssDeviceData_t
4278 */
4279 tdsaDeviceData_t *pDeviceData = (tdsaDeviceData_t *) agDevHandle->osData;
4280
4281 saFrameReadBlock(agRoot, agFrameHandle, 0, smpHeader, 4);
4282 agFrameHeader = (agsaSMPFrameHeader_t *)smpHeader;
4283 TI_DBG4(("ossaSMPReqReceived: start\n"));
4284
4285 /* tdtypes.h, calling ttdsaSMPReqReceived in ttdsmp.c */
4286 pDeviceData->pJumpTable->pSMPReqReceived (
4287 agRoot,
4288 agDevHandle,
4289 agFrameHeader,
4290 agFrameHandle,
4291 agFrameLength,
4292 phyId
4293 );
4294#endif
4295 return;
4296}
4297#endif
4298#endif
4299
4300/*****************************************************************************/
4319/*****************************************************************************/
4322 agsaRoot_t *agRoot,
4323 agsaIORequest_t *agIORequest,
4324 bit32 agIOStatus,
4325 bit32 agIOInfoLen,
4326 void *agParam,
4327 bit16 sspTag,
4328 bit32 agOtherInfo
4329 )
4330{
4331 tdIORequestBody_t *pIORequestBody;
4332#ifdef TD_DEBUG_ENABLE
4334 tdsaDeviceData_t *oneDeviceData = agNULL;
4335#endif
4336
4337 TDSA_OUT_ENTER((tiRoot_t*)((tdsaRootOsData_t*)agRoot->osData)->tiRoot);
4339
4340 if(!agIORequest->osData)
4341 {
4342 TD_ASSERT((0), "ossaSSPCompleted agIORequest->osData");
4343 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "2L");
4344 goto ext;
4345 }
4346 pIORequestBody = (tdIORequestBody_t *)agIORequest->osData;
4347
4348
4349 TI_DBG4(("ossaSSPCompleted: start\n"));
4350
4351 if (pIORequestBody == agNULL)
4352 {
4353 TI_DBG1(("ossaSSPCompleted: pIORequestBody is NULL \n"));
4354 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "2L");
4355 goto ext;
4356 }
4357 if (pIORequestBody->IOCompletionFunc == agNULL)
4358 {
4359#ifdef TD_DEBUG_ENABLE
4360 tiDeviceHandle = pIORequestBody->tiDevHandle;
4361 oneDeviceData = (tdsaDeviceData_t *)tiDeviceHandle->tdData;
4362#endif
4363 TI_DBG1(("ossaSSPCompleted: IOCompletionFunc is NULL \n"));
4364 TI_DBG1(("ossaSSPCompleted: did %d \n", oneDeviceData->id));
4365 smTraceFuncExit(hpDBG_VERY_LOUD, 'c', "2L");
4366 goto ext;
4367 }
4368
4369 /*
4370 if initiator, calling itdssIOCompleted() in itdcb.c
4371 if initiator, calling itdssTaskCompleted in itdcb.c
4372 if target, calling ttdsaIOCompleted() in ttdio.c
4373 */
4374 pIORequestBody->IOCompletionFunc(
4375 agRoot,
4376 agIORequest,
4377 agIOStatus,
4378 agIOInfoLen,
4379 agParam,
4380 agOtherInfo
4381 );
4382 smTraceFuncExit(hpDBG_VERY_LOUD, 'd', "2L");
4383ext:
4384 TDSA_OUT_LEAVE((tiRoot_t*)((tdsaRootOsData_t*)agRoot->osData)->tiRoot);
4385 return;
4386}
4387
4388#ifdef FAST_IO_TEST
4389GLOBAL void ossaFastSSPCompleted(
4390 agsaRoot_t *agRoot,
4391 agsaIORequest_t *cbArg,
4392 bit32 agIOStatus,
4393 bit32 agIOInfoLen,
4394 void *agParam,
4395 bit16 sspTag,
4396 bit32 agOtherInfo
4397 )
4398{
4399 agsaFastCBBuf_t *safb = (agsaFastCBBuf_t*)cbArg;
4400 tdsaRootOsData_t *osData = (tdsaRootOsData_t*)agRoot->osData;
4401 tiRoot_t *tiRoot = (tiRoot_t*)osData->tiRoot;
4402 bit32 scsi_status;
4403 bit32 data_status;
4404 bit32 respLen;
4405 bit8 respData[128];
4406 bit32 senseLen;
4407 agsaSSPResponseInfoUnit_t agSSPRespIU;
4408
4409 TDSA_OUT_ENTER((tiRoot_t*)((tdsaRootOsData_t*)agRoot->osData)->tiRoot);
4411
4412 TI_DBG4(("ossaSSPCompleted: start\n"));
4413
4414 if (safb->cb == agNULL || safb->cbArg == agNULL)
4415 {
4416 TI_DBG1(("ossaFastSSPCompleted: pIORequestBody is NULL \n"));
4417 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Y6");
4418 TD_ASSERT((0), "");
4419 goto ext;
4420 }
4421
4422 switch (agIOStatus)
4423 {
4424 case OSSA_IO_SUCCESS:
4425
4426 /* ~ itdssIOSuccessHandler */
4427 if ((agIOInfoLen < sizeof(agsaSSPResponseInfoUnit_t)))
4428 {
4429 ((ostiFastSSPCb_t)safb->cb)(tiRoot, safb->cbArg, OSSA_IO_SUCCESS, 0);
4430 break;
4431 }
4432
4433 /* reads agsaSSPResponseInfoUnit_t */
4434 saFrameReadBlock(agRoot, agParam, 0, &agSSPRespIU,
4436
4437 data_status = SA_SSPRESP_GET_DATAPRES(&agSSPRespIU);
4438 scsi_status = agSSPRespIU.status;
4439
4440 TI_DBG1(("itdssIOSuccessHandler: scsi_status %d\n", scsi_status));
4441
4442 /* endianess is invovled here */
4443 senseLen = SA_SSPRESP_GET_SENSEDATALEN(&agSSPRespIU);
4444 respLen = SA_SSPRESP_GET_RESPONSEDATALEN(&agSSPRespIU);
4445 TI_DBG2(("itdssIOSuccessHandler: scsi status=0x%x, senselen=0x%x resplen "
4446 "0x%x\n", scsi_status, senseLen, respLen));
4447
4448 if (agIOInfoLen < sizeof(agsaSSPResponseInfoUnit_t) + senseLen + respLen)
4449 {
4450 ((ostiFastSSPCb_t)safb->cb)(tiRoot, safb->cbArg, tiIOFailed,
4452 break;
4453 }
4454
4455 /* reads response data */
4456 saFrameReadBlock(agRoot, agParam, sizeof(agsaSSPResponseInfoUnit_t),
4457 respData, respLen);
4458 /* reads sense data */
4459 saFrameReadBlock(agRoot, agParam, sizeof(agsaSSPResponseInfoUnit_t)
4460 + respLen, safb->pSenseData, senseLen);
4461
4462 if (data_status == 0)
4463 {
4464 /* NO_DATA */
4465 TI_DBG2(("ossaFastSSPCompleted: no data\n"));
4466 ((ostiFastSSPCb_t)safb->cb)(tiRoot, safb->cbArg, tiIOSuccess,
4467 scsi_status);
4468 break;
4469 }
4470
4471 if (data_status == 1)
4472 {
4473 /* RESPONSE_DATA */
4474 TI_DBG1(("ossaFastSSPCompleted: response data \n"));
4475 ((ostiFastSSPCb_t)safb->cb)(tiRoot, safb->cbArg, tiIOSuccess, 0);
4476 break;
4477 }
4478
4479 if (data_status == 2)
4480 {
4481 tiSenseData_t senseData;
4482
4483 /* SENSE_DATA */
4484 TI_DBG2(("itdssIOSuccessHandler: sense data \n"));
4485
4486 senseData.senseData = safb->pSenseData;
4487 senseData.senseLen = MIN(*(safb->senseLen), senseLen);
4488
4489 /* when ASC = 0x04 - Log Unit Not Ready,
4490 and ASCQ = 0x11 - Enable Spinup Required:
4491 call saLocalPhyControl to notify spinup */
4492 if (((char*)safb->pSenseData)[12] == 0x04 &&
4493 ((char*)safb->pSenseData)[13] == 0x11)
4494 {
4495 int i;
4496
4497 TI_DBG2(("ossaFastSSPCompleted: sending notfify spinup\n"));
4498
4499 if (((tdsaDeviceData_t*)safb->oneDeviceData)->directlyAttached ==
4500 agTRUE)
4501 {
4502 for (i = 0; i < TD_MAX_NUM_NOTIFY_SPINUP; i++)
4503 {
4504 saLocalPhyControl(agRoot, agNULL, 0,
4505 ((tdsaDeviceData_t*)safb->oneDeviceData)->phyID,
4507 agNULL);
4508 }
4509 }
4510 }
4511
4512 if (*(safb->senseLen) > senseData.senseLen)
4513 *(safb->senseLen) = senseData.senseLen;
4514// memcpy((void *)safb->pSenseData, senseData.senseData, safb->senseLen);
4515
4516 ((ostiFastSSPCb_t)safb->cb)(tiRoot, safb->cbArg, tiIOSuccess,
4517 scsi_status);
4518 break;
4519 }
4520
4521 if (data_status == 3)
4522 {
4523 /* RESERVED */
4524 TI_DBG1(("ossaFastSSPCompleted: reserved wrong!!!\n"));
4525
4526 ((ostiFastSSPCb_t)safb->cb)(tiRoot, safb->cbArg, tiIOFailed,
4527 scsi_status);
4528 break;
4529 }
4530 break;
4531#ifdef REMOVED
4532 case OSSA_IO_OVERFLOW:
4533 ((ostiFastSSPCb_t)safb->cb)(tiRoot, safb->cbArg, tiIOOverRun,
4534 agIOInfoLen);
4535 break;
4536#endif /* REMOVED */
4537 case OSSA_IO_UNDERFLOW:
4538 ((ostiFastSSPCb_t)safb->cb)(tiRoot, safb->cbArg, tiIOUnderRun,
4539 agIOInfoLen);
4540 break;
4541
4542 case OSSA_IO_ABORTED:
4543 ((ostiFastSSPCb_t)safb->cb)(tiRoot, safb->cbArg, tiIOFailed,
4545 break;
4547 ((ostiFastSSPCb_t)safb->cb)(tiRoot, safb->cbArg, tiIOFailed,
4549 break;
4550 case OSSA_IO_NO_DEVICE:
4551 ((ostiFastSSPCb_t)safb->cb)(tiRoot, safb->cbArg, tiIOFailed,
4553 break;
4555 {
4556
4557 tdsaDeviceData_t *oneDeviceData;
4558
4559 oneDeviceData = (tdsaDeviceData_t*)safb->oneDeviceData;
4560 if (oneDeviceData->valid == agTRUE &&
4561 oneDeviceData->registered == agTRUE &&
4562 oneDeviceData->tdPortContext != agNULL)
4563 {
4564 saSetDeviceState(oneDeviceData->agRoot, agNULL, tdsaRotateQnumber(tiRoot, oneDeviceData),
4565 oneDeviceData->agDevHandle, SA_DS_OPERATIONAL);
4566 }
4567 /* fall through */
4568 }
4569
4570 default:
4571 ((ostiFastSSPCb_t)safb->cb)(tiRoot, safb->cbArg, tiIOFailed,
4573 break;
4574 }
4575
4576 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "Y6");
4577
4578ext:
4579 TDSA_OUT_LEAVE((tiRoot_t*)((tdsaRootOsData_t*)agRoot->osData)->tiRoot);
4580 return;
4581} /* ossaFastSSPCompleted */
4582#endif
4583
4584/*****************************************************************************/
4602/*****************************************************************************/
4604 agsaRoot_t *agRoot,
4605 agsaDevHandle_t *agDevHandle,
4606 agsaFrameHandle_t agFrameHandle,
4607 bit16 agInitiatorTag,
4608 bit32 parameter,
4609 bit32 agFrameLen
4610 )
4611{
4612 /*
4613 at target only
4614 uses jumptable, not callback
4615 */
4616 /*
4617 agDevHandle_t->osData points to tdssDeviceData_t
4618 */
4619 tdsaDeviceData_t *pDeviceData = (tdsaDeviceData_t *) agDevHandle->osData;
4621
4622 /* tdtypes.h, calling ttdsaSSPReqReceived() in ttdio.c */
4623 pDeviceData->pJumpTable->pSSPReqReceived (
4624 agRoot,
4625 agDevHandle,
4626 agFrameHandle,
4627 agInitiatorTag,
4628 parameter,
4629 agFrameLen
4630 );
4631 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Y7");
4632 return;
4633}
4634/*****************************************************************************/
4651/*****************************************************************************/
4653 bit32 microseconds
4654 )
4655{
4656 tdsaRootOsData_t *pOsData = (tdsaRootOsData_t *) (agRoot->osData);
4657
4659 pOsData->tiRoot,
4660 microseconds
4661 );
4662 return;
4663}
4664
4665
4666/*****************************************************************************
4667*! \brief ossaSSPEvent
4668*
4669* This routine is called to notify the OS Layer of an event associated with
4670* SAS port or SAS device
4671*
4672* \param agRoot: Handles for this instance of SAS/SATA hardware
4673* \param agIORequest Pointer to IO request
4674* \param event: event type
4675* \param agIOInfoLen: not in use
4676* \param agFrameHandle: not in use
4677*
4678* \return: none
4679*
4680*****************************************************************************/
4681/* in case of CMD ACK_NAK timeout, send query task */
4683 agsaRoot_t *agRoot,
4684 agsaIORequest_t *agIORequest,
4685 agsaPortContext_t *agPortContext,
4686 agsaDevHandle_t *agDevHandle,
4687 bit32 event,
4688 bit16 sspTag,
4689 bit32 agIOInfoLen,
4690 void *agParam
4691 )
4692{
4693#ifdef INITIATOR_DRIVER
4694 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
4695 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
4696 /* bit32 intContext = osData->IntContext; */
4697 void *osMemHandle;
4698 tdIORequestBody_t *TMtdIORequestBody;
4699 bit32 PhysUpper32;
4700 bit32 PhysLower32;
4701 bit32 memAllocStatus;
4702 bit32 agRequestType;
4703 agsaIORequest_t *agTMIORequest = agNULL; /* task management itself */
4704 agsaSASRequestBody_t *agSASRequestBody = agNULL;
4705 agsaSSPScsiTaskMgntReq_t *agSSPTaskMgntRequest;
4706 bit32 saStatus;
4707 bit32 agIORequestType; /* type of IO recevied */
4708 tiIORequest_t *taskTag; /* being task managed one */
4709 tdIORequestBody_t *tdIORequestBody;
4710#endif
4711
4712#ifdef REMOVED
4714 tdsaDeviceData_t *oneDeviceData = agNULL;
4715 tdIORequestBody_t *tdAbortIORequestBody;
4716#endif
4717 agsaDifDetails_t agDifDetails;
4718 bit8 framePayload[256];
4719#ifdef REMOVED
4720 bit16 frameOffset = 0;
4721#endif
4722 bit16 frameLen = 0;
4723
4724 TI_DBG6(("ossaSSPEvent: start\n"));
4726
4727
4728
4730 event == OSSA_IO_XFER_ERROR_BREAK ||
4732 )
4733 {
4734
4735 /* IO being task managed(the original IO) depending on event */
4736#ifdef INITIATOR_DRIVER
4737 tdIORequestBody = (tdIORequestBody_t *)agIORequest->osData;
4738 taskTag = tdIORequestBody->tiIORequest;
4739#endif
4740#ifdef REMOVED
4741 tiDeviceHandle = tdIORequestBody->tiDevHandle;
4742 oneDeviceData = (tdsaDeviceData_t *)tiDeviceHandle->tdData;
4743#endif
4744
4745#ifdef INITIATOR_DRIVER
4746 agIORequestType = tdIORequestBody->agRequestType;
4747
4748 /* error checking; only command is expected here */
4749 if (agIORequestType == AGSA_REQ_TYPE_UNKNOWN)
4750 {
4751 TI_DBG1(("ossaSSPEvent: incorrect frame 0x%x. Should be command\n", agIORequestType));
4752 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Y9");
4753 return;
4754 }
4755
4756 /* Allocate memory for query task management */
4757 memAllocStatus = ostiAllocMemory(
4758 tiRoot,
4759 &osMemHandle,
4760 (void **)&TMtdIORequestBody,
4761 &PhysUpper32,
4762 &PhysLower32,
4763 8,
4764 sizeof(tdIORequestBody_t),
4765 agTRUE
4766 );
4767
4768 if (memAllocStatus != tiSuccess)
4769 {
4770 /* let os process IO */
4771 TI_DBG1(("ossaSSPEvent: ostiAllocMemory failed...\n"));
4772 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "Y9");
4773 return;
4774 }
4775
4776 if (TMtdIORequestBody == agNULL)
4777 {
4778 /* let os process IO */
4779 TI_DBG1(("ossaSSPEvent: ostiAllocMemory returned NULL TMIORequestBody\n"));
4780 smTraceFuncExit(hpDBG_VERY_LOUD, 'c', "Y9");
4781 return;
4782 }
4783
4784 /* setup task management structure */
4785 TMtdIORequestBody->IOType.InitiatorTMIO.osMemHandle = osMemHandle;
4786 /* TD generates Query Task not OS layer */
4787 TMtdIORequestBody->IOType.InitiatorTMIO.CurrentTaskTag = agNULL;
4788 TMtdIORequestBody->IOType.InitiatorTMIO.TaskTag = taskTag;
4789
4790 /* initialize callback function */
4791 TMtdIORequestBody->IOCompletionFunc = itdssQueryTaskCompleted;
4792
4793 /* initialize tiDevhandle */
4794 TMtdIORequestBody->tiDevHandle = tdIORequestBody->tiDevHandle;
4795
4796
4797 /* initialize agIORequest */
4798 agTMIORequest = &(TMtdIORequestBody->agIORequest);
4799 agTMIORequest->osData = (void *) TMtdIORequestBody;
4800 agTMIORequest->sdkData = agNULL; /* LL takes care of this */
4801
4802 /* request type */
4803 agRequestType = AGSA_SSP_TASK_MGNT_REQ;
4804 TMtdIORequestBody->agRequestType = AGSA_SSP_TASK_MGNT_REQ;
4805
4806 /*
4807 initialize
4808 tdIORequestBody_t tdIORequestBody -> agSASRequestBody
4809 */
4810 agSASRequestBody = &(TMtdIORequestBody->transport.SAS.agSASRequestBody);
4811 agSSPTaskMgntRequest = &(agSASRequestBody->sspTaskMgntReq);
4812
4813 /* fill up LUN field */
4814 osti_memset(agSSPTaskMgntRequest->lun, 0, 8);
4815
4816 /* sets taskMgntFunction field */
4817 agSSPTaskMgntRequest->taskMgntFunction = AGSA_QUERY_TASK;
4818 /* debugging */
4819 if (TMtdIORequestBody->IOCompletionFunc == agNULL)
4820 {
4821 TI_DBG1(("ossaSSPEvent: Error !!! IOCompletionFunc is NULL\n"));
4822 }
4823 /* send query task management */
4824 saStatus = saSSPStart(agRoot,
4825 agTMIORequest,
4826 0,
4827 agDevHandle,
4828 agRequestType,
4829 agSASRequestBody,
4830 agIORequest,
4832
4833 if (saStatus != AGSA_RC_SUCCESS)
4834 {
4835 /* free up allocated memory */
4837 tiRoot,
4838 TMtdIORequestBody->IOType.InitiatorTMIO.osMemHandle,
4839 sizeof(tdIORequestBody_t)
4840 );
4841 TI_DBG1(("ossaSSPEvent: saSSPStart failed\n"));
4842 return;
4843 }
4844#endif
4845 }
4846#ifdef REMOVED
4847 else if (event == OSSA_IO_ABORTED)
4848 {
4849 TI_DBG2(("ossaSSPEvent: OSSA_IO_ABORTED\n"));
4850 /* clean up TD layer's IORequestBody */
4851 tdAbortIORequestBody = (tdIORequestBody_t *)agIORequest->osData;
4853 tiRoot,
4854 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
4855 sizeof(tdIORequestBody_t)
4856 );
4857
4858 }
4859 else if (event == OSSA_IO_NOT_VALID)
4860 {
4861 TI_DBG1(("ossaSSPEvent: OSSA_IO_NOT_VALID\n"));
4862 tdAbortIORequestBody = (tdIORequestBody_t *)agIORequest->osData;
4864 tiRoot,
4865 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
4866 sizeof(tdIORequestBody_t)
4867 );
4868
4869
4870 }
4871#endif
4872 else if (event == OSSA_IO_XFER_CMD_FRAME_ISSUED)
4873 {
4874 TI_DBG2(("ossaSSPEvent: OSSA_IO_XFER_CMD_FRAME_ISSUED\n"));
4875 }
4876 else if (event == OSSA_IO_XFER_ERROR_OFFSET_MISMATCH)
4877 {
4878 TI_DBG1(("ossaSSPEvent: OSSA_IO_XFER_ERROR_OFFSET_MISMATCH\n"));
4879 }
4880 else if (event == OSSA_IO_OVERFLOW)
4881 {
4882 TI_DBG1(("ossaSSPEvent: OSSA_IO_OVERFLOW\n"));
4883 /*
4884 ??? can't call; missing agIOInfoLen
4885 ostiInitiatorIOCompleted (
4886 tiRoot,
4887 tdIORequestBody->tiIORequest,
4888 tiIOOverRun,
4889 agIOInfoLen,
4890 agNULL,
4891 intContext
4892 );
4893
4894 */
4895
4896 }
4898 {
4899 TI_DBG1(("ossaSSPEvent: OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_RETRY_BACKOFF_THRESHOLD_REACHED\n"));
4900 }
4902 {
4903 TI_DBG1(("ossaSSPEvent: OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_TMO\n"));
4904 }
4906 {
4907 TI_DBG1(("ossaSSPEvent: OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_NO_DEST\n"));
4908 }
4910 {
4911 TI_DBG1(("ossaSSPEvent: OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_COLLIDE\n"));
4912 }
4914 {
4915 TI_DBG1(("ossaSSPEvent: OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_PATHWAY_BLOCKED\n"));
4916 }
4918 {
4919 TI_DBG1(("ossaSSPEvent: OSSA_IO_XFR_ERROR_DEK_KEY_TAG_MISMATCH\n"));
4920 }
4921 else if (event == OSSA_IO_XFER_ERROR_XFER_RDY_OVERRUN)
4922 {
4923 TI_DBG1(("ossaSSPEvent: OSSA_IO_XFER_ERROR_XFER_RDY_OVERRUN\n"));
4924 }
4925 else if (event == OSSA_IO_XFR_ERROR_DIF_MISMATCH ||
4929 {
4930 TI_DBG1(("ossaSSPEvent: DIF related, event 0x%x\n", event));
4931 /* process DIF detail information */
4932 TI_DBG2(("ossaSSPEvent: agIOInfoLen %d\n", agIOInfoLen));
4933 if (agParam == agNULL)
4934 {
4935 TI_DBG2(("ossaSSPEvent: agParam is NULL!!!\n"));
4936 return;
4937 }
4938 if (agIOInfoLen < sizeof(agsaDifDetails_t))
4939 {
4940 TI_DBG2(("ossaSSPEvent: wrong agIOInfoLen!!! agIOInfoLen %d sizeof(agsaDifDetails_t) %d\n", agIOInfoLen, (int)sizeof(agsaDifDetails_t)));
4941 return;
4942 }
4943 /* reads agsaDifDetails_t */
4944 saFrameReadBlock(agRoot, agParam, 0, &agDifDetails, sizeof(agsaDifDetails_t));
4945#ifdef REMOVED
4946 frameOffset = (agDifDetails.ErrBoffsetEDataLen & 0xFFFF);
4947#endif
4948 frameLen = (bit16)((agDifDetails.ErrBoffsetEDataLen & 0xFFFF0000) >> 16);
4949
4950 TI_DBG2(("ossaSSPEvent: UpperLBA 0x%08x LowerLBA 0x%08x\n", agDifDetails.UpperLBA, agDifDetails.LowerLBA));
4951 TI_DBG2(("ossaSSPEvent: SASAddrHI 0x%08x SASAddrLO 0x%08x\n",
4953 TI_DBG2(("ossaSSPEvent: DIF error mask 0x%x Device ID 0x%x\n",
4954 (agDifDetails.DIFErrDevID) & 0xFF, (agDifDetails.DIFErrDevID & 0xFFFF0000) >> 16));
4955 if (frameLen != 0 && frameLen <= 256)
4956 {
4957 saFrameReadBlock(agRoot, agParam, sizeof(agsaDifDetails_t), framePayload, frameLen);
4958 tdhexdump("ossaSSPEvent frame", framePayload, frameLen);
4959 }
4960 }
4961 else
4962 {
4963 TI_DBG1(("ossaSSPEvent: other event 0x%x\n", event));
4964 }
4965
4966 smTraceFuncExit(hpDBG_VERY_LOUD, 'd', "Y9");
4967 return;
4968}
4969
4970#ifdef FDS_SM
4971osGLOBAL void ossaSATAIDAbortCB(
4972 agsaRoot_t *agRoot,
4973 agsaIORequest_t *agIORequest,
4974 bit32 flag,
4975 bit32 status)
4976{
4977 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
4978 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
4979 tdIORequestBody_t *tdAbortIORequestBody;
4980
4981 TI_DBG1(("ossaSATAIDAbortCB: start flag %d status %d\n", flag, status));
4982
4983 tdAbortIORequestBody = (tdIORequestBody_t *)agIORequest->osData;
4984
4985 /*
4986 triggered by tdIDStartTimerCB
4987 */
4989 tiRoot,
4990 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
4991 sizeof(tdIORequestBody_t)
4992 );
4993 return;
4994}
4995#endif
4996
4997#ifdef INITIATOR_DRIVER
4999 agsaRoot_t *agRoot,
5000 agsaIORequest_t *agIORequest,
5001 bit32 flag,
5002 bit32 status)
5003{
5004 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
5005 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
5006 tdIORequestBody_t *tdAbortIORequestBody = agNULL;
5007 tdsaDeviceData_t *oneDeviceData = agNULL;
5009 tiIORequest_t *taskTag = agNULL;
5010
5011 TI_DBG2(("ossaSSPAbortCB: start\n"));
5013
5014 tdAbortIORequestBody = (tdIORequestBody_t *)agIORequest->osData;
5015 if (tdAbortIORequestBody == agNULL)
5016 {
5017 TI_DBG1(("ossaSSPAbortCB: tdAbortIORequestBody is NULL warning!!!!\n"));
5018 return;
5019 }
5020
5021 if (flag == 2)
5022 {
5023 /* abort per port */
5024 TI_DBG1(("ossaSSPAbortCB: abort per port\n"));
5025 }
5026 else if (flag == 1)
5027 {
5028 TI_DBG2(("ossaSSPAbortCB: abort all\n"));
5029
5030 tiDeviceHandle = (tiDeviceHandle_t *)tdAbortIORequestBody->tiDevHandle;
5031 if (tiDeviceHandle == agNULL)
5032 {
5033 TI_DBG1(("ossaSSPAbortCB: tiDeviceHandle is NULL warning!!!!\n"));
5035 tiRoot,
5036 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5037 sizeof(tdIORequestBody_t)
5038 );
5039 return;
5040 }
5041
5042 oneDeviceData = (tdsaDeviceData_t *)tiDeviceHandle->tdData;
5043 if (oneDeviceData == agNULL)
5044 {
5045 TI_DBG1(("ossaSSPAbortCB: oneDeviceData is NULL warning!!!!\n"));
5047 tiRoot,
5048 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5049 sizeof(tdIORequestBody_t)
5050 );
5051 return;
5052 }
5053
5054 if (status == OSSA_IO_SUCCESS)
5055 {
5056 TI_DBG2(("ossaSSPAbortCB: OSSA_IO_SUCCESS\n"));
5057 /* clean up TD layer's IORequestBody */
5058 if (oneDeviceData->OSAbortAll == agTRUE)
5059 {
5060 oneDeviceData->OSAbortAll = agFALSE;
5062 agNULL,
5065 tiAbortOK,
5066 agNULL);
5067 }
5068 else
5069 {
5070 TI_DBG2(("ossaSSPAbortCB: calling saDeregisterDeviceHandle\n"));
5071 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
5072 }
5073 TI_DBG2(("ossaSSPAbortCB: did %d\n", oneDeviceData->id));
5075 tiRoot,
5076 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5077 sizeof(tdIORequestBody_t)
5078 );
5079
5080 }
5081 else if (status == OSSA_IO_NOT_VALID)
5082 {
5083 TI_DBG1(("ossaSSPAbortCB: OSSA_IO_NOT_VALID\n"));
5084 /* clean up TD layer's IORequestBody */
5085 if (oneDeviceData->OSAbortAll == agTRUE)
5086 {
5087 oneDeviceData->OSAbortAll = agFALSE;
5089 agNULL,
5093 agNULL );
5094 }
5095 else
5096 {
5097 TI_DBG2(("ossaSSPAbortCB: calling saDeregisterDeviceHandle\n"));
5098 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
5099 }
5100 TI_DBG2(("ossaSSPAbortCB: did %d\n", oneDeviceData->id));
5102 tiRoot,
5103 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5104 sizeof(tdIORequestBody_t)
5105 );
5106 }
5107 else if (status == OSSA_IO_NO_DEVICE)
5108 {
5109 TI_DBG1(("ossaSSPAbortCB: OSSA_IO_NO_DEVICE\n"));
5110 /* clean up TD layer's IORequestBody */
5111 if (oneDeviceData->OSAbortAll == agTRUE)
5112 {
5113 oneDeviceData->OSAbortAll = agFALSE;
5115 agNULL,
5119 agNULL );
5120 }
5121 else
5122 {
5123 TI_DBG2(("ossaSSPAbortCB: calling saDeregisterDeviceHandle\n"));
5124 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
5125 }
5126 TI_DBG2(("ossaSSPAbortCB: did %d\n", oneDeviceData->id));
5128 tiRoot,
5129 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5130 sizeof(tdIORequestBody_t)
5131 );
5132 }
5134 {
5135 TI_DBG1(("ossaSSPAbortCB: OSSA_IO_ABORT_IN_PROGRESS\n"));
5136 /* clean up TD layer's IORequestBody */
5137 if (oneDeviceData->OSAbortAll == agTRUE)
5138 {
5139 oneDeviceData->OSAbortAll = agFALSE;
5141 agNULL,
5145 agNULL );
5146 }
5147 else
5148 {
5149 TI_DBG2(("ossaSSPAbortCB: calling saDeregisterDeviceHandle\n"));
5150 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
5151 }
5152 TI_DBG2(("ossaSSPAbortCB: did %d\n", oneDeviceData->id));
5154 tiRoot,
5155 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5156 sizeof(tdIORequestBody_t)
5157 );
5158 }
5159#ifdef REMOVED
5160 else if (status == OSSA_IO_ABORT_DELAYED)
5161 {
5162 TI_DBG1(("ossaSSPAbortCB: OSSA_IO_ABORT_DELAYED\n"));
5163 /* clean up TD layer's IORequestBody */
5164 if (oneDeviceData->OSAbortAll == agTRUE)
5165 {
5166 oneDeviceData->OSAbortAll = agFALSE;
5168 agNULL,
5172 agNULL );
5173 }
5174 else
5175 {
5176 TI_DBG2(("ossaSSPAbortCB: calling saDeregisterDeviceHandle\n"));
5177 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
5178 }
5179 TI_DBG2(("ossaSSPAbortCB: did %d\n", oneDeviceData->id));
5181 tiRoot,
5182 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5183 sizeof(tdIORequestBody_t)
5184 );
5185 }
5186#endif
5187 else
5188 {
5189 TI_DBG1(("ossaSSPAbortCB: other status %d\n", status));
5190 /* clean up TD layer's IORequestBody */
5191 if (oneDeviceData->OSAbortAll == agTRUE)
5192 {
5193 oneDeviceData->OSAbortAll = agFALSE;
5195 agNULL,
5199 agNULL );
5200 }
5201 else
5202 {
5203 TI_DBG2(("ossaSSPAbortCB: calling saDeregisterDeviceHandle\n"));
5204 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
5205 }
5206 TI_DBG2(("ossaSSPAbortCB: did %d\n", oneDeviceData->id));
5208 tiRoot,
5209 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5210 sizeof(tdIORequestBody_t)
5211 );
5212 }
5213 }
5214 else if (flag == 0)
5215 {
5216 TI_DBG2(("ossaSSPAbortCB: abort one\n"));
5217 taskTag = tdAbortIORequestBody->tiIOToBeAbortedRequest;
5218
5219 if ( taskTag == agNULL)
5220 {
5221 TI_DBG1(("ossaSSPAbortCB: taskTag is NULL; triggered by itdssQueryTaskCompleted\n"));
5222 }
5223 if (status == OSSA_IO_SUCCESS)
5224 {
5225 TI_DBG2(("ossaSSPAbortCB: OSSA_IO_SUCCESS\n"));
5226 if (taskTag != agNULL)
5227 {
5229 agNULL,
5230 agNULL,
5232 tiAbortOK,
5233 taskTag );
5234 }
5236 tiRoot,
5237 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5238 sizeof(tdIORequestBody_t)
5239 );
5240
5241 }
5242 else if (status == OSSA_IO_NOT_VALID)
5243 {
5244 TI_DBG1(("ossaSSPAbortCB: OSSA_IO_NOT_VALID\n"));
5245
5246 if (taskTag != agNULL)
5247 {
5249 agNULL,
5250 agNULL,
5253 taskTag );
5254 }
5256 tiRoot,
5257 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5258 sizeof(tdIORequestBody_t)
5259 );
5260 }
5261 else if (status == OSSA_IO_NO_DEVICE)
5262 {
5263 TI_DBG1(("ossaSSPAbortCB: OSSA_IO_NO_DEVICE\n"));
5264
5265 if (taskTag != agNULL)
5266 {
5268 agNULL,
5269 agNULL,
5272 taskTag );
5273 }
5275 tiRoot,
5276 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5277 sizeof(tdIORequestBody_t)
5278 );
5279 }
5281 {
5282 TI_DBG1(("ossaSSPAbortCB: OSSA_IO_ABORT_IN_PROGRESS\n"));
5283
5284 if (taskTag != agNULL)
5285 {
5287 agNULL,
5288 agNULL,
5291 taskTag );
5292 }
5294 tiRoot,
5295 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5296 sizeof(tdIORequestBody_t)
5297 );
5298 }
5299#ifdef REMOVED
5300 else if (status == OSSA_IO_ABORT_DELAYED)
5301 {
5302 TI_DBG1(("ossaSSPAbortCB: OSSA_IO_ABORT_DELAYED\n"));
5303
5304 if (taskTag != agNULL)
5305 {
5307 agNULL,
5308 agNULL,
5311 taskTag );
5312 }
5314 tiRoot,
5315 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5316 sizeof(tdIORequestBody_t)
5317 );
5318 }
5319#endif
5320 else
5321 {
5322 TI_DBG1(("ossaSSPAbortCB: other status %d\n", status));
5323
5324 if (taskTag != agNULL)
5325 {
5327 agNULL,
5328 agNULL,
5331 taskTag );
5332 }
5334 tiRoot,
5335 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5336 sizeof(tdIORequestBody_t)
5337 );
5338 }
5339 }
5340 else
5341 {
5342 TI_DBG1(("ossaSSPAbortCB: wrong flag %d\n", flag));
5343 }
5344 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Ya");
5345 return;
5346
5347}
5348#endif
5349
5350
5351#ifdef TARGET_DRIVER
5353 agsaRoot_t *agRoot,
5354 agsaIORequest_t *agIORequest,
5355 bit32 flag,
5356 bit32 status)
5357{
5358 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
5359 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
5360 tdIORequestBody_t *tdAbortIORequestBody;
5361 tdsaDeviceData_t *oneDeviceData;
5363
5364 TI_DBG3(("ossaSSPAbortCB: start\n"));
5365 tdAbortIORequestBody = (tdIORequestBody_t *)agIORequest->osData;
5366
5367 if (flag == 2)
5368 {
5369 /* abort per port */
5370 TI_DBG2(("ossaSSPAbortCB: abort per port\n"));
5371 }
5372 else if (flag == 1)
5373 {
5374 TI_DBG2(("ossaSSPAbortCB: abort all\n"));
5375 tiDeviceHandle = (tiDeviceHandle_t *)tdAbortIORequestBody->tiDevHandle;
5376 oneDeviceData = (tdsaDeviceData_t *)tiDeviceHandle->tdData;
5377 if (status == OSSA_IO_SUCCESS)
5378 {
5379 TI_DBG2(("ossaSSPAbortCB: OSSA_IO_SUCCESS\n"));
5380 /* clean up TD layer's IORequestBody */
5381 TI_DBG3(("ossaSSPAbortCB: calling saDeregisterDeviceHandle\n"));
5382 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
5383 TI_DBG2(("ossaSSPAbortCB: did %d\n", oneDeviceData->id));
5385 tiRoot,
5386 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5387 sizeof(tdIORequestBody_t)
5388 );
5389
5390 }
5391 else if (status == OSSA_IO_NOT_VALID)
5392 {
5393 TI_DBG1(("ossaSSPAbortCB: OSSA_IO_NOT_VALID\n"));
5394 /* clean up TD layer's IORequestBody */
5395 TI_DBG2(("ossaSSPAbortCB: calling saDeregisterDeviceHandle\n"));
5396 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
5397 TI_DBG2(("ossaSSPAbortCB: did %d\n", oneDeviceData->id));
5399 tiRoot,
5400 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5401 sizeof(tdIORequestBody_t)
5402 );
5403 }
5404 else if (status == OSSA_IO_NO_DEVICE)
5405 {
5406 TI_DBG1(("ossaSSPAbortCB: OSSA_IO_NO_DEVICE\n"));
5407 /* clean up TD layer's IORequestBody */
5408 TI_DBG2(("ossaSSPAbortCB: calling saDeregisterDeviceHandle\n"));
5409 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
5410 TI_DBG2(("ossaSSPAbortCB: did %d\n", oneDeviceData->id));
5412 tiRoot,
5413 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5414 sizeof(tdIORequestBody_t)
5415 );
5416 }
5418 {
5419 TI_DBG1(("ossaSSPAbortCB: OSSA_IO_ABORT_IN_PROGRESS\n"));
5420 /* clean up TD layer's IORequestBody */
5421 TI_DBG2(("ossaSSPAbortCB: calling saDeregisterDeviceHandle\n"));
5422 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
5423 TI_DBG2(("ossaSSPAbortCB: did %d\n", oneDeviceData->id));
5425 tiRoot,
5426 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5427 sizeof(tdIORequestBody_t)
5428 );
5429 }
5430#ifdef REMOVED
5431 else if (status == OSSA_IO_ABORT_DELAYED)
5432 {
5433 TI_DBG1(("ossaSSPAbortCB: OSSA_IO_ABORT_DELAYED\n"));
5434 /* clean up TD layer's IORequestBody */
5435 TI_DBG2(("ossaSSPAbortCB: calling saDeregisterDeviceHandle\n"));
5436 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
5437 TI_DBG2(("ossaSSPAbortCB: did %d\n", oneDeviceData->id));
5439 tiRoot,
5440 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5441 sizeof(tdIORequestBody_t)
5442 );
5443 }
5444#endif
5445 else
5446 {
5447 TI_DBG1(("ossaSSPAbortCB: other status %d\n", status));
5448 /* clean up TD layer's IORequestBody */
5449 TI_DBG2(("ossaSSPAbortCB: calling saDeregisterDeviceHandle\n"));
5450 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
5451 TI_DBG1(("ossaSSPAbortCB: did %d\n", oneDeviceData->id));
5453 tiRoot,
5454 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5455 sizeof(tdIORequestBody_t)
5456 );
5457 }
5458 }
5459 else if (flag == 0)
5460 {
5461 TI_DBG2(("ossaSSPAbortCB: abort one\n"));
5462 if (status == OSSA_IO_SUCCESS)
5463 {
5464 TI_DBG2(("ossaSSPAbortCB: OSSA_IO_SUCCESS\n"));
5466 tiRoot,
5467 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5468 sizeof(tdIORequestBody_t)
5469 );
5470
5471 }
5472 else if (status == OSSA_IO_NOT_VALID)
5473 {
5474 TI_DBG1(("ossaSSPAbortCB: OSSA_IO_NOT_VALID\n"));
5476 tiRoot,
5477 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5478 sizeof(tdIORequestBody_t)
5479 );
5480 }
5481 else if (status == OSSA_IO_NO_DEVICE)
5482 {
5483 TI_DBG1(("ossaSSPAbortCB: OSSA_IO_NO_DEVICE\n"));
5485 tiRoot,
5486 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5487 sizeof(tdIORequestBody_t)
5488 );
5489 }
5491 {
5492 TI_DBG1(("ossaSSPAbortCB: OSSA_IO_ABORT_IN_PROGRESS\n"));
5494 tiRoot,
5495 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5496 sizeof(tdIORequestBody_t)
5497 );
5498 }
5499#ifdef REMOVED
5500 else if (status == OSSA_IO_ABORT_DELAYED)
5501 {
5502 TI_DBG1(("ossaSSPAbortCB: OSSA_IO_ABORT_DELAYED\n"));
5504 tiRoot,
5505 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5506 sizeof(tdIORequestBody_t)
5507 );
5508 }
5509#endif
5510 else
5511 {
5512 TI_DBG1(("ossaSSPAbortCB: other status %d\n", status));
5514 tiRoot,
5515 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
5516 sizeof(tdIORequestBody_t)
5517 );
5518 }
5519 }
5520 else
5521 {
5522 TI_DBG1(("ossaSSPAbortCB: wrong flag %d\n", flag));
5523 }
5524
5525 return;
5526
5527}
5528#endif
5529
5530
5531/*****************************************************************************/
5548/*****************************************************************************/
5550 agsaRoot_t *agRoot,
5551 agsaContext_t *agContext,
5552 bit32 phyId,
5553 bit32 phyOperation,
5554 bit32 status,
5555 void *parm
5556 )
5557{
5558#ifdef REMVOED
5559 agsaPhyErrCounters_t *agPhyErrCounters;
5560#endif
5561#ifdef INITIATOR_DRIVER
5562 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
5563 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
5564 tiIORequest_t *currentTaskTag;
5565 tdsaDeviceData_t *TargetDeviceData;
5566 satDeviceData_t *pSatDevData;
5567 agsaDevHandle_t *agDevHandle = agNULL;
5568 agsaContext_t *agContextDevice;
5569#endif
5570
5572 TI_DBG3(("ossaLocalPhyControlCB: start phyID %d\n", phyId));
5573 TI_DBG3(("ossaLocalPhyControlCB: phyOperation %d status 0x%x\n", phyOperation, status));
5574 switch (phyOperation)
5575 {
5576 case AGSA_PHY_LINK_RESET: /* fall through */
5578 if (phyOperation == AGSA_PHY_LINK_RESET)
5579 {
5580 TI_DBG1(("ossaLocalPhyControlCB: AGSA_PHY_LINK_RESET, status 0x%x\n", status));
5581 }
5582 else
5583 {
5584 TI_DBG1(("ossaLocalPhyControlCB: AGSA_PHY_HARD_RESET, status 0x%x\n", status));
5585 }
5586#ifdef INITIATOR_DRIVER
5587 if (agContext != agNULL)
5588 {
5589 currentTaskTag = (tiIORequest_t *)agContext->osData;
5590 if (status == OSSA_SUCCESS)
5591 {
5592 if (currentTaskTag != agNULL)
5593 {
5594 TI_DBG2(("ossaLocalPhyControlCB: callback to OS layer with success\n"));
5595 TargetDeviceData = (tdsaDeviceData_t *)currentTaskTag->tdData;
5596 pSatDevData = (satDeviceData_t *)&(TargetDeviceData->satDevData);
5597 agDevHandle = TargetDeviceData->agDevHandle;
5598 TI_DBG2(("ossaLocalPhyControlCB: satPendingIO %d satNCQMaxIO %d\n", pSatDevData->satPendingIO, pSatDevData->satNCQMaxIO ));
5599 TI_DBG2(("ossaLocalPhyControlCB: satPendingNCQIO %d satPendingNONNCQIO %d\n", pSatDevData->satPendingNCQIO, pSatDevData->satPendingNONNCQIO));
5600 pSatDevData->satDriveState = SAT_DEV_STATE_NORMAL;
5601
5602 if (TargetDeviceData->TRflag == agTRUE)
5603 {
5604 saSetDeviceState(agRoot, agNULL, tdsaRotateQnumber(tiRoot, TargetDeviceData), agDevHandle, SA_DS_OPERATIONAL);
5605 TargetDeviceData->TRflag = agFALSE;
5607 TargetDeviceData->tdPortContext->tiPortalContext,
5608 &(TargetDeviceData->tiDeviceHandle),
5610 tiRecOK,
5611 agNULL
5612 );
5613 }
5614 else
5615 {
5616 agDevHandle = TargetDeviceData->agDevHandle;
5617 if (agDevHandle == agNULL)
5618 {
5619 TI_DBG1(("ossaLocalPhyControlCB: wrong, agDevHandle is NULL\n"));
5620 }
5621 /* move this to OSSA_HW_EVENT_PORT_RESET_COMPLETE in ossaHwCB() */
5622 agContextDevice = &(TargetDeviceData->agDeviceResetContext);
5623 agContextDevice->osData = currentTaskTag;
5624
5625#ifdef REMOVED
5627 NULL,
5628 NULL,
5630 tiTMOK,
5631 currentTaskTag );
5632#endif
5633 }
5634 }
5635 }
5636 else
5637 {
5638 if (currentTaskTag != agNULL)
5639 {
5640 TI_DBG1(("ossaLocalPhyControlCB: callback to OS layer with failure\n"));
5641 TargetDeviceData = (tdsaDeviceData_t *)currentTaskTag->tdData;
5642 pSatDevData = (satDeviceData_t *)&(TargetDeviceData->satDevData);
5643 TI_DBG1(("ossaLocalPhyControlCB: satPendingIO %d satNCQMaxIO %d\n", pSatDevData->satPendingIO, pSatDevData->satNCQMaxIO ));
5644 TI_DBG1(("ossaLocalPhyControlCB: satPendingNCQIO %d satPendingNONNCQIO %d\n", pSatDevData->satPendingNCQIO, pSatDevData->satPendingNONNCQIO));
5645 if (TargetDeviceData->TRflag == agTRUE)
5646 {
5647 TargetDeviceData->TRflag = agFALSE;
5649 TargetDeviceData->tdPortContext->tiPortalContext,
5650 &(TargetDeviceData->tiDeviceHandle),
5652 tiRecFailed ,
5653 agNULL
5654 );
5655 }
5656 else
5657 {
5659 NULL,
5660 NULL,
5662 tiTMFailed,
5663 currentTaskTag );
5664 }
5665 }
5666 }
5667 }
5668#endif
5669 break;
5670#ifdef REMOVED
5672
5673 TI_DBG2(("ossaLocalPhyControlCB: AGSA_PHY_GET_ERROR_COUNTS, status 0x%x\n", status));
5674 if(parm !=agNULL )
5675 {
5676 agPhyErrCounters = (agsaPhyErrCounters_t *)parm;
5677 TI_DBG2(("ossaLocalPhyControlCB: invalidDword %d\n", agPhyErrCounters->invalidDword));
5678 TI_DBG2(("ossaLocalPhyControlCB: runningDisparityError %d\n", agPhyErrCounters->runningDisparityError));
5679 TI_DBG2(("ossaLocalPhyControlCB: lostOfDwordSynch %d\n", agPhyErrCounters->lossOfDwordSynch));
5680 TI_DBG2(("ossaLocalPhyControlCB: phyResetProblem %d\n", agPhyErrCounters->phyResetProblem));
5681 TI_DBG2(("ossaLocalPhyControlCB: elasticityBufferOverflow %d\n", agPhyErrCounters->elasticityBufferOverflow));
5682 TI_DBG2(("ossaLocalPhyControlCB: receivedErrorPrimitive %d\n", agPhyErrCounters->receivedErrorPrimitive));
5683 }
5684 break;
5686 TI_DBG2(("ossaLocalPhyControlCB: AGSA_PHY_CLEAR_ERROR_COUNTS, status 0x%x\n", status));
5687 break;
5688#endif
5690 TI_DBG2(("ossaLocalPhyControlCB: AGSA_PHY_NOTIFY_ENABLE_SPINUP, status 0x%x\n", status));
5691 break;
5693 TI_DBG2(("ossaLocalPhyControlCB: AGSA_PHY_BROADCAST_ASYNCH_EVENT, status 0x%x\n", status));
5694 if (tIsSPC12SATA(agRoot))
5695 {
5696 TI_DBG1(("ossaLocalPhyControlCB: BROADCAST_ASYNCH_EVENT received for SATA Controller\n"));
5697 break;
5698 }
5699 break;
5701 TI_DBG2(("ossaLocalPhyControlCB: AGSA_PHY_COMINIT_OOB, status 0x%x\n", status));
5702 break;
5703 default:
5704 TI_DBG1(("ossaLocalPhyControlCB: UNKNOWN default case. phyOperation %d status 0x%x\n", phyOperation, status));
5705 break;
5706 }
5707 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Yb");
5708 return;
5709}
5710
5712 agsaRoot_t *agRoot,
5713 agsaContext_t *agContext,
5714 bit32 status,
5715 bit32 ppc,
5716 bit32 phyID,
5717 void *parm )
5718{
5719
5720 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
5721 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
5722 tdsaRoot_t *tdsaRoot = (tdsaRoot_t *) tiRoot->tdData;
5723 tdsaContext_t *tdsaAllShared = (tdsaContext_t *)&tdsaRoot->tdsaAllShared;
5724#ifdef CCFLAGS_PHYCONTROL_COUNTS
5726#endif /* CCFLAGS_PHYCONTROL_COUNTS */
5727 tdPhyCount_t *PhyBlob = agNULL;
5728
5729 agsaPhyBWCountersPage_t *agBWCounters;
5730 agsaPhyErrCountersPage_t *agPhyErrCounters;
5731 TI_DBG1(("ossaGetPhyProfileCB: agContext %p parm %p\n", agContext, parm));
5732/*
5733 if( tdsaAllShared->tdFWControlEx.inProgress )
5734 {
5735 tdsaAllShared->tdFWControlEx.inProgress = 0;
5736 PhyBlob = (tdPhyCount_t *)tdsaAllShared->tdFWControlEx.usrAddr;
5737 }
5738*/
5739 switch(ppc)
5740 {
5742 TI_DBG1(("ossaGetPhyProfileCB: AGSA_SAS_PHY_BW_COUNTERS_PAGE, status 0x%x phyID %d\n", status, phyID));
5743 if(parm !=agNULL )
5744 {
5745 agBWCounters = (agsaPhyBWCountersPage_t *)parm;
5746 TI_DBG1(("ossaGetPhyProfileCB: RX %d TX %d\n", agBWCounters->RXBWCounter,agBWCounters->TXBWCounter));
5747 if(PhyBlob !=agNULL )
5748 {
5749 PhyBlob->InvalidDword = 0;
5750 PhyBlob->runningDisparityError = 0;
5751 PhyBlob->codeViolation = 0;
5752 PhyBlob->phyResetProblem = 0;
5753 PhyBlob->inboundCRCError = 0;
5754 PhyBlob->BW_rx = agBWCounters->RXBWCounter;
5755 PhyBlob->BW_tx = agBWCounters->TXBWCounter;
5756 }
5757
5758 }
5759 break;
5761 if( tdsaAllShared->tdFWControlEx.inProgress )
5762 {
5763 tdsaAllShared->tdFWControlEx.inProgress = 0;
5764 PhyBlob = (tdPhyCount_t *)tdsaAllShared->tdFWControlEx.usrAddr;
5765 }
5766 TI_DBG1(("ossaGetPhyProfileCB: AGSA_SAS_PHY_ERR_COUNTERS_PAGE, status 0x%x phyID %d\n", status, phyID));
5767 if(parm !=agNULL )
5768 {
5769 agPhyErrCounters = (agsaPhyErrCountersPage_t *)parm;
5770 if(PhyBlob !=agNULL )
5771 {
5772
5773 PhyBlob->InvalidDword = agPhyErrCounters->invalidDword;
5774 PhyBlob->runningDisparityError = agPhyErrCounters->runningDisparityError;
5775 PhyBlob->LossOfSyncDW = agPhyErrCounters->lossOfDwordSynch;
5776 PhyBlob->codeViolation = agPhyErrCounters->codeViolation;
5777 PhyBlob->phyResetProblem = agPhyErrCounters->phyResetProblem;
5778 PhyBlob->inboundCRCError = agPhyErrCounters->inboundCRCError;
5779 PhyBlob->BW_rx = 0;
5780 PhyBlob->BW_tx = 0;
5781
5782 TI_DBG2(("ossaGetPhyProfileCB: invalidDword %d\n", agPhyErrCounters->invalidDword));
5783 TI_DBG2(("ossaGetPhyProfileCB: runningDisparityError %d\n", agPhyErrCounters->runningDisparityError));
5784 TI_DBG2(("ossaGetPhyProfileCB: lostOfDwordSynch %d\n", agPhyErrCounters->lossOfDwordSynch));
5785 TI_DBG2(("ossaGetPhyProfileCB: phyResetProblem %d\n", agPhyErrCounters->phyResetProblem));
5786 TI_DBG2(("ossaGetPhyProfileCB: inboundCRCError %d\n", agPhyErrCounters->inboundCRCError));
5787 }
5788 }
5789 break;
5791 TI_DBG1(("ossaGetPhyProfileCB: AGSA_SAS_PHY_ERR_COUNTERS_CLR_PAGE status 0x%x phyID %d\n", status, phyID));
5792 break;
5794 TI_DBG1(("ossaGetPhyProfileCB:AGSA_SAS_PHY_ANALOG_SETTINGS_PAGE status 0x%x phyID %d\n", status, phyID));
5795#ifdef CCFLAGS_PHYCONTROL_COUNTS
5796 if(parm !=agNULL )
5797 {
5798 analog = (agsaPhyAnalogSettingsPage_t *)parm;
5799 TI_DBG1(("ossaGetPhyProfileCB: 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",
5800 analog->Dword0, analog->Dword1, analog->Dword2, analog->Dword3, analog->Dword4,
5801 analog->Dword5, analog->Dword6, analog->Dword7, analog->Dword8, analog->Dword9));
5802 tdsaAllShared->analog[phyID].spaRegister0 = analog->Dword0;
5803 tdsaAllShared->analog[phyID].spaRegister1 = analog->Dword1;
5804 tdsaAllShared->analog[phyID].spaRegister2 = analog->Dword2;
5805 tdsaAllShared->analog[phyID].spaRegister3 = analog->Dword3;
5806 tdsaAllShared->analog[phyID].spaRegister4 = analog->Dword4;
5807 saSetPhyProfile( agRoot,agContext,tdsaRotateQnumber(tiRoot, agNULL), AGSA_SAS_PHY_ANALOG_SETTINGS_PAGE,sizeof(agsaPhyAnalogSetupRegisters_t),&tdsaAllShared->analog[phyID],phyID);
5808 }
5809#endif /* CCFLAGS_PHYCONTROL_COUNTS */
5810 break;
5812 {
5813 TI_DBG1(("ossaGetPhyProfileCB:AGSA_SAS_PHY_OPEN_REJECT_RETRY_BACKOFF_THRESHOLD_PAGE status 0x%x phyID %d\n", status, phyID));
5814 if( parm !=agNULL )
5815 {
5816#ifdef TD_DEBUG_ENABLE
5819#endif
5820 TI_DBG2(("ossaGetPhyProfileCB: DW0 0x%X DW1 0x%X DW2 0x%X DW3 0x%X\n",
5821 Backoff->Dword0,Backoff->Dword1,
5822 Backoff->Dword2,Backoff->Dword3));
5823 }
5824 break;
5825 }
5826
5828 {
5829 agsaSASPhyGeneralStatusPage_t * GenStatus = NULL;
5830
5831 TI_DBG1(("ossaGetPhyProfileCB: AGSA_SAS_PHY_GENERAL_STATUS_PAGE status 0x%x phyID %d\n",
5832 status, phyID));
5833 if( parm !=agNULL )
5834 {
5835 GenStatus=
5837 TI_DBG2(("ossaGetPhyProfileCB: "
5838 "AGSA_SAS_PHY_GENERAL_STATUS_PAGE status %d DW0 0x%x DW1 0x%x\n",
5839 status, GenStatus->Dword0, GenStatus->Dword1));
5840 }
5841 ostiGetPhyGeneralStatusRsp(tiRoot, GenStatus, phyID);
5842// break;
5843 return ;
5844 }
5845
5846 default:
5847 TI_DBG1(("ossaGetPhyProfileCB: UNKNOWN default case. phyOperation %d status 0x%x\n", ppc, status));
5848 break;
5849
5850 }
5851
5853
5854}
5855
5856
5858 agsaRoot_t *agRoot,
5859 agsaContext_t *agContext,
5860 bit32 status,
5861 bit32 ppc,
5862 bit32 phyID,
5863 void *parm )
5864{
5865 TI_DBG1(("ossaSetPhyProfileCB:agContext %p status 0x%x ppc %d phyID %d parm %p\n",agContext, status, ppc, phyID,parm));
5866}
5867
5868
5869/*****************************************************************************/
5890/*****************************************************************************/
5892 agsaRoot_t *agRoot,
5893 agsaContext_t *agContext,
5894 agsaPortContext_t *agPortContext,
5895 agsaDevHandle_t *agDev[],
5896 bit32 validDevs
5897 )
5898{
5899 TI_DBG2(("ossaGetDeviceHandlesCB: start\n"));
5900 TI_DBG2(("ossaGetDeviceHandlesCB: validDevs %d\n", validDevs));
5902#ifdef TO_DO
5903 for (i = 0 ; i < validDevs ; i++)
5904 {
5905 agDev[i];
5906 }
5907#endif
5908 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Yc");
5909 return;
5910}
5911
5912/*****************************************************************************/
5930/*****************************************************************************/
5932 agsaRoot_t *agRoot,
5933 agsaContext_t *agContext,
5934 agsaDevHandle_t *agDevHandle,
5935 bit32 status,
5936 void *agInfo
5937 )
5938{
5939
5940#ifdef TD_DEBUG_ENABLE
5941 agsaDeviceInfo_t *agDeviceInfo;
5942 agsaSASDeviceInfo_t *agSASDeviceInfo;
5943 agsaSATADeviceInfo_t *agSATADeviceInfo;
5944#endif
5946
5947 TI_DBG1(("ossaGetDeviceInfoCB: start agContext %p\n",agContext));
5948 switch (status)
5949 {
5951 TI_DBG1(("ossaGetDeviceInfoCB: OSSA_DEV_INFO_INVALID_HANDLE\n"));
5952 /*ostiGetDeviceInfoIOCTLRsp(tiRoot, status, agNULL);*/
5953 break;
5955#ifdef TD_DEBUG_ENABLE
5956 agDeviceInfo = (agsaDeviceInfo_t *)agInfo;
5957#endif
5958 TI_DBG1(("ossaGetDeviceInfoCB: OSSA_DEV_INFO_NO_EXTENDED_INFO\n"));
5959 TI_DBG1(("ossaGetDeviceInfoCB: sasAddressHi 0x%08x\n", SA_DEVINFO_GET_SAS_ADDRESSHI(agDeviceInfo)));
5960 TI_DBG1(("ossaGetDeviceInfoCB: sasAddressLo 0x%08x\n", SA_DEVINFO_GET_SAS_ADDRESSLO(agDeviceInfo)));
5961 TI_DBG1(("ossaGetDeviceInfoCB: devType_S_Rate 0x%08x\n", agDeviceInfo->devType_S_Rate));
5962 TI_DBG1(("ossaGetDeviceInfoCB: firstBurstSize 0x%08x\n", agDeviceInfo->firstBurstSize));
5963
5964 /*ostiPortEvent (tiRoot, tiGetDevInfo, tiSuccess,(void *)agContext );*/
5965 /*ostiGetDeviceInfoIOCTLRsp(tiRoot, status, agDeviceInfo);*/
5966 break;
5968#ifdef TD_DEBUG_ENABLE
5969 agSASDeviceInfo = (agsaSASDeviceInfo_t *)agInfo;
5970#endif
5971 TI_DBG2(("ossaGetDeviceInfoCB: OSSA_DEV_INFO_SAS_EXTENDED_INFO\n"));
5972 TI_DBG2(("ossaGetDeviceInfoCB: sasAddressHi 0x%08x\n", SA_DEVINFO_GET_SAS_ADDRESSHI(&agSASDeviceInfo->commonDevInfo)));
5973 TI_DBG2(("ossaGetDeviceInfoCB: sasAddressLo 0x%08x\n", SA_DEVINFO_GET_SAS_ADDRESSLO(&agSASDeviceInfo->commonDevInfo)));
5974 TI_DBG2(("ossaGetDeviceInfoCB: initiator_ssp_stp_smp %d\n", agSASDeviceInfo->initiator_ssp_stp_smp));
5975 TI_DBG2(("ossaGetDeviceInfoCB: target_ssp_stp_smp %d\n", agSASDeviceInfo->target_ssp_stp_smp));
5976 TI_DBG2(("ossaGetDeviceInfoCB: numOfPhys %d\n", agSASDeviceInfo->numOfPhys));
5977 TI_DBG2(("ossaGetDeviceInfoCB: phyIdentifier %d\n", agSASDeviceInfo->phyIdentifier));
5978
5979 break;
5981#ifdef TD_DEBUG_ENABLE
5982 agSATADeviceInfo = (agsaSATADeviceInfo_t *)agInfo;
5983#endif
5984 TI_DBG2(("ossaGetDeviceInfoCB: OSSA_DEV_INFO_SATA_EXTENDED_INFO\n"));
5985 TI_DBG2(("ossaGetDeviceInfoCB: sasAddressHi 0x%08x\n", SA_DEVINFO_GET_SAS_ADDRESSHI(&agSATADeviceInfo->commonDevInfo)));
5986 TI_DBG2(("ossaGetDeviceInfoCB: sasAddressLo 0x%08x\n", SA_DEVINFO_GET_SAS_ADDRESSLO(&agSATADeviceInfo->commonDevInfo)));
5987 TI_DBG2(("ossaGetDeviceInfoCB: connection %d\n", agSATADeviceInfo->connection));
5988 TI_DBG2(("ossaGetDeviceInfoCB: portMultiplierField %d\n", agSATADeviceInfo->portMultiplierField));
5989 TI_DBG2(("ossaGetDeviceInfoCB: stpPhyIdentifier %d\n", agSATADeviceInfo->stpPhyIdentifier));
5990#ifdef TD_DEBUG_ENABLE
5991 tdhexdump("ossaGetDeviceInfoCB: signature", (bit8 *)agSATADeviceInfo->signature, 8);
5992#endif
5993 break;
5994 default:
5995 TI_DBG2(("ossaGetDeviceInfoCB: error default case, status is %d\n", status));
5996 break;
5997 }
5998 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Yd");
5999 return;
6000}
6001
6002/*****************************************************************************/
6020/*****************************************************************************/
6022 agsaRoot_t *agRoot,
6023 agsaContext_t *agContext,
6024 bit32 status,
6025 agsaDevHandle_t *agDevHandle,
6026 bit32 deviceID
6027 )
6028{
6029#ifdef INITIATOR_DRIVER
6030 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
6031 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
6032 tdsaRoot_t *tdsaRoot = (tdsaRoot_t *) tiRoot->tdData;
6033 tdsaContext_t *tdsaAllShared = (tdsaContext_t *)&tdsaRoot->tdsaAllShared;
6034 bit32 Indenom = tdsaAllShared->QueueConfig.numInboundQueues;
6035 bit32 Outdenom = tdsaAllShared->QueueConfig.numOutboundQueues;
6036 tdsaDeviceData_t *oneDeviceData = (tdsaDeviceData_t *)agContext->osData;
6037 tdsaPortContext_t *onePortContext = oneDeviceData->tdPortContext;
6038 tiPortalContext_t *tiPortalContext = onePortContext->tiPortalContext;
6039#ifdef FDS_DM
6040 dmRoot_t *dmRoot = &(tdsaAllShared->dmRoot);
6041 dmPortContext_t *dmPortContext = &(onePortContext->dmPortContext);
6042 dmDeviceInfo_t dmDeviceInfo;
6043 bit32 DMstatus = DM_RC_FAILURE;
6044 bit16 ext = 0;
6045 bit32 expanderType = 1;
6046#endif
6047
6048#if defined(FDS_DM) && !defined(FDS_SM)
6049 bit32 IDstatus;
6050#endif
6051
6052#ifdef FDS_SM
6053 smRoot_t *smRoot = &(tdsaAllShared->smRoot);
6054 bit32 SMstatus = SM_RC_FAILURE;
6055#endif
6057 TI_DBG3(("ossaDeviceRegistrationCB: start status 0x%x\n",status));
6058 TI_DBG3(("ossaDeviceRegistrationCB: device AddrHi 0x%08x\n", oneDeviceData->SASAddressID.sasAddressHi));
6059 TI_DBG3(("ossaDeviceRegistrationCB: device AddrLo 0x%08x\n", oneDeviceData->SASAddressID.sasAddressLo));
6060 TI_DBG3(("ossaDeviceRegistrationCB: did 0x%x\n", oneDeviceData->id));
6061 TI_DBG3(("ossaDeviceRegistrationCB: deviceID 0x%x\n", deviceID));
6062 TI_DBG3(("ossaDeviceRegistrationCB: agDevHandle %p %p %p\n",agDevHandle,agDevHandle->osData,agDevHandle->sdkData ));
6063
6064 /* transient period caused by tdssReportRemovals(), device was in the middle
6065 of registration but port is invalidated
6066 */
6067 if (oneDeviceData->valid == agFALSE && oneDeviceData->valid2 == agFALSE
6068 && oneDeviceData->DeviceType == TD_DEFAULT_DEVICE)
6069 {
6070 if (status == OSSA_SUCCESS)
6071 {
6072 TI_DBG2(("ossaDeviceRegistrationCB: transient, calling saDeregisterDeviceHandle, did %d\n", oneDeviceData->id));
6073 oneDeviceData->agDevHandle = agDevHandle;
6074 agDevHandle->osData = oneDeviceData;
6075 if (DEVICE_IS_SATA_DEVICE(oneDeviceData) || DEVICE_IS_STP_TARGET(oneDeviceData))
6076 {
6077 if (oneDeviceData->satDevData.IDDeviceValid == agFALSE)
6078 {
6079 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, 0);
6080 }
6081 else
6082 {
6083 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
6084 }
6085 }
6086 else
6087 {
6088 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
6089 }
6090 }
6092 {
6093 /* do nothing */
6094 TI_DBG2(("ossaDeviceRegistrationCB: transient, do nothing did %d\n", oneDeviceData->id));
6095 }
6096 return;
6097 }
6098
6099 if (agDevHandle == agNULL)
6100 {
6101 TI_DBG3(("ossaDeviceRegistrationCB: agDevHandle is NULL\n"));
6102 }
6103 else
6104 {
6105 TI_DBG3(("ossaDeviceRegistrationCB: agDevHandle is NOT NULL\n"));
6106 }
6107
6108 switch (status)
6109 {
6110 case OSSA_SUCCESS:
6111 TI_DBG3(("ossaDeviceRegistrationCB: success\n"));
6112 TI_DBG2(("ossaDeviceRegistrationCB: Success did %d FW did 0x%x\n", oneDeviceData->id, deviceID));
6113 TI_DBG2(("ossaDeviceRegistrationCB: Success pid %d\n", onePortContext->id));
6114 if (agDevHandle == agNULL)
6115 {
6116 TI_DBG1(("ossaDeviceRegistrationCB: agDevHandle is NULL, wrong!\n"));
6117 return;
6118 }
6119 oneDeviceData->agDevHandle = agDevHandle;
6120 agDevHandle->osData = oneDeviceData;
6121 oneDeviceData->registered = agTRUE;
6122 oneDeviceData->InQID = oneDeviceData->id % Indenom;
6123 oneDeviceData->OutQID = oneDeviceData->id % Outdenom;
6124 onePortContext->RegisteredDevNums++;
6125
6126 TI_DBG3(("ossaDeviceRegistrationCB: direct %d STP target %d target_ssp_stp_smp %d\n", oneDeviceData->directlyAttached, DEVICE_IS_STP_TARGET(oneDeviceData), oneDeviceData->target_ssp_stp_smp));
6127 TI_DBG3(("ossaDeviceRegistrationCB: pid %d registeredNumDevice %d\n", onePortContext->id, onePortContext->RegisteredDevNums));
6128 TI_DBG3(("ossaDeviceRegistrationCB: pid %d Count %d\n", onePortContext->id, onePortContext->Count));
6129
6130#ifdef FDS_DM
6131 /* if device is an expander, register it to DM */
6132 if (onePortContext->valid == agTRUE)
6133 {
6134 if (DEVICE_IS_SMP_TARGET(oneDeviceData))
6135 {
6136 TI_DBG1(("ossaDeviceRegistrationCB: calling dmRegisterDevice\n"));
6137 TI_DBG1(("ossaDeviceRegistrationCB: device AddrHi 0x%08x\n", oneDeviceData->SASAddressID.sasAddressHi));
6138 TI_DBG1(("ossaDeviceRegistrationCB: device AddrLo 0x%08x\n", oneDeviceData->SASAddressID.sasAddressLo));
6139 /* set up dmDeviceInfo */
6140 osti_memset(&dmDeviceInfo, 0, sizeof(dmDeviceInfo_t));
6141 DEVINFO_PUT_SAS_ADDRESSLO(&dmDeviceInfo, oneDeviceData->SASAddressID.sasAddressLo);
6142 DEVINFO_PUT_SAS_ADDRESSHI(&dmDeviceInfo, oneDeviceData->SASAddressID.sasAddressHi);
6143 dmDeviceInfo.initiator_ssp_stp_smp = oneDeviceData->initiator_ssp_stp_smp;
6144 dmDeviceInfo.target_ssp_stp_smp = oneDeviceData->target_ssp_stp_smp;
6145 dmDeviceInfo.devType_S_Rate = oneDeviceData->agDeviceInfo.devType_S_Rate;
6146 if (oneDeviceData->directlyAttached == agTRUE)
6147 {
6148 /* setting SMP bit */
6149 ext = (bit16)(ext | 0x100);
6150 expanderType = SA_IDFRM_GET_DEVICETTYPE(&onePortContext->sasIDframe);
6151 ext = (bit16)( ext | (expanderType << 9));
6152 /* setting MCN field to 0xF */
6153 ext = (bit16)(ext | (bit16)(0xF << 11));
6154 TI_DBG1(("ossaDeviceRegistrationCB: directlyAttached ext 0x%x\n", ext));
6155 dmDeviceInfo.ext = ext;
6156 }
6157 DMstatus = dmRegisterDevice(dmRoot, dmPortContext, &dmDeviceInfo, oneDeviceData->agDevHandle);
6158 if (DMstatus != DM_RC_SUCCESS)
6159 {
6160 TI_DBG1(("ossaDeviceRegistrationCB: dmRegisterDevice failed!!! 0x%x\n", DMstatus));
6161 }
6162 }
6163 }
6164#endif /* FDS_DM */
6165#ifdef FDS_SM
6166 /* if device is SATA, register it to SM */
6167 if (onePortContext->valid == agTRUE)
6168 {
6169 if (DEVICE_IS_SATA_DEVICE(oneDeviceData) || DEVICE_IS_STP_TARGET(oneDeviceData))
6170 {
6171 TI_DBG1(("ossaDeviceRegistrationCB: calling smRegisterDevice\n"));
6172 if (oneDeviceData->directlyAttached == agTRUE)
6173 {
6174 SMstatus = smRegisterDevice(smRoot,
6175 agDevHandle,
6176 &(oneDeviceData->smDeviceHandle),
6177 agNULL,
6178 (bit32)oneDeviceData->phyID,
6179 oneDeviceData->satDevData.satDeviceType);
6180 }
6181 else
6182 {
6183 if (oneDeviceData->ExpDevice == agNULL)
6184 {
6185 TI_DBG1(("ossaDeviceRegistrationCB: oneDeviceData->ExpDevice NULL!!!\n"));
6186 return;
6187 }
6188 if (oneDeviceData->ExpDevice->agDevHandle == agNULL)
6189 {
6190 TI_DBG1(("ossaDeviceRegistrationCB: oneDeviceData->ExpDevice->agDevHandle NULL!!!\n"));
6191 }
6192 SMstatus = smRegisterDevice(smRoot,
6193 agDevHandle,
6194 &(oneDeviceData->smDeviceHandle),
6195 oneDeviceData->ExpDevice->agDevHandle,
6196 (bit32)oneDeviceData->phyID,
6197 oneDeviceData->satDevData.satDeviceType);
6198 }
6199 if (SMstatus != SM_RC_SUCCESS)
6200 {
6201 TI_DBG1(("ossaDeviceRegistrationCB: smRegisterDevice failed!!! 0x%x\n", DMstatus));
6202 }
6203 }
6204 }
6205#endif /* FDS_SM */
6206 /* special case for directly attached targets */
6207 if (oneDeviceData->directlyAttached == agTRUE)
6208 {
6209 TI_DBG3(("ossaDeviceRegistrationCB: directly attached did %d\n", oneDeviceData->id));
6210 if (oneDeviceData->DeviceType == TD_SAS_DEVICE)
6211 {
6212 TI_DBG3(("ossaDeviceRegistrationCB: SAS target\n"));
6213 if (onePortContext->valid == agTRUE)
6214 {
6215 if (onePortContext->PortRecoverPhyID != 0xFF)
6216 {
6217 oneDeviceData->phyID = (bit8)onePortContext->PortRecoverPhyID;
6218 onePortContext->PortRecoverPhyID = 0xFF;
6219 TI_DBG3(("ossaDeviceRegistrationCB: PortRecoverPhyID %d\n", oneDeviceData->phyID));
6220 }
6221 /* link up and discovery ready event */
6222 if (onePortContext->DiscoveryRdyGiven == agFALSE)
6223 {
6224 TI_DBG2(("ossaDeviceRegistrationCB: link up and discovery ready\n"));
6225 TI_DBG3(("ossaDeviceRegistrationCB: phyID %d pid %d\n", oneDeviceData->phyID, onePortContext->id));
6226 TI_DBG3(("ossaDeviceRegistrationCB: tiPortalContext %p\n", tdsaAllShared->Ports[oneDeviceData->phyID].tiPortalContext));
6227 TI_DBG3(("ossaDeviceRegistrationCB: onePortContext->tiPortalContext %p\n", onePortContext->tiPortalContext));
6228 onePortContext->DiscoveryRdyGiven = agTRUE;
6229 if (onePortContext->DiscoveryState != ITD_DSTATE_NOT_STARTED)
6230 {
6231 TI_DBG1(("ossaDeviceRegistrationCB: wrong discovery state 0x%x\n", onePortContext->DiscoveryState));
6232 }
6233 /* notifying link up */
6235 tiRoot,
6237 tiSuccess,
6238 (void *)onePortContext->tiPortalContext
6239 );
6240#ifdef INITIATOR_DRIVER
6241 /* triggers discovery */
6243 tiRoot,
6245 tiSuccess,
6246 (void *)onePortContext->tiPortalContext
6247 );
6248#endif
6249 }
6250 }
6251 else
6252 {
6253 TI_DBG2(("ossaDeviceRegistrationCB: abort call\n"));
6254 /* abort all followed by deregistration of sas target */
6255 tdsaAbortAll(tiRoot, agRoot, oneDeviceData);
6256 }
6257 }
6258 else
6259 {
6260 TI_DBG2(("ossaDeviceRegistrationCB: SATA target\n"));
6261 if (onePortContext->valid == agTRUE)
6262 {
6263 if (oneDeviceData->satDevData.IDDeviceValid == agFALSE)
6264 {
6265#ifdef FDS_SM
6266 /* send identify device data */
6267 tdIDStart(tiRoot, agRoot, smRoot, oneDeviceData, onePortContext);
6268
6269#else
6270 /* send identify device data */
6271 tdssSubAddSATAToSharedcontext(tiRoot, oneDeviceData);
6272#endif
6273 }
6274 }
6275 else
6276 {
6277 TI_DBG2(("ossaDeviceRegistrationCB: abort call\n"));
6278 /* abort all followed by deregistration of sas target */
6279 tdsaAbortAll(tiRoot, agRoot, oneDeviceData);
6280 }
6281 }
6282 }
6283 else /* behind the expander */
6284 {
6285#if defined(FDS_DM) && defined(FDS_SM)
6286 /* send ID to SATA targets
6287 needs go allocate tdIORequestBody_t for smIORequest
6288 */
6289
6290 if ( (DEVICE_IS_SATA_DEVICE(oneDeviceData) || DEVICE_IS_STP_TARGET(oneDeviceData))
6291 &&
6292 oneDeviceData->satDevData.IDDeviceValid == agFALSE)
6293 {
6294 tdIDStart(tiRoot, agRoot, smRoot, oneDeviceData, onePortContext);
6295 }
6296
6297#elif defined(FDS_DM) /* worked with DM */
6298 if ( (DEVICE_IS_SATA_DEVICE(oneDeviceData) || DEVICE_IS_STP_TARGET(oneDeviceData))
6299 &&
6300 oneDeviceData->satDevData.IDDeviceValid == agFALSE)
6301 {
6302 IDstatus = tdsaDiscoveryStartIDDev(tiRoot,
6303 agNULL,
6304 &(oneDeviceData->tiDeviceHandle),
6305 agNULL,
6306 oneDeviceData);
6307
6308 if (IDstatus != tiSuccess)
6309 {
6310 /* identify device data is not valid */
6311 TI_DBG1(("ossaDeviceRegistrationCB: fail or busy %d\n", IDstatus));
6312 oneDeviceData->satDevData.IDDeviceValid = agFALSE;
6313 }
6314 }
6315#endif
6316
6317
6318 }
6319 /* after discovery is finished */
6320 if (onePortContext->DiscoveryState == ITD_DSTATE_COMPLETED)
6321 {
6322 TI_DBG2(("ossaDeviceRegistrationCB: calling new device arrival\n"));
6323 if (DEVICE_IS_SSP_TARGET(oneDeviceData))
6324 {
6325 /* in case registration is finished after discovery is finished */
6326#ifdef AGTIAPI_CTL
6327 if (tdsaAllShared->SASConnectTimeLimit)
6328 tdsaCTLSet(tiRoot, onePortContext, tiIntrEventTypeDeviceChange,
6330 else
6331#endif
6333 tiRoot,
6335 agNULL,
6338 agNULL
6339 );
6340 }
6341 else if ( (DEVICE_IS_SATA_DEVICE(oneDeviceData) || DEVICE_IS_STP_TARGET(oneDeviceData))
6342 &&
6343 oneDeviceData->satDevData.IDDeviceValid == agTRUE )
6344 {
6345 /* in case registration is finished after discovery is finished */
6347 tiRoot,
6349 agNULL,
6352 agNULL
6353 );
6354 }
6355 }
6356 break;
6357 case OSSA_FAILURE_OUT_OF_RESOURCE: /* fall through */
6359 TI_DBG1(("ossaDeviceRegistrationCB: OSSA_FAILURE_OUT_OF_RESOURCE or OSSA_ERR_DEVICE_HANDLE_UNAVAILABLE\n"));
6360 oneDeviceData->registered = agFALSE;
6361 break;
6362 case OSSA_FAILURE_DEVICE_ALREADY_REGISTERED: /* fall through */
6364 /* do nothing */
6365 TI_DBG1(("ossaDeviceRegistrationCB: OSSA_FAILURE_DEVICE_ALREADY_REGISTERED or OSSA_ERR_DEVICE_ALREADY_REGISTERED\n"));
6366 break;
6367 case OSSA_FAILURE_INVALID_PHY_ID: /* fall through */
6369 TI_DBG1(("ossaDeviceRegistrationCB: OSSA_FAILURE_INVALID_PHY_ID or OSSA_ERR_PHY_ID_INVALID\n"));
6370 oneDeviceData->registered = agFALSE;
6371 break;
6372 case OSSA_FAILURE_PHY_ID_ALREADY_REGISTERED: /* fall through */
6374 /* do nothing */
6375 TI_DBG1(("ossaDeviceRegistrationCB: OSSA_FAILURE_PHY_ID_ALREADY_REGISTERED or OSSA_ERR_PHY_ID_ALREADY_REGISTERED\n"));
6376 break;
6377 case OSSA_FAILURE_PORT_ID_OUT_OF_RANGE: /* fall through */
6379 TI_DBG1(("ossaDeviceRegistrationCB: OSSA_FAILURE_PORT_ID_OUT_OF_RANGE or OSSA_ERR_PORT_INVALID\n"));
6380 oneDeviceData->registered = agFALSE;
6381 break;
6382 case OSSA_FAILURE_PORT_NOT_VALID_STATE: /* fall through */
6384 TI_DBG1(("ossaDeviceRegistrationCB: OSSA_FAILURE_PORT_NOT_VALID_STATE or OSSA_ERR_PORT_STATE_NOT_VALID\n"));
6385 TI_DBG2(("ossaDeviceRegistrationCB: did %d pid %d\n", oneDeviceData->id, onePortContext->id));
6386 oneDeviceData->registered = agFALSE;
6387 /* transient period between link up and link down/port recovery */
6388 onePortContext->Transient = agTRUE;
6389 if (onePortContext->valid == agTRUE && (oneDeviceData->valid == agTRUE || oneDeviceData->valid2 == agTRUE))
6390 {
6391 TI_DBG1(("ossaDeviceRegistrationCB: retries regisration\n"));
6392#ifdef REMOVED
6393 //temp; setting MCN to tdsaAllShared->MCN
6394 oneDeviceData->agDeviceInfo.flag = oneDeviceData->agDeviceInfo.flag | (tdsaAllShared->MCN << 16);
6395 //end temp
6396#endif
6397 saRegisterNewDevice( /* ossaDeviceRegistrationCB */
6398 agRoot,
6399 &oneDeviceData->agContext,
6400 0,
6401 &oneDeviceData->agDeviceInfo,
6402 onePortContext->agPortContext,
6403 0
6404 );
6405 }
6406 else if (oneDeviceData->directlyAttached == agTRUE && DEVICE_IS_SATA_DEVICE(oneDeviceData))
6407 {
6408 TI_DBG1(("ossaDeviceRegistrationCB: directly attached SATA, put back into free list\n"));
6409 tdsaDeviceDataReInit(tiRoot, oneDeviceData);
6411 TDLIST_ENQUEUE_AT_TAIL(&(oneDeviceData->FreeLink), &(tdsaAllShared->FreeDeviceList));
6413 }
6414 break;
6415 case OSSA_FAILURE_DEVICE_TYPE_NOT_VALID: /* fall through */
6417 TI_DBG1(("ossaDeviceRegistrationCB: OSSA_FAILURE_DEVICE_TYPE_NOT_VALID or OSSA_ERR_DEVICE_TYPE_NOT_VALID\n"));
6418 oneDeviceData->registered = agFALSE;
6419 break;
6420 default:
6421 TI_DBG1(("ossaDeviceRegistrationCB: wrong. default status is %d\n", status));
6422 break;
6423
6424
6425 }
6426 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Ye");
6427 return;
6428#endif
6429}
6430
6431/*****************************************************************************/
6447/*****************************************************************************/
6449 agsaRoot_t *agRoot,
6450 agsaContext_t *agContext,
6451 agsaDevHandle_t *agDevHandle,
6453 )
6454{
6455 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
6456 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
6457 tdsaRoot_t *tdsaRoot = (tdsaRoot_t *) tiRoot->tdData;
6458 tdsaContext_t *tdsaAllShared = (tdsaContext_t *)&tdsaRoot->tdsaAllShared;
6459 tdsaDeviceData_t *oneDeviceData = agNULL;
6460 tdsaPortContext_t *onePortContext = agNULL;
6461 agsaEventSource_t *eventSource;
6462 bit32 HwAckSatus;
6463 bit32 PhyID;
6464#ifdef FDS_DM
6465 dmRoot_t *dmRoot = &(tdsaAllShared->dmRoot);
6466 dmPortContext_t *dmPortContext = agNULL;
6467 dmPortInfo_t dmPortInfo;
6468 bit32 DMstatus = DM_RC_FAILURE;
6469#endif
6470#ifdef FDS_SM
6471 smRoot_t *smRoot = &(tdsaAllShared->smRoot);
6472#endif
6473
6474 TI_DBG3(("ossaDeregisterDeviceHandleCB: start\n"));
6476
6478 {
6479 /* there is no device handle to process */
6480 TI_DBG2(("ossaDeregisterDeviceHandleCB: OSSA_ERR_DEVICE_HANDLE_INVALID\n"));
6481 return;
6482 }
6483
6484 oneDeviceData = (tdsaDeviceData_t *)agDevHandle->osData;
6485 onePortContext = oneDeviceData->tdPortContext;
6486#ifdef FDS_DM
6487 dmPortContext = &(onePortContext->dmPortContext);
6488#endif
6489
6490 if (oneDeviceData->valid == agFALSE && oneDeviceData->valid2 == agFALSE &&
6491 oneDeviceData->DeviceType == TD_DEFAULT_DEVICE && onePortContext->valid == agTRUE)
6492 {
6493 TI_DBG2(("ossaDeregisterDeviceHandleCB: transient did %d\n", oneDeviceData->id));
6494 return;
6495 }
6496
6497 if (onePortContext != agNULL)
6498 {
6499 TI_DBG2(("ossaDeregisterDeviceHandleCB: pid %d registeredNumDevice %d\n", onePortContext->id, onePortContext->RegisteredDevNums));
6500 }
6501
6502 switch (status)
6503 {
6504 case OSSA_SUCCESS:
6505 TI_DBG3(("ossaDeregisterDeviceHandleCB: Success\n"));
6506 if (onePortContext == agNULL)
6507 {
6508 TI_DBG1(("ossaDeregisterDeviceHandleCB: onePortContext is NULL, wrong!\n"));
6509 return;
6510 }
6511 /* port is going down */
6512 if (onePortContext->valid == agFALSE)
6513 {
6514 if (!(oneDeviceData->valid == agFALSE && oneDeviceData->valid2 == agFALSE && oneDeviceData->DeviceType == TD_DEFAULT_DEVICE))
6515 {
6516 /* remove oneDevice from MainLink */
6517 TI_DBG2(("ossaDeregisterDeviceHandleCB: delete from MainLink\n"));
6518#ifdef FDS_SM
6519 if (DEVICE_IS_SATA_DEVICE(oneDeviceData) || DEVICE_IS_STP_TARGET(oneDeviceData))
6520 {
6521 TI_DBG1(("ossaDeregisterDeviceHandleCB: did %d calling smDeregisterDevice\n", oneDeviceData->id));
6522 smDeregisterDevice(smRoot, oneDeviceData->agDevHandle, &(oneDeviceData->smDeviceHandle));
6523 }
6524#endif
6525 tdsaDeviceDataReInit(tiRoot, oneDeviceData);
6526 osti_memset(&(oneDeviceData->satDevData.satIdentifyData), 0xFF, sizeof(agsaSATAIdentifyData_t));
6527
6529 TDLIST_DEQUEUE_THIS(&(oneDeviceData->MainLink));
6530 TDLIST_ENQUEUE_AT_TAIL(&(oneDeviceData->FreeLink), &(tdsaAllShared->FreeDeviceList));
6532 }
6533 /* for portcontext */
6534 PhyID = onePortContext->eventPhyID;
6535 TI_DBG3(("ossaDeregisterDeviceHandleCB: PhyID %d\n", PhyID));
6536 onePortContext->RegisteredDevNums--;
6537 /*
6538 check if valid in tdsaAllShared and the last registered device in a portcontext;
6539 if so, call saHwEventAck()
6540 */
6541 if (tdsaAllShared->eventSource[PhyID].EventValid == agTRUE &&
6542 onePortContext->RegisteredDevNums == 0 &&
6543 PhyID != 0xFF
6544 )
6545 {
6546 TI_DBG2(("ossaDeregisterDeviceHandleCB: calling saHwEventAck\n"));
6547 eventSource = &(tdsaAllShared->eventSource[PhyID].Source);
6548 HwAckSatus = saHwEventAck(
6549 agRoot,
6550 agNULL, /* agContext */
6551 0,
6552 eventSource, /* agsaEventSource_t */
6553 0,
6554 0
6555 );
6556 if ( HwAckSatus != AGSA_RC_SUCCESS)
6557 {
6558 TI_DBG1(("ossaDeregisterDeviceHandleCB: failing in saHwEventAck; status %d\n", HwAckSatus));
6559 }
6560
6561 /* toggle */
6562 tdsaAllShared->eventSource[PhyID].EventValid = agFALSE;
6563
6564#ifdef FDS_DM
6565 if (onePortContext->UseDM == agTRUE)
6566 {
6567 TI_DBG1(("ossaDeregisterDeviceHandleCB: calling dmDestroyPort\n"));
6568 /* setup dmPortInfo */
6569 PORTINFO_PUT_SAS_REMOTE_ADDRESSLO(&dmPortInfo, onePortContext->sasRemoteAddressLo);
6570 PORTINFO_PUT_SAS_REMOTE_ADDRESSHI(&dmPortInfo, onePortContext->sasRemoteAddressHi);
6571 PORTINFO_PUT_SAS_LOCAL_ADDRESSLO(&dmPortInfo, onePortContext->sasLocalAddressLo);
6572 PORTINFO_PUT_SAS_LOCAL_ADDRESSHI(&dmPortInfo, onePortContext->sasLocalAddressHi);
6573 DMstatus = dmDestroyPort(dmRoot, dmPortContext, &dmPortInfo);
6574 if (DMstatus != DM_RC_SUCCESS)
6575 {
6576 TI_DBG1(("ossaDeregisterDeviceHandleCB: dmDestroyPort failed!!! 0x%x\n", DMstatus));
6577 }
6578 }
6579#endif
6580 tdsaPortContextReInit(tiRoot, onePortContext);
6581 /*
6582 put all devices belonging to the onePortContext
6583 back to the free link
6584 */
6585
6587 TDLIST_DEQUEUE_THIS(&(onePortContext->MainLink));
6588 TDLIST_ENQUEUE_AT_TAIL(&(onePortContext->FreeLink), &(tdsaAllShared->FreePortContextList));
6590 }
6591 else if (tdsaAllShared->eventSource[PhyID].EventValid == NO_ACK &&
6592 onePortContext->RegisteredDevNums == 0
6593 )
6594 {
6595 TI_DBG2(("ossaDeregisterDeviceHandleCB: NO ACK case\n"));
6596#ifdef FDS_DM
6597 if (onePortContext->UseDM == agTRUE)
6598 {
6599 TI_DBG1(("ossaDeregisterDeviceHandleCB: calling dmDestroyPort\n"));
6600 /* setup dmPortInfo */
6601 PORTINFO_PUT_SAS_REMOTE_ADDRESSLO(&dmPortInfo, onePortContext->sasRemoteAddressLo);
6602 PORTINFO_PUT_SAS_REMOTE_ADDRESSHI(&dmPortInfo, onePortContext->sasRemoteAddressHi);
6603 PORTINFO_PUT_SAS_LOCAL_ADDRESSLO(&dmPortInfo, onePortContext->sasLocalAddressLo);
6604 PORTINFO_PUT_SAS_LOCAL_ADDRESSHI(&dmPortInfo, onePortContext->sasLocalAddressHi);
6605 DMstatus = dmDestroyPort(dmRoot, dmPortContext, &dmPortInfo);
6606 if (DMstatus != DM_RC_SUCCESS)
6607 {
6608 TI_DBG1(("ossaDeregisterDeviceHandleCB: dmDestroyPort failed!!! 0x%x\n", DMstatus));
6609 }
6610 }
6611#endif
6612 tdsaPortContextReInit(tiRoot, onePortContext);
6613 /*
6614 put all devices belonging to the onePortContext
6615 back to the free link
6616 */
6617
6619 TDLIST_DEQUEUE_THIS(&(onePortContext->MainLink));
6620 TDLIST_ENQUEUE_AT_TAIL(&(onePortContext->FreeLink), &(tdsaAllShared->FreePortContextList));
6622 }
6623 else
6624 {
6625 if (PhyID < TD_MAX_NUM_PHYS)
6626 {
6627 TI_DBG3(("ossaDeregisterDeviceHandleCB: pid %d eventvalid %d registeredNumDevice %d\n", onePortContext->id, tdsaAllShared->eventSource[PhyID].EventValid , onePortContext->RegisteredDevNums));
6628 }
6629 else
6630 {
6631 TI_DBG3(("ossaDeregisterDeviceHandleCB: pid %d registeredNumDevice %d wrong phyid %d\n", onePortContext->id, onePortContext->RegisteredDevNums, PhyID));
6632 }
6633 }
6634 }
6635 else
6636 {
6637 PhyID = onePortContext->eventPhyID;
6638 TI_DBG3(("ossaDeregisterDeviceHandleCB: PhyID %d\n", PhyID));
6639 onePortContext->RegisteredDevNums--;
6640#ifdef FDS_SM
6641 oneDeviceData->satDevData.IDDeviceValid = agFALSE;
6642 if (DEVICE_IS_SATA_DEVICE(oneDeviceData) || DEVICE_IS_STP_TARGET(oneDeviceData))
6643 {
6644 smDeregisterDevice(smRoot, oneDeviceData->agDevHandle, &(oneDeviceData->smDeviceHandle));
6645 }
6646#endif
6647 /*
6648 check if valid in tdsaAllShared and the last registered device in a portcontext;
6649 if so, call saHwEventAck()
6650 */
6651 if (tdsaAllShared->eventSource[PhyID].EventValid == agTRUE &&
6652 onePortContext->RegisteredDevNums == 0 &&
6653 PhyID != 0xFF
6654 )
6655 {
6656 TI_DBG2(("ossaDeregisterDeviceHandleCB: calling saHwEventAck\n"));
6657 eventSource = &(tdsaAllShared->eventSource[PhyID].Source);
6658 HwAckSatus = saHwEventAck(
6659 agRoot,
6660 agNULL, /* agContext */
6661 0,
6662 eventSource, /* agsaEventSource_t */
6663 0,
6664 0
6665 );
6666 if ( HwAckSatus != AGSA_RC_SUCCESS)
6667 {
6668 TI_DBG1(("ossaDeregisterDeviceHandleCB: failing in saHwEventAck; status %d\n", HwAckSatus));
6669 }
6670
6671 /* toggle */
6672 tdsaAllShared->eventSource[PhyID].EventValid = agFALSE;
6673 }
6674#ifdef INITIATOR_DRIVER
6675 else if (onePortContext->RegisteredDevNums == 1)
6676 {
6677 TI_DBG1(("ossaDeregisterDeviceHandleCB: all devices have been deregistered except directly attached EXP\n"));
6678 /* qqqqq If broadcast has been seen, call incremental discovery*/
6679 if (onePortContext->DiscFailNSeenBC == agTRUE)
6680 {
6681 TI_DBG1(("ossaDeregisterDeviceHandleCB: calling dmDiscover, incremental, pid %d\n", onePortContext->id));
6682 dmDiscover(dmRoot, dmPortContext, DM_DISCOVERY_OPTION_INCREMENTAL_START);
6683 onePortContext->DiscFailNSeenBC = agFALSE;
6684 }
6685 else
6686 {
6687 TI_DBG1(("ossaDeregisterDeviceHandleCB: not calling dmDiscover\n"));
6688 /* qqqqq needs to change discovery state to onePortContext->DMDiscoveryState == dmDiscCompleted
6689 in dmQueryDiscovery
6690 change the discovery state from dmDiscFailed to dmDiscCompleted
6691 */
6692 dmResetFailedDiscovery(dmRoot, dmPortContext);
6693
6694 }
6695 }
6696#endif
6697 else
6698 {
6699 if (PhyID < TD_MAX_NUM_PHYS)
6700 {
6701 TI_DBG3(("ossaDeregisterDeviceHandleCB: pid %d eventvalid %d registeredNumDevice %d\n", onePortContext->id, tdsaAllShared->eventSource[PhyID].EventValid , onePortContext->RegisteredDevNums));
6702 }
6703 else
6704 {
6705 TI_DBG3(("ossaDeregisterDeviceHandleCB: pid %d registeredNumDevice %d wrong phyid %d\n", onePortContext->id, onePortContext->RegisteredDevNums, PhyID));
6706 }
6707 }
6708 }
6709 break;
6711 TI_DBG1(("ossaDeregisterDeviceHandleCB: OSSA_INVALID_HANDLE\n"));
6712 break;
6713#ifdef REMOVED
6714 case OSSA_FAILURE_DEVICE_DIRECT_ATTACH:
6715 TI_DBG1(("ossaDeregisterDeviceHandleCB: OSSA_FAILURE_DEVICE_DIRECT_ATTACH\n"));
6716 break;
6717#endif
6719 TI_DBG1(("ossaDeregisterDeviceHandleCB: OSSA_ERR_DEVICE_HANDLE_INVALID\n"));
6720 break;
6722 TI_DBG1(("ossaDeregisterDeviceHandleCB: OSSA_ERR_DEVICE_BUSY\n"));
6723 break;
6724 default:
6725 TI_DBG1(("ossaDeregisterDeviceHandleCB: unknown status 0x%x\n", status));
6726 break;
6727 }
6728
6729 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Yf");
6730 return;
6731}
6732
6733/*****************************************************************************/
6749/*****************************************************************************/
6751 agsaRoot_t *agRoot,
6752 agsaDevHandle_t *agDevHandle,
6753 agsaPortContext_t *agPortContext
6754 )
6755{
6756#ifdef NOT_YET
6757 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
6758 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
6759#endif
6760 tdsaPortContext_t *onePortContext = agNULL;
6761 tdsaDeviceData_t *oneDeviceData = (tdsaDeviceData_t *)agDevHandle->osData;
6762
6764 TI_DBG2(("ossaDeviceHandleRemovedEvent: start\n"));
6765 if (oneDeviceData == agNULL)
6766 {
6767 TI_DBG1(("ossaDeviceHandleRemovedEvent: Wrong! oneDeviceData is NULL\n"));
6768 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Yg");
6769 return;
6770 }
6771 TI_DBG2(("ossaDeviceHandleRemovedEvent: did %d\n", oneDeviceData->id));
6772 oneDeviceData->registered = agFALSE;
6773 onePortContext = (tdsaPortContext_t *)agPortContext->osData;
6774 if (onePortContext == agNULL)
6775 {
6776 TI_DBG1(("ossaDeviceHandleRemovedEvent: Wrong! onePortContext is NULL\n"));
6777 smTraceFuncExit(hpDBG_VERY_LOUD, 'b', "Yg");
6778 return;
6779 }
6780 TI_DBG2(("ossaDeviceHandleRemovedEvent: pid %d\n", onePortContext->id));
6781 onePortContext->RegisteredDevNums--;
6782#ifdef NOT_YET
6784 tiRoot,
6785 onePortContext->tiPortalContext,
6786 agNULL,
6789 agNULL
6790 );
6791#endif
6792
6793 smTraceFuncExit(hpDBG_VERY_LOUD, 'c', "Yg");
6794 return;
6795}
6796
6797#ifdef SPC_ENABLE_PROFILE
6798/*****************************************************************************/
6814/*****************************************************************************/
6815osGLOBAL void ossaFwProfileCB(
6816 agsaRoot_t *agRoot,
6817 agsaContext_t *agContext,
6818 bit32 status,
6819 bit32 len)
6820{
6821 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
6822 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
6823
6824 TI_DBG2(("ossaFwProfileCB: start\n"));
6825
6826 switch (status)
6827 {
6828 case AGSA_RC_SUCCESS:
6829 {
6830 TI_DBG2(("ossaFwProfileCB: SUCCESS\n"));
6831 break;
6832 }
6833 case AGSA_RC_FAILURE:
6834 {
6835 TI_DBG1(("ossaFwProfileCB: FAIL\n"));
6836 break;
6837 }
6838 default:
6839 {
6840 TI_DBG1(("ossaFwProfileCB: !!! default, status %d\n", status));
6841 break;
6842 }
6843 }
6844
6845 ostiFWProfileIOCTLRsp(tiRoot, status, len);
6846 return;
6847}
6848#endif
6849/*****************************************************************************/
6865/*****************************************************************************/
6867 agsaRoot_t *agRoot,
6868 agsaContext_t *agContext,
6870 )
6871{
6872 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
6873 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
6874
6875 TI_DBG2(("ossaFwFlashUpdateCB: start\n"));
6876
6878 switch (status)
6879 {
6881 {
6882 TI_DBG2(("ossaFwFlashUpdateCB: OSSA_FLASH_UPDATE_COMPLETE_PENDING_REBOOT\n"));
6883 break;
6884 }
6886 {
6887 TI_DBG2(("ossaFwFlashUpdateCB: OSSA_FLASH_UPDATE_IN_PROGRESS\n"));
6888 break;
6889 }
6891 {
6892 TI_DBG1(("ossaFwFlashUpdateCB: OSSA_FLASH_UPDATE_HDR_ERR\n"));
6893 break;
6894 }
6896 {
6897 TI_DBG1(("ossaFwFlashUpdateCB: OSSA_FLASH_UPDATE_OFFSET_ERR\n"));
6898 break;
6899 }
6901 {
6902 TI_DBG1(("ossaFwFlashUpdateCB: OSSA_FLASH_UPDATE_CRC_ERR\n"));
6903 break;
6904 }
6906 {
6907 TI_DBG1(("ossaFwFlashUpdateCB: OSSA_FLASH_UPDATE_LENGTH_ERR\n"));
6908 break;
6909 }
6911 {
6912 TI_DBG1(("ossaFwFlashUpdateCB: OSSA_FLASH_UPDATE_HW_ERR\n"));
6913 break;
6914 }
6916 {
6917 TI_DBG1(("ossaFwFlashUpdateCB: OSSA_FLASH_UPDATE_DNLD_NOT_SUPPORTED\n"));
6918 break;
6919 }
6921 {
6922 TI_DBG1(("ossaFwFlashUpdateCB: OSSA_FLASH_UPDATE_DISABLED\n"));
6923 break;
6924 }
6926 {
6927 TI_DBG1(("ossaFwFlashUpdateCB: OSSA_FLASH_FWDNLD_DEVICE_UNSUPPORT\n"));
6928 break;
6929 }
6931 {
6932 TI_DBG1(("ossaFwFlashUpdateCB: OSSA_MPI_ERR_IO_RESOURCE_UNAVAILABLE\n"));
6933 break;
6934 }
6936 {
6937 TI_DBG1(("ossaFwFlashUpdateCB: OSSA_FLASH_UPDATE_HMAC_ERR\n"));
6938 break;
6939 }
6940
6941 default:
6942 {
6943 TI_DBG1(("ossaFwFlashUpdateCB: !!! default, status 0x%X\n", status));
6944 break;
6945 }
6946 }
6947
6948 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Yh");
6950 return;
6951
6952}
6953
6954
6956 agsaRoot_t *agRoot,
6957 agsaContext_t *agContext,
6958 bit32 status,
6959 bit32 command,
6960 agsaFlashExtResponse_t *agFlashExtRsp)
6961{
6962 TI_DBG1(("ossaFlashExtExecuteCB: command 0x%X status 0x%X\n",command, status));
6963
6964}
6965
6966
6967
6968/*****************************************************************************/
6988/*****************************************************************************/
6990 agsaRoot_t *agRoot,
6991 agsaContext_t *agContext,
6992 bit32 status,
6993 bit8 indirectPayload,
6994 bit32 agInfoLen,
6995 agsaFrameHandle_t agFrameHandle
6996)
6997{
6998 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
6999 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
7000 TI_DBG2(("ossaGetNVMDResponseCB: start\n"));
7001 TI_DBG2(("ossaGetNVMDResponseCB: agInfoLen %d\n", agInfoLen));
7003
7004 if (status == OSSA_SUCCESS)
7005 {
7006 TI_DBG2(("ossaGetNVMDResponseCB: Success status\n"));
7007 if (indirectPayload == 0 && agInfoLen != 0)
7008 {
7009 TI_DBG2(("ossaGetNVMDResponseCB: direct\n"));
7010 tdhexdump("ossaGetNVMDResponseCB", (bit8 *)agFrameHandle, agInfoLen);
7011 }
7012 }
7013 else
7014 {
7015 TI_DBG1(("ossaGetNVMDResponseCB: Status 0x%x\n", status));
7016 }
7017
7018 if (indirectPayload == 0)
7019 {
7020 TI_DBG2(("ossaGetNVMDResponseCB: direct\n"));
7021 }
7022 else
7023 {
7024 TI_DBG2(("ossaGetNVMDResponseCB: indirect\n"));
7025 }
7026
7028 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Yi");
7029 return;
7030}
7031
7032
7033/*****************************************************************************/
7049/*****************************************************************************/
7051 agsaRoot_t *agRoot,
7052 agsaContext_t *agContext,
7054 )
7055{
7056 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
7057 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
7058 TI_DBG2(("ossaSetNVMDResponseCB: start\n"));
7060 if (status == OSSA_SUCCESS)
7061 {
7062 TI_DBG2(("ossaSetNVMDResponseCB: success\n"));
7063 }
7064 else
7065 {
7066 TI_DBG1(("ossaSetNVMDResponseCB: fail or undefined staus %d\n", status));
7067 }
7069 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Yj");
7070 return;
7071}
7072
7073
7074#ifdef REMOVED
7075/*****************************************************************************/
7093/*****************************************************************************/
7094osGLOBAL void ossaGetVPDResponseCB(
7095 agsaRoot_t *agRoot,
7096 agsaContext_t *agContext,
7097 bit32 status,
7098 bit8 indirectMode,
7099 bit32 agInfoLen,
7100 agsaFrameHandle_t agFrameHandle
7101 )
7102{
7103 bit8 VPDData[48];
7104
7105 TI_DBG2(("ossaGetVPDResponseCB: start\n"));
7106
7108 if (status == OSSA_SUCCESS)
7109 {
7110 TI_DBG2(("ossaGetVPDResponseCB: agInfoLen %d\n", agInfoLen));
7111 osti_memset(VPDData, 0, 48);
7112 /* We can read only in case of Direct */
7113 saFrameReadBlock(agRoot, agFrameHandle, 0, VPDData, agInfoLen);
7114 tdhexdump("ossaGetVPDResponseCB", (bit8 *)VPDData, agInfoLen);
7115 /*
7116 callback osti....
7117 */
7118 }
7119 else
7120 {
7121 TI_DBG1(("ossaGetVPDResponseCB: fail or undefined staus %d\n", status));
7122 }
7123 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Yk");
7124 return;
7125}
7126
7127
7128/*****************************************************************************/
7144/*****************************************************************************/
7145osGLOBAL void ossaSetVPDResponseCB(
7146 agsaRoot_t *agRoot,
7147 agsaContext_t *agContext,
7149 )
7150{
7151 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
7152 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
7153
7154 TI_DBG2(("ossaSetVPDResponseCB: start\n"));
7156
7157 if (status == OSSA_SUCCESS)
7158 {
7159 TI_DBG2(("ossaSetVPDResponseCB: success\n"));
7161 /*
7162 callback osti.....
7163 */
7164
7165#ifdef VPD_TESTING
7166 /* temporary to test saSetVPDCommand() and saGetVPDCommand */
7167 tdsaVPDGet(tiRoot);
7168#endif
7169
7170 }
7171 else
7172 {
7173 TI_DBG1(("ossaSetVPDResponseCB: fail or undefined staus %d\n", status));
7174 }
7175 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Yl");
7176 return;
7177}
7178#endif
7179
7180/*****************************************************************************/
7196/*****************************************************************************/
7198 agsaRoot_t *agRoot,
7199 agsaContext_t *agContext,
7200 void *echoPayload
7201 )
7202{
7203#ifdef ECHO_TESTING
7204 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
7205 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
7206 bit8 payload[56];
7207#endif
7208
7209 TI_DBG2(("ossaEchoCB: start\n"));
7211
7212 /* dumping received echo payload is 56 bytes */
7213 tdhexdump("ossaEchoCB: echoPayload", (bit8 *)(echoPayload), 56);
7214
7215#ifdef ECHO_TESTING
7216 /* temporary to test saEchoCommand() */
7217
7218 /* new echo payload */
7219 osti_memset(payload,0, sizeof(payload));
7220
7221 payload[0] = gEcho;
7222 payload[55] = gEcho;
7223
7224 TI_DBG2(("ossaEchoCB: gEcho %d\n", gEcho));
7225
7226 saEchoCommand(agRoot, agNULL, tdsaRotateQnumber(tiRoot, agNULL), (void *)&payload);
7227
7228 if (gEcho == 0xFF)
7229 {
7230 gEcho = 0;
7231 }
7232 else
7233 {
7234 gEcho++;
7235 }
7236#endif
7237
7238 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Ym");
7239 return;
7240}
7241
7242/*****************************************************************************/
7265/*****************************************************************************/
7267 agsaRoot_t *agRoot,
7268 agsaContext_t *agContext,
7269 bit32 status,
7270 bit32 gpioReadValue,
7271 agsaGpioPinSetupInfo_t *gpioPinSetupInfo,
7272 agsaGpioEventSetupInfo_t *gpioEventSetupInfo
7273 )
7274{
7275 TI_DBG2(("ossaGpioResponseCB: start\n"));
7277 if (status == OSSA_SUCCESS)
7278 {
7279 TI_DBG2(("ossaGpioResponseCB: Success\n"));
7280 /* printing gpioReadValue, agsaGpioPinSetupInfo_t and agsaGpioEventSetupInfo_t */
7281 TI_DBG2(("ossaGpioResponseCB: gpioReadValue 0x%x\n", gpioReadValue));
7282 TI_DBG2(("ossaGpioResponseCB: PinSetupInfo gpioInputEnabled 0x%x\n", gpioPinSetupInfo->gpioInputEnabled));
7283 TI_DBG2(("ossaGpioResponseCB: PinSetupInfo gpioTypePart1 0x%x\n", gpioPinSetupInfo->gpioTypePart1));
7284 TI_DBG2(("ossaGpioResponseCB: PinSetupInfo gpioTypePart2 0x%x\n", gpioPinSetupInfo->gpioTypePart2));
7285 TI_DBG2(("ossaGpioResponseCB: EventSetupInfo gpioEventLevel 0x%x\n", gpioEventSetupInfo->gpioEventLevel));
7286 TI_DBG2(("ossaGpioResponseCB: EventSetupInfo gpioEventRisingEdge 0x%x\n", gpioEventSetupInfo->gpioEventRisingEdge));
7287 TI_DBG2(("ossaGpioResponseCB: EventSetupInfo gpioEventFallingEdge 0x%x\n", gpioEventSetupInfo->gpioEventFallingEdge));
7288 }
7289 else
7290 {
7291 TI_DBG1(("ossaGpioResponseCB: Failure\n"));
7292 }
7293 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Yn");
7294 return;
7295}
7296
7297/*****************************************************************************/
7313/*****************************************************************************/
7315 agsaRoot_t *agRoot,
7316 bit32 gpioEvent
7317 )
7318{
7319 TI_DBG2(("ossaGpioEvent: start\n"));
7320 TI_DBG2(("ossaGpioEvent: gpioEvent 0x%x\n", gpioEvent));
7322 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Yo");
7323 return;
7324}
7325
7326
7327/*****************************************************************************/
7346/*****************************************************************************/
7348 agsaRoot_t *agRoot,
7349 agsaContext_t *agContext,
7350 bit32 status,
7351 bit32 command,
7352 bit32 reportData)
7353{
7355 TI_DBG2(("ossaSASDiagExecuteCB: start\n"));
7356 TI_DBG2(("ossaSASDiagExecuteCB: status %d\n", status));
7357 TI_DBG2(("ossaSASDiagExecuteCB: command %d\n", command));
7358 TI_DBG2(("ossaSASDiagExecuteCB: reportData %d\n", reportData));
7359
7360 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Yq");
7361 return;
7362
7363}
7364
7365
7366/*****************************************************************************/
7382/*****************************************************************************/
7384 agsaRoot_t *agRoot,
7385 agsaContext_t *agContext,
7386 bit32 status)
7387{
7388 TI_DBG2(("ossaSASDiagStartEndCB: start\n"));
7389 TI_DBG2(("ossaSASDiagStartEndCB: status %d\n", status));
7391 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Yr");
7392 return;
7393}
7394
7395/*****************************************************************************/
7412/*****************************************************************************/
7414 agsaRoot_t *agRoot,
7415 agsaContext_t *agContext,
7416 bit32 status,
7417 agsaSASReconfig_t *agSASConfig)
7418{
7419 TI_DBG2(("ossaReconfigSASParamsCB: status %d\n", status));
7420 return;
7421}
7422
7424 agsaRoot_t *agRoot,
7425 agsaContext_t *agContext,
7426 bit32 status,
7427 bit32 command,
7429{
7430 TI_DBG2(("ossaPCIeDiagExecuteCB: status %d\n", status));
7431 TI_DBG2(("ossaPCIeDiagExecuteCB: ERR_BLKH 0x%X\n",resp->ERR_BLKH ));
7432 TI_DBG2(("ossaPCIeDiagExecuteCB: ERR_BLKL 0x%X\n",resp->ERR_BLKL ));
7433 TI_DBG2(("ossaPCIeDiagExecuteCB: DWord8 0x%X\n",resp->DWord8 ));
7434 TI_DBG2(("ossaPCIeDiagExecuteCB: DWord9 0x%X\n",resp->DWord9 ));
7435 TI_DBG2(("ossaPCIeDiagExecuteCB: DWord10 0x%X\n",resp->DWord10 ));
7436 TI_DBG2(("ossaPCIeDiagExecuteCB: DWord11 0x%X\n",resp->DWord11 ));
7437 TI_DBG2(("ossaPCIeDiagExecuteCB: DIF_ERR 0x%X\n",resp->DIF_ERR ));
7438
7439 return;
7440}
7441
7442
7443#ifndef BIOS
7445 agsaRoot_t *agRoot,
7446 agsaContext_t *agContext,
7447 agsaSGpioReqResponse_t *pSgpioResponse
7448 )
7449{
7450 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
7451 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
7452
7453 TI_DBG2(("ossaSGpioCB: smpFrameType: 0x%02x \n", pSgpioResponse->smpFrameType));
7454 // printf("SS:ossaSGpioCB: smpFrameType: 0x%02x \n", pSgpioResponse->smpFrameType);
7455 TI_DBG2(("ossaSGpioCB: function: 0x%02x \n", pSgpioResponse->function));
7456 TI_DBG2(("ossaSGpioCB: functionResult: 0x%02x \n", pSgpioResponse->functionResult));
7457 //printf("SS:ossaSGpioCB: functionResult: 0x%02x \n", pSgpioResponse->functionResult);
7458
7459 tdhexdump("ossaSGpioCB Response", (bit8 *)pSgpioResponse, sizeof(agsaSGpioReqResponse_t));
7460 ostiSgpioIoctlRsp(tiRoot, pSgpioResponse);
7461}
7462
7463#endif /* BIOS */
7464
7465/*****************************************************************************/
7482/*****************************************************************************/
7484 agsaRoot_t *agRoot,
7485 bit32 level,
7486 char *string,
7487 void *ptr1,
7488 void *ptr2,
7489 bit32 value1,
7490 bit32 value2
7491 )
7492{
7493#if defined(SALLSDK_DEBUG)
7494 TIDEBUG_MSG(gLLDebugLevel, level, ("%s %p %p %d %d\n", string, ptr1, ptr2, value1, value2));
7495#endif
7496 return;
7497}
7498
7499/*****************************************************************************/
7515/*****************************************************************************/
7517 agsaRoot_t *agRoot,
7518 agsaContext_t *agContext,
7520 )
7521{
7522 TI_DBG3(("ossaHwEventAckCB: start\n"));
7524 if (status == tiSuccess)
7525 {
7526 TI_DBG3(("ossaHwEventAckCB: SUCCESS status\n"));
7527 }
7528 else
7529 {
7530 TI_DBG1(("ossaHwEventAckCB: FAIL status 0x%X\n", status));
7531 TI_DBG1(("ossaHwEventAckCB: invalid event status bit0 %d\n", status & 0x01));
7532 TI_DBG1(("ossaHwEventAckCB: invalid phyid status bit1 %d\n", (status & 0x02) >> 1 ));
7533 TI_DBG1(("ossaHwEventAckCB: invalid portcontext status bit2 %d\n", (status & 0x04) >> 2));
7534 TI_DBG1(("ossaHwEventAckCB: invalid param0 status bit3 %d\n", (status & 0x08) >> 3));
7535 }
7536
7537 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Ys");
7538 return;
7539}
7540
7541/*****************************************************************************/
7560/*****************************************************************************/
7562 agsaRoot_t *agRoot,
7563 agsaContext_t *agContext,
7564 bit32 timeStampLower,
7565 bit32 timeStampUpper
7566 )
7567{
7569 TI_DBG4(("ossaGetTimeStampCB: start\n"));
7570 TI_DBG4(("ossaGetTimeStampCB: timeStampUpper 0x%x timeStampLower 0x%x\n", timeStampUpper, timeStampLower));
7571 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Yt");
7572 return;
7573}
7574
7575
7576/*****************************************************************************/
7591/*****************************************************************************/
7593 agsaRoot_t *agRoot,
7594 agsaIORequest_t *agIORequest,
7595 bit32 flag,
7596 bit32 status)
7597{
7598 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
7599 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
7600 tdIORequestBody_t *tdAbortIORequestBody = agNULL;
7601 tdsaDeviceData_t *oneDeviceData = agNULL;
7603
7604 TI_DBG4(("ossaSMPAbortCB: start\n"));
7605 TI_DBG4(("ossaSMPAbortCB: flag %d\n", flag));
7606 TI_DBG4(("ossaSMPAbortCB: status %d\n", status));
7608
7609 tdAbortIORequestBody = (tdIORequestBody_t *)agIORequest->osData;
7610 if (tdAbortIORequestBody == agNULL)
7611 {
7612 TI_DBG1(("ossaSMPAbortCB: tdAbortIORequestBody is NULL warning!!!!\n"));
7613 return;
7614 }
7615
7616 if (flag == 2)
7617 {
7618 /* abort per port */
7619 TI_DBG2(("ossaSMPAbortCB: abort per port\n"));
7620 }
7621 else if (flag == 1)
7622 {
7623 TI_DBG2(("ossaSMPAbortCB: abort all\n"));
7624
7625 tiDeviceHandle = (tiDeviceHandle_t *)tdAbortIORequestBody->tiDevHandle;
7626 if (tiDeviceHandle == agNULL)
7627 {
7628 TI_DBG1(("ossaSMPAbortCB: tiDeviceHandle is NULL warning!!!!\n"));
7630 tiRoot,
7631 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
7632 sizeof(tdIORequestBody_t)
7633 );
7634 return;
7635 }
7636
7637 oneDeviceData = (tdsaDeviceData_t *)tiDeviceHandle->tdData;
7638 if (oneDeviceData == agNULL)
7639 {
7640 TI_DBG1(("ossaSMPAbortCB: oneDeviceData is NULL warning!!!!\n"));
7642 tiRoot,
7643 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
7644 sizeof(tdIORequestBody_t)
7645 );
7646 return;
7647 }
7648
7649 if (status == OSSA_IO_SUCCESS)
7650 {
7651 TI_DBG2(("ossaSMPAbortCB: OSSA_IO_SUCCESS\n"));
7652 /* clean up TD layer's IORequestBody */
7653 TI_DBG3(("ossaSMPAbortCB: calling saDeregisterDeviceHandle\n"));
7654 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
7655 TI_DBG2(("ossaSMPAbortCB: did %d\n", oneDeviceData->id));
7657 tiRoot,
7658 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
7659 sizeof(tdIORequestBody_t)
7660 );
7661
7662 }
7663 else if (status == OSSA_IO_NOT_VALID)
7664 {
7665 TI_DBG1(("ossaSMPAbortCB: OSSA_IO_NOT_VALID\n"));
7666 /* clean up TD layer's IORequestBody */
7667 TI_DBG1(("ossaSMPAbortCB: calling saDeregisterDeviceHandle\n"));
7668 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
7669 TI_DBG1(("ossaSMPAbortCB: did %d\n", oneDeviceData->id));
7671 tiRoot,
7672 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
7673 sizeof(tdIORequestBody_t)
7674 );
7675 }
7676 else if (status == OSSA_IO_NO_DEVICE)
7677 {
7678 TI_DBG1(("ossaSMPAbortCB: OSSA_IO_NO_DEVICE\n"));
7679 /* clean up TD layer's IORequestBody */
7680 TI_DBG1(("ossaSMPAbortCB: calling saDeregisterDeviceHandle\n"));
7681 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
7682 TI_DBG1(("ossaSMPAbortCB: did %d\n", oneDeviceData->id));
7684 tiRoot,
7685 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
7686 sizeof(tdIORequestBody_t)
7687 );
7688 }
7690 {
7691 TI_DBG1(("ossaSMPAbortCB: OSSA_IO_ABORT_IN_PROGRESS\n"));
7692 /* clean up TD layer's IORequestBody */
7693 TI_DBG1(("ossaSMPAbortCB: calling saDeregisterDeviceHandle\n"));
7694 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
7695 TI_DBG1(("ossaSMPAbortCB: did %d\n", oneDeviceData->id));
7697 tiRoot,
7698 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
7699 sizeof(tdIORequestBody_t)
7700 );
7701 }
7702#ifdef REMOVED
7703 else if (status == OSSA_IO_ABORT_DELAYED)
7704 {
7705 TI_DBG1(("ossaSMPAbortCB: OSSA_IO_ABORT_DELAYED\n"));
7706 /* clean up TD layer's IORequestBody */
7707 TI_DBG1(("ossaSMPAbortCB: calling saDeregisterDeviceHandle\n"));
7708 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
7709 TI_DBG1(("ossaSMPAbortCB: did %d\n", oneDeviceData->id));
7711 tiRoot,
7712 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
7713 sizeof(tdIORequestBody_t)
7714 );
7715 }
7716#endif
7717 else
7718 {
7719 TI_DBG1(("ossaSMPAbortCB: other status %d\n", status));
7720 /* clean up TD layer's IORequestBody */
7721 TI_DBG1(("ossaSMPAbortCB: calling saDeregisterDeviceHandle\n"));
7722 saDeregisterDeviceHandle(agRoot, agNULL, oneDeviceData->agDevHandle, tdsaRotateQnumber(tiRoot, oneDeviceData));
7723 TI_DBG1(("ossaSMPAbortCB: did %d\n", oneDeviceData->id));
7725 tiRoot,
7726 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
7727 sizeof(tdIORequestBody_t)
7728 );
7729 }
7730 }
7731 else if (flag == 0)
7732 {
7733 TI_DBG2(("ossaSMPAbortCB: abort one\n"));
7734 if (status == OSSA_IO_SUCCESS)
7735 {
7736 TI_DBG2(("ossaSMPAbortCB: OSSA_IO_SUCCESS\n"));
7738 tiRoot,
7739 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
7740 sizeof(tdIORequestBody_t)
7741 );
7742
7743 }
7744 else if (status == OSSA_IO_NOT_VALID)
7745 {
7746 TI_DBG1(("ossaSMPAbortCB: OSSA_IO_NOT_VALID\n"));
7748 tiRoot,
7749 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
7750 sizeof(tdIORequestBody_t)
7751 );
7752 }
7753 else if (status == OSSA_IO_NO_DEVICE)
7754 {
7755 TI_DBG1(("ossaSMPAbortCB: OSSA_IO_NO_DEVICE\n"));
7757 tiRoot,
7758 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
7759 sizeof(tdIORequestBody_t)
7760 );
7761 }
7763 {
7764 TI_DBG1(("ossaSMPAbortCB: OSSA_IO_ABORT_IN_PROGRESS\n"));
7766 tiRoot,
7767 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
7768 sizeof(tdIORequestBody_t)
7769 );
7770 }
7771#ifdef REMOVED
7772 else if (status == OSSA_IO_ABORT_DELAYED)
7773 {
7774 TI_DBG1(("ossaSMPAbortCB: OSSA_IO_ABORT_DELAYED\n"));
7776 tiRoot,
7777 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
7778 sizeof(tdIORequestBody_t)
7779 );
7780 }
7781#endif
7782 else
7783 {
7784 TI_DBG1(("ossaSMPAbortCB: other status %d\n", status));
7786 tiRoot,
7787 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle,
7788 sizeof(tdIORequestBody_t)
7789 );
7790 }
7791 }
7792 else
7793 {
7794 TI_DBG1(("ossaSMPAbortCB: wrong flag %d\n", flag));
7795 }
7796
7797
7798 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Yu");
7799 return;
7800}
7801
7802/*****************************************************************************/
7818/*****************************************************************************/
7820 agsaRoot_t *agRoot,
7821 bit32 status,
7822 agsaContext_t *agContext,
7823 bit32 *msg)
7824{
7825 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
7826 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
7827
7828 TI_DBG1(("ossaGeneralEvent: start\n"));
7829 TI_DBG1(("ossaGeneralEvent: status %d\n", status));
7830
7831 if(msg)
7832 {
7833 TI_DBG1(("ossaGeneralEvent: *msg %X\n", *msg));
7834 }
7835
7838 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Yv");
7839 return;
7840}
7841
7843 agsaRoot_t *agRoot,
7844 agsaContext_t *agContext,
7845 bit32 status,
7846 agsaForensicData_t *forensicData)
7847{
7848 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
7849 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
7850
7852 return;
7853}
7854
7855
7856#ifdef INITIATOR_DRIVER
7857
7859 agsaRoot_t *agRoot,
7860 agsaContext_t *agContext,
7861 bit32 status,
7863
7864{
7865 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
7866 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
7867
7869}
7870#else
7872 agsaRoot_t *agRoot,
7873 agsaContext_t *agContext,
7874 bit32 status,
7876
7877{
7878
7879}
7880
7881#endif
7882
7884 agsaRoot_t *agRoot,
7885 agsaContext_t *agContext,
7886 bit32 status,
7888
7889{
7890 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
7891 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
7892
7894}
7895
7896
7897/*****************************************************************************/
7913/*****************************************************************************/
7915 agsaRoot_t *agRoot,
7916 agsaContext_t *agContext,
7918)
7919{
7920 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
7921 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
7922
7923 TI_DBG4(("ossaGetRegisterDumpCB: start\n"));
7924 TI_DBG4(("ossaGetRegisterDumpCB: status %d\n", status));
7926
7928 smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "Yw");
7929 return;
7930}
7931
7932/*****************************************************************************/
7951/*****************************************************************************/
7953 agsaRoot_t *agRoot,
7954 agsaContext_t *agContext,
7955 agsaDevHandle_t *agDevHandle,
7956 bit32 status,
7957 bit32 newDeviceState,
7958 bit32 previousDeviceState
7959 )
7960{
7961 tdsaDeviceData_t *oneDeviceData = agNULL;
7962
7963 TI_DBG2(("ossaSetDeviceStateCB: start\n"));
7964 TI_DBG2(("ossaSetDeviceStateCB: status %d\n", status));
7965 TI_DBG2(("ossaSetDeviceStateCB: newDeviceState %d\n", newDeviceState));
7966 TI_DBG2(("ossaSetDeviceStateCB: previousDeviceState %d\n", previousDeviceState));
7967
7968 if (agDevHandle == agNULL)
7969 {
7970 TI_DBG4(("ossaSetDeviceStateCB: agDevHandle is NULL\n"));
7971 return;
7972 }
7973
7974 oneDeviceData = (tdsaDeviceData_t *)agDevHandle->osData;
7975
7976 if (oneDeviceData == agNULL)
7977 {
7978 TI_DBG1(("ossaSetDeviceStateCB: wrong; oneDeviceData is NULL\n"));
7979 }
7980 else
7981 {
7982 TI_DBG2(("ossaSetDeviceStateCB: did %d\n", oneDeviceData->id));
7983 }
7984
7985 return;
7986}
7987
7988/*****************************************************************************/
8006/*****************************************************************************/
8008 agsaRoot_t *agRoot,
8009 agsaContext_t *agContext,
8010 agsaDevHandle_t *agDevHandle,
8011 bit32 status,
8012 bit32 deviceState
8013 )
8014{
8015 TI_DBG4(("ossaGetDeviceStateCB: start\n"));
8016 TI_DBG4(("ossaGetDeviceStateCB: status %d\n", status));
8017 TI_DBG4(("ossaGetDeviceStateCB: deviceState %d\n", deviceState));
8018
8019 return;
8020}
8021
8022#ifdef INITIATOR_DRIVER
8023/*****************************************************************************/
8042/*****************************************************************************/
8043osGLOBAL void
8044ossaIniSetDeviceInfoCB(
8045 agsaRoot_t *agRoot,
8046 agsaContext_t *agContext,
8047 agsaDevHandle_t *agDevHandle,
8048 bit32 status,
8049 bit32 option,
8050 bit32 param
8051 )
8052{
8053 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
8054 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
8055 tdsaRoot_t *tdsaRoot = (tdsaRoot_t *) tiRoot->tdData;
8056 tdsaContext_t *tdsaAllShared = (tdsaContext_t *)&tdsaRoot->tdsaAllShared;
8057 itdsaIni_t *Initiator = (itdsaIni_t *)tdsaAllShared->itdsaIni;
8058 bit32 intContext = osData->IntContext;
8059 tdIORequestBody_t *tdIORequestBody = agNULL;
8060 agsaIORequest_t *agIORequest = agNULL;
8061 bit32 saStatus = AGSA_RC_FAILURE;
8062 bit8 devType_S_Rate;
8063 tdsaDeviceData_t *oneDeviceData = agNULL;
8064
8065 TI_DBG4(("ossaIniSetDeviceInfoCB: start\n"));
8066 TI_DBG4(("ossaIniSetDeviceInfoCB: status 0x%x\n", status));
8067 TI_DBG4(("ossaIniSetDeviceInfoCB: option 0x%x\n", option));
8068 TI_DBG4(("ossaIniSetDeviceInfoCB: param 0x%x\n", param));
8069
8070 if (status != OSSA_SUCCESS)
8071 {
8072 TI_DBG1(("ossaIniSetDeviceInfoCB: status %d\n", status));
8073 TI_DBG1(("ossaIniSetDeviceInfoCB: option 0x%x\n", option));
8074 TI_DBG1(("ossaIniSetDeviceInfoCB: param 0x%x\n", param));
8075 if (option == 32) /* set connection rate */
8076 {
8077 TI_DBG1(("ossaIniSetDeviceInfoCB: IO failure\n"));
8078 agIORequest = (agsaIORequest_t *)agContext->osData;
8079 tdIORequestBody = (tdIORequestBody_t *)agIORequest->osData;
8081 tiRoot,
8082 tdIORequestBody->tiIORequest,
8083 tiIOFailed,
8085 agNULL,
8086 intContext
8087 );
8088 }
8089 }
8090 if (agDevHandle == agNULL)
8091 {
8092 TI_DBG4(("ossaIniSetDeviceInfoCB: agDevHandle is NULL\n"));
8093 return;
8094 }
8095 oneDeviceData = (tdsaDeviceData_t *)agDevHandle->osData;
8096 if (oneDeviceData == agNULL)
8097 {
8098 TI_DBG1(("ossaIniSetDeviceInfoCB: wrong; oneDeviceData is NULL\n"));
8099 return;
8100 }
8101 else
8102 {
8103 TI_DBG4(("ossaIniSetDeviceInfoCB: did %d\n", oneDeviceData->id));
8104 }
8105
8106 /* retry IOs */
8107 if (option == 32) /* set connection rate */
8108 {
8109 TI_DBG1(("ossaIniSetDeviceInfoCB: set connection rate option\n"));
8110 agIORequest = (agsaIORequest_t *)agContext->osData;
8111 tdIORequestBody = (tdIORequestBody_t *)agIORequest->osData;
8112 devType_S_Rate = oneDeviceData->agDeviceInfo.devType_S_Rate;
8113 devType_S_Rate = (devType_S_Rate & 0xF0) | (param >> 28);
8114 oneDeviceData->agDeviceInfo.devType_S_Rate = devType_S_Rate;
8115 TI_DBG1(("ossaIniSetDeviceInfoCB: new rate is 0x%x\n", DEVINFO_GET_LINKRATE(&oneDeviceData->agDeviceInfo)));
8116 if (oneDeviceData->valid == agTRUE && oneDeviceData->registered == agTRUE &&
8117 oneDeviceData->tdPortContext != agNULL )
8118 {
8119 saStatus = saSSPStart(agRoot,
8120 agIORequest,
8121 tdsaRotateQnumber(tiRoot, oneDeviceData),
8122 agDevHandle,
8123 tdIORequestBody->agRequestType,
8124 &(tdIORequestBody->transport.SAS.agSASRequestBody),
8125 agNULL,
8127 if (saStatus == AGSA_RC_SUCCESS)
8128 {
8129 TI_DBG1(("ossaIniSetDeviceInfoCB: retried\n"));
8130 Initiator->NumIOsActive++;
8131 tdIORequestBody->ioStarted = agTRUE;
8132 tdIORequestBody->ioCompleted = agFALSE;
8133 return;
8134 }
8135 else
8136 {
8137 TI_DBG1(("ossaIniSetDeviceInfoCB: retry failed\n"));
8138 tdIORequestBody->ioStarted = agFALSE;
8139 tdIORequestBody->ioCompleted = agTRUE;
8141 tiRoot,
8142 tdIORequestBody->tiIORequest,
8143 tiIOFailed,
8145 agNULL,
8146 intContext
8147 );
8148 }
8149 }
8150 }
8151 return;
8152}
8153#endif
8154/*****************************************************************************/
8173/*****************************************************************************/
8175 agsaRoot_t *agRoot,
8176 agsaContext_t *agContext,
8177 agsaDevHandle_t *agDevHandle,
8178 bit32 status,
8179 bit32 option,
8180 bit32 param
8181 )
8182{
8183 tdsaDeviceData_t *oneDeviceData = agNULL;
8184
8185 TI_DBG4(("ossaSetDeviceInfoCB: start\n"));
8186 TI_DBG4(("ossaSetDeviceInfoCB: status 0x%x\n", status));
8187 TI_DBG4(("ossaSetDeviceInfoCB: option 0x%x\n", option));
8188 TI_DBG4(("ossaSetDeviceInfoCB: param 0x%x\n", param));
8189
8190 if (status != OSSA_SUCCESS)
8191 {
8192 TI_DBG1(("ossaSetDeviceInfoCB: status %d\n", status));
8193 TI_DBG1(("ossaSetDeviceInfoCB: option 0x%x\n", option));
8194 TI_DBG1(("ossaSetDeviceInfoCB: param 0x%x\n", param));
8195 }
8196
8197 if (agDevHandle == agNULL)
8198 {
8199 TI_DBG4(("ossaSetDeviceInfoCB: agDevHandle is NULL\n"));
8200 return;
8201 }
8202
8203 oneDeviceData = (tdsaDeviceData_t *)agDevHandle->osData;
8204
8205 if (oneDeviceData == agNULL)
8206 {
8207 TI_DBG1(("ossaSetDeviceInfoCB: wrong; oneDeviceData is NULL\n"));
8208 }
8209 else
8210 {
8211 TI_DBG4(("ossaSetDeviceInfoCB: did %d\n", oneDeviceData->id));
8212 }
8213
8214 return;
8215}
8216
8217/*****************************************************************************/
8234/*****************************************************************************/
8236 agsaRoot_t *agRoot,
8237 agsaContext_t *agContext,
8238 bit32 status,
8239 bit32 agInfoLen)
8240{
8241 TI_DBG1(("ossaGetDFEDataCB: start\n"));
8242 TI_DBG1(("ossaGetDFEDataCB: status 0x%x agInfoLen 0x%x\n", status, agInfoLen));
8243 return;
8244}
8245
8246/*****************************************************************************/
8263/*****************************************************************************/
8264
8266 agsaRoot_t *agRoot,
8267 agsaContext_t *agContext,
8268 bit32 status,
8269 bit32 len)
8270{
8271 TI_DBG1(("ossaVhistCaptureCB: start\n"));
8272 TI_DBG1(("ossaVhistCaptureCB: status 0x%x agInfoLen 0x%x\n", status,len ));
8273 return;
8274}
8275
8277 agsaRoot_t *agRoot,
8278 agsaContext_t *agContext,
8279 bit32 status,
8280 bit32 eq
8281 )
8282{
8283 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
8284 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
8285 tiEncryptPort_t encryptEventData;
8286
8287 TI_DBG1(("ossaOperatorManagementCB: status 0x%x eq 0x%x\n", status, eq));
8288
8289 osti_memset(&encryptEventData, 0, sizeof(tiEncryptPort_t));
8290 encryptEventData.encryptEvent = tiEncryptOperatorManagement;
8291 encryptEventData.subEvent = eq;
8292 encryptEventData.pData = agNULL;
8293
8296 status,
8297 &encryptEventData);
8298}
8299
8301 agsaRoot_t *agRoot,
8302 agsaContext_t *agContext,
8303 bit32 status,
8304 bit32 type,
8305 bit32 length,
8306 void *TestResult
8307 )
8308{
8309 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
8310 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
8311 tiEncryptPort_t encryptEventData;
8312
8313 TI_DBG1(("ossaEncryptSelftestExecuteCB: status 0x%x type 0x%x length 0x%x\n", status, type, length));
8314
8315 osti_memset(&encryptEventData, 0, sizeof(tiEncryptPort_t));
8316 encryptEventData.encryptEvent = tiEncryptSelfTest;
8317 encryptEventData.subEvent = type;
8318 encryptEventData.pData = (void*)TestResult;
8319
8322 status,
8323 &encryptEventData);
8324}
8325
8327 agsaRoot_t *agRoot,
8328 agsaContext_t *agContext,
8329 bit32 status,
8330 bit32 option,
8331 bit32 num,
8332 bit32 role,
8333 agsaID_t *id
8334 )
8335{
8336
8337 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
8338 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
8339 tiEncryptPort_t encryptEventData;
8340
8341 TI_DBG1(("ossaGetOperatorCB: status 0x%x option 0x%x num 0x%x role 0x%x\n",
8342 status, option, num, role));
8343 TI_DBG1(("ossaGetOperatorCB: agContext %p id %p\n",agContext,id));
8344 osti_memset(&encryptEventData, 0, sizeof(tiEncryptPort_t));
8345 encryptEventData.encryptEvent = tiEncryptGetOperator;
8346 encryptEventData.subEvent = option;
8347 encryptEventData.pData = agNULL;
8348
8349 switch(status)
8350 {
8351 case OSSA_IO_SUCCESS:
8352 TI_DBG1(("ossaGetOperatorCB: OSSA_IO_SUCCESS option 0x%x\n", option));
8353 if(option == 1)
8354 {
8355 TI_DBG2(("ossaGetOperatorCB: 0x%02x 0x%02x 0x%02x 0x%02x\n",id->ID[0], id->ID[1], id->ID[2], id->ID[3]));
8356 TI_DBG2(("ossaGetOperatorCB: 0x%02x 0x%02x 0x%02x 0x%02x\n",id->ID[4], id->ID[5], id->ID[6], id->ID[7]));
8357 TI_DBG2(("ossaGetOperatorCB: 0x%02x 0x%02x 0x%02x 0x%02x\n",id->ID[8], id->ID[9], id->ID[10],id->ID[11]));
8358 TI_DBG2(("ossaGetOperatorCB: 0x%02x 0x%02x 0x%02x 0x%02x\n",id->ID[12],id->ID[13],id->ID[14],id->ID[15]));
8359 TI_DBG2(("ossaGetOperatorCB: 0x%02x 0x%02x 0x%02x 0x%02x\n",id->ID[16],id->ID[17],id->ID[18],id->ID[19]));
8360 TI_DBG2(("ossaGetOperatorCB: 0x%02x 0x%02x 0x%02x 0x%02x\n",id->ID[20],id->ID[21],id->ID[22],id->ID[23]));
8361 TI_DBG2(("ossaGetOperatorCB: 0x%02x 0x%02x 0x%02x 0x%02x\n",id->ID[24],id->ID[25],id->ID[26],id->ID[27]));
8362 TI_DBG2(("ossaGetOperatorCB: 0x%02x 0x%02x 0x%02x\n", id->ID[28],id->ID[29],id->ID[30]));
8363 }else if(option == 2)
8364 {
8365 TI_DBG1(("ossaGetOperatorCB: number operators 0x%02x\n", num ));
8366 }
8367
8368 encryptEventData.pData = id;
8369 break;
8371 TI_DBG1(("ossaGetOperatorCB: OSSA_MPI_ENC_ERR_UNSUPPORTED_OPTION 0x%x\n",option));
8372 break;
8374 TI_DBG1(("ossaGetOperatorCB: OSSA_MPI_ENC_ERR_ID_TRANSFER_FAILURE 0x%x\n",option));
8375 break;
8376 default:
8377 TI_DBG1(("ossaGetOperatorCB: Unknown status 0x%x\n",status));
8378 }
8381 status,
8382 &encryptEventData);
8383
8384}
8385
8387 agsaRoot_t *agRoot,
8388 agsaContext_t *agContext,
8389 bit32 status,
8390 bit32 eq
8391 )
8392{
8393 tdsaRootOsData_t *osData = (tdsaRootOsData_t *)agRoot->osData;
8394 tiRoot_t *tiRoot = (tiRoot_t *)osData->tiRoot;
8395 tiEncryptPort_t encryptEventData;
8396
8397 TI_DBG1(("ossaSetOperatorCB: agContext %p status 0x%x eq 0x%x\n",agContext, status, eq));
8398
8399 osti_memset(&encryptEventData, 0, sizeof(tiEncryptPort_t));
8400 encryptEventData.encryptEvent = tiEncryptSetOperator;
8401 encryptEventData.subEvent = 0;
8402 switch(status)
8403 {
8404 case OSSA_IO_SUCCESS:
8405 TI_DBG1(("ossaSetOperatorCB: OSSA_IO_SUCCESS\n"));
8406 encryptEventData.pData = agNULL;
8407 break;
8409 TI_DBG1(("ossaSetOperatorCB: OSSA_MPI_ENC_ERR_CONTROLLER_NOT_IDLE\n"));
8410 break;
8412 TI_DBG1(("ossaSetOperatorCB: OSSA_MPI_ENC_OPERATOR_AUTH_FAILURE error qualifier 0x%x\n",eq));
8413 break;
8415 TI_DBG1(("ossaSetOperatorCB: OSSA_MPI_ENC_OPERATOR_OPERATOR_ALREADY_LOGGED_IN\n"));
8416 break;
8418 TI_DBG1(("ossaSetOperatorCB: OSSA_MPI_ENC_OPERATOR_ILLEGAL_PARAMETER\n"));
8419 break;
8421 TI_DBG1(("ossaSetOperatorCB: OSSA_MPI_ENC_ERR_UNSUPPORTED_OPTION\n"));
8422 break;
8424 TI_DBG1(("ossaSetOperatorCB: OSSA_MPI_ENC_ERR_ID_TRANSFER_FAILURE\n"));
8425 break;
8426 default:
8427 TI_DBG1(("ossaGetOperatorCB: Unknown status 0x%x\n",status));
8428 }
8431 status,
8432 &encryptEventData);
8433}
8434
8436 agsaRoot_t *agRoot,
8437 agsaContext_t *agContext,
8438 bit32 status,
8439 agsaOffloadDifDetails_t *agsaOffloadDifDetails)
8440{
8441 TI_DBG1(("ossaDIFEncryptionOffloadStartCB: start\n"));
8442 TI_DBG1(("ossaDIFEncryptionOffloadStartCB: status 0x%x agsaOffloadDifDetails=%p\n", status, agsaOffloadDifDetails));
8443 return;
8444}
8445
8447{
8448 tdsaRootOsData_t *osData= agNULL;
8450 if(agRoot)
8451 {
8452 osData = (tdsaRootOsData_t *)agRoot->osData;
8453 }
8454 if(osData)
8455 {
8456 tiRoot = (tiRoot_t *)osData->tiRoot;
8457 }
8458 return(ostiTimeStamp(tiRoot));
8459}
8460
8462{
8463 tdsaRootOsData_t *osData= agNULL;
8465 if(agRoot)
8466 {
8467 osData = (tdsaRootOsData_t *)agRoot->osData;
8468 }
8469 if(osData)
8470 {
8471 tiRoot = (tiRoot_t *)osData->tiRoot;
8472 }
8473 return(ostiTimeStamp64(tiRoot));
8474}
8475
8476#ifdef FDS_SM
8477osGLOBAL void
8478tdIDStartTimer(tiRoot_t *tiRoot,
8479 smIORequest_t *smIORequest,
8480 tdsaDeviceData_t *oneDeviceData
8481 )
8482{
8483 tdsaRoot_t *tdsaRoot = (tdsaRoot_t *) tiRoot->tdData;
8484 tdsaContext_t *tdsaAllShared = (tdsaContext_t *)&tdsaRoot->tdsaAllShared;
8485 itdsaIni_t *Initiator = (itdsaIni_t *)tdsaAllShared->itdsaIni;
8486
8487 TI_DBG1(("tdIDStartTimer: start\n"));
8488
8490 if (oneDeviceData->tdIDTimer.timerRunning == agTRUE)
8491 {
8494 tiRoot,
8495 &oneDeviceData->tdIDTimer
8496 );
8497 }
8498 else
8499 {
8501 }
8502
8504 tiRoot,
8505 &oneDeviceData->tdIDTimer,
8506 SATA_ID_DEVICE_DATA_TIMER_VALUE/Initiator->OperatingOption.UsecsPerTick,
8507 tdIDStartTimerCB,
8508 smIORequest,
8509 oneDeviceData,
8510 agNULL
8511 );
8512
8514 tiRoot,
8515 &Initiator->timerlist,
8516 &oneDeviceData->tdIDTimer
8517 );
8518 TI_DBG1(("tdIDStartTimer: end\n"));
8519 return;
8520}
8521
8522osGLOBAL void
8523tdIDStartTimerCB(
8524 tiRoot_t * tiRoot,
8525 void * timerData1,
8526 void * timerData2,
8527 void * timerData3
8528 )
8529{
8530 tdsaRoot_t *tdsaRoot = (tdsaRoot_t *) tiRoot->tdData;
8531 tdsaContext_t *tdsaAllShared = (tdsaContext_t *)&tdsaRoot->tdsaAllShared;
8532 smIORequest_t *smIORequest;
8533 tdsaDeviceData_t *oneDeviceData;
8534 smRoot_t *smRoot;
8535 tdIORequestBody_t *tdIORequestBody;
8536 smDeviceHandle_t *smDeviceHandle;
8537 tdsaPortContext_t *onePortContext;
8538#ifdef REMOVED
8539 agsaRoot_t *agRoot;
8540 bit32 IDstatus;
8541//#endif
8542//#ifdef REMOVED
8543 agsaIORequest_t *agAbortIORequest = agNULL;
8544 tdIORequestBody_t *tdAbortIORequestBody = agNULL;
8545 bit32 PhysUpper32;
8546 bit32 PhysLower32;
8547 bit32 memAllocStatus;
8548 void *osMemHandle;
8549#endif // REMOVED
8550#ifdef TD_DEBUG_ENABLE
8552#endif
8553
8554 TI_DBG1(("tdIDStartTimerCB start\n"));
8555 smIORequest = (smIORequest_t *)timerData1;
8556 oneDeviceData = (tdsaDeviceData_t *)timerData2;
8557 smRoot = &(tdsaAllShared->smRoot);
8558#ifdef REMOVED
8559 agRoot = oneDeviceData->agRoot;
8560#endif // REMOVED
8561
8562 if (smIORequest == agNULL)
8563 {
8564 TI_DBG1(("tdIDStartTimerCB: smIORequest == agNULL !!!!!!\n"));
8565 return;
8566 }
8567
8568 if (oneDeviceData == agNULL)
8569 {
8570 TI_DBG1(("tdIDStartTimerCB: oneDeviceData == agNULL !!!!!!\n"));
8571 return;
8572 }
8573
8574 if (oneDeviceData->satDevData.IDPending == agFALSE || oneDeviceData->satDevData.IDDeviceValid == agTRUE)
8575 {
8576 /*the Identify Device command already normally completed, just return*/
8577 return;
8578 }
8579
8580 tdIORequestBody = (tdIORequestBody_t *)smIORequest->tdData;
8581 smDeviceHandle = (smDeviceHandle_t *)&(oneDeviceData->smDeviceHandle);
8582 onePortContext = oneDeviceData->tdPortContext;
8583 if (tdIORequestBody == agNULL)
8584 {
8585 TI_DBG1(("tdIDStartTimerCB: tdIORequestBody == agNULL !!!!!!\n"));
8586 return;
8587 }
8588
8589 if (smDeviceHandle == agNULL)
8590 {
8591 TI_DBG1(("tdIDStartTimerCB: smDeviceHandle == agNULL !!!!!!\n"));
8592 return;
8593 }
8594
8595 if (onePortContext == agNULL)
8596 {
8597 TI_DBG1(("tdIDStartTimerCB: onePortContext == agNULL !!!!!!\n"));
8598 return;
8599 }
8600
8601 TI_DBG1(("tdIDStartTimerCB: did %d\n", oneDeviceData->id));
8602 /*
8603 1. smIOabort()
8604 2. in tdsmIDCompletedCB(), retry
8605 */
8606 if (oneDeviceData->valid == agFALSE)
8607 {
8608 TI_DBG1(("tdIDStartTimerCB: invalid device\n"));
8609 return;
8610 }
8611#ifdef TD_DEBUG_ENABLE
8612 status = smIOAbort( smRoot, smIORequest );
8613#else
8614 smIOAbort( smRoot, smIORequest );
8615#endif
8616
8617#ifdef REMOVED
8618 /* allocating agIORequest for abort itself */
8619 memAllocStatus = ostiAllocMemory(
8620 tiRoot,
8621 &osMemHandle,
8622 (void **)&tdAbortIORequestBody,
8623 &PhysUpper32,
8624 &PhysLower32,
8625 8,
8626 sizeof(tdIORequestBody_t),
8627 agTRUE
8628 );
8629 if (memAllocStatus != tiSuccess)
8630 {
8631 /* let os process IO */
8632 TI_DBG1(("tdIDStartTimerCB: ostiAllocMemory failed...; can't retry ID data \n"));
8633 return;
8634 }
8635 if (tdAbortIORequestBody == agNULL)
8636 {
8637 /* let os process IO */
8638 TI_DBG1(("tdIDStartTimerCB: ostiAllocMemory returned NULL tdAbortIORequestBody; can't retry ID data\n"));
8639 return;
8640 }
8641 /* setup task management structure */
8642 tdAbortIORequestBody->IOType.InitiatorTMIO.osMemHandle = osMemHandle;
8643 /* setting callback but not used later */
8644 tdAbortIORequestBody->IOCompletionFunc = agNULL;
8645 //tdAbortIORequestBody->IOCompletionFunc = itdssIOAbortedHandler;
8646 tdAbortIORequestBody->tiDevHandle = (tiDeviceHandle_t *)&(oneDeviceData->tiDeviceHandle);
8647 /* initialize agIORequest */
8648 agAbortIORequest = &(tdAbortIORequestBody->agIORequest);
8649 agAbortIORequest->osData = (void *) tdAbortIORequestBody;
8650 agAbortIORequest->sdkData = agNULL; /* LL takes care of this */
8651//#endif
8652//#ifdef REMOVED
8653 status = saSATAAbort(agRoot,
8654 agAbortIORequest,
8655 0,
8656 oneDeviceData->agDevHandle,
8657 1, /* abort all */
8658 agNULL,
8659 ossaSATAIDAbortCB
8660 );
8661 status = saSATAAbort(agRoot,
8662 agAbortIORequest,
8663 0,
8664 oneDeviceData->agDevHandle,
8665 0, /* abort one */
8666 agIORequest,
8667 ossaSATAIDAbortCB
8668 );
8669//#endif
8670//#ifdef REMOVED
8671 if (status != AGSA_RC_SUCCESS)
8672 {
8673 TI_DBG1(("tdIDStartTimerCB: saSATAAbort failed; can't retry ID data\n"));
8674 }
8675 if (oneDeviceData->satDevData.IDDeviceValid == agTRUE)
8676 {
8677 TI_DBG1(("tdIDStartTimerCB: IDDeviceValid is valid, no need to retry\n"));
8678 return;
8679 }
8680 if (tdIORequestBody->reTries <= SM_RETRIES)
8681 {
8682 tdIORequestBody->tiIORequest = agNULL; /* not in use */
8683 tdIORequestBody->pid = onePortContext->id;
8684 smIORequest->tdData = tdIORequestBody;
8685 smIORequest->smData = &tdIORequestBody->smIORequestBody;
8686 smDeviceHandle->tdData = oneDeviceData;
8687 IDstatus = smIDStart(smRoot, smIORequest, smDeviceHandle );
8688 if (IDstatus == SM_RC_SUCCESS)
8689 {
8690 TI_DBG1(("tdIDStartTimerCB: being retried!!!\n"));
8691 tdIORequestBody->reTries++;
8692 tdIORequestBody->ioCompleted = agFALSE;
8693 tdIORequestBody->ioStarted = agTRUE;
8694 tdIDStartTimer(tiRoot, smIORequest, oneDeviceData);
8695 }
8696 else
8697 {
8698 /* identify device data is not valid */
8699 TI_DBG1(("tdIDStartTimerCB: smIDStart fail or busy %d!!!\n", IDstatus));
8700 tdIORequestBody->reTries = 0;
8701 tdIORequestBody->ioCompleted = agTRUE;
8702 tdIORequestBody->ioStarted = agFALSE;
8704 tdIORequestBody->osMemHandle,
8705 sizeof(tdIORequestBody_t)
8706 );
8707 oneDeviceData->satDevData.IDDeviceValid = agFALSE;
8708 smReportRemoval(tiRoot, agRoot, oneDeviceData, onePortContext);
8709 return;
8710 }
8711 }
8712 else
8713 {
8714 /* give up */
8715 TI_DBG1(("tdIDStartTimerCB: retries are over!!!\n"));
8716 if (oneDeviceData->tdIDTimer.timerRunning == agTRUE)
8717 {
8718 tdsaKillTimer( tiRoot, &oneDeviceData->tdIDTimer );
8719 }
8720 tdIORequestBody->reTries = 0;
8721 tdIORequestBody->ioCompleted = agTRUE;
8722 tdIORequestBody->ioStarted = agFALSE;
8724 tiRoot,
8725 tdIORequestBody->osMemHandle,
8726 sizeof(tdIORequestBody_t)
8727 );
8728 oneDeviceData->satDevData.IDDeviceValid = agFALSE;
8729
8730 if (oneDeviceData->SMNumOfID <= 0) /* does SMP HARD RESET only upto one time */
8731 {
8732 TI_DBG1(("tdIDStartTimerCB: fail; sending HARD_RESET\n"));
8733 oneDeviceData->SMNumOfID++;
8734 if (oneDeviceData->directlyAttached == agTRUE)
8735 {
8736 saLocalPhyControl(agRoot, agNULL, 0, oneDeviceData->phyID, AGSA_PHY_HARD_RESET, agNULL);
8737 }
8738 else
8739 {
8740 tdsaPhyControlSend(tiRoot,
8741 oneDeviceData,
8743 agNULL);
8744 }
8745 }
8746 else
8747 {
8748 /* given up after one time of SMP HARD RESET; */
8749 TI_DBG1(("tdIDStartTimerCB: fail; but giving up sending HARD_RESET!!!\n"));
8750 if (oneDeviceData->directlyAttached == agTRUE)
8751 {
8752 smReportRemovalDirect(tiRoot, agRoot, oneDeviceData);
8753 }
8754 else
8755 {
8756 smReportRemoval(tiRoot, agRoot, oneDeviceData, onePortContext);
8757 }
8758 }
8759 }
8760#endif // REMOVED
8761
8762 TI_DBG1(("tdIDStartTimerCB: end, smIOAbort status %d\n", status));
8763 return;
8764}
8765#endif // FDS_SM
8766
8767
8768#if defined(FDS_DM) && defined(FDS_SM)
8769//start here
8770GLOBAL void
8771tdIDStart(
8773 agsaRoot_t *agRoot,
8774 smRoot_t *smRoot,
8775 tdsaDeviceData_t *oneDeviceData,
8776 tdsaPortContext_t *onePortContext
8777 )
8778{
8779 tdsaRoot_t *tdsaRoot = (tdsaRoot_t *) tiRoot->tdData;
8780 tdsaContext_t *tdsaAllShared = (tdsaContext_t *)&tdsaRoot->tdsaAllShared;
8781 bit32 SMstatus = SM_RC_FAILURE;
8782 tdIORequestBody_t *tdIORequestBody;
8783 smIORequest_t *smIORequest;
8784 smDeviceHandle_t *smDeviceHandle;
8785 bit32 PhysUpper32;
8786 bit32 PhysLower32;
8787 bit32 memAllocStatus;
8788 void *osMemHandle;
8789
8790
8791 TI_DBG1(("tdIDStart: start, did %d\n",oneDeviceData->id));
8792
8793 if ( (DEVICE_IS_SATA_DEVICE(oneDeviceData)|| DEVICE_IS_STP_TARGET(oneDeviceData))
8794 &&
8795 oneDeviceData->satDevData.IDDeviceValid == agFALSE
8796 &&
8797 oneDeviceData->satDevData.IDPending == agFALSE
8798 )
8799 {
8800 TI_DBG2(("tdIDStart: in loop, did %d\n", oneDeviceData->id));
8801 /* allocating tdIORequestBody */
8802 memAllocStatus = ostiAllocMemory(
8803 tiRoot,
8804 &osMemHandle,
8805 (void **)&tdIORequestBody,
8806 &PhysUpper32,
8807 &PhysLower32,
8808 8,
8809 sizeof(tdIORequestBody_t),
8810 agTRUE
8811 );
8812 if (memAllocStatus != tiSuccess || tdIORequestBody == agNULL)
8813 {
8814 /* let os process IO */
8815 TI_DBG1(("tdIDStart: ostiAllocMemory failed... or ostiAllocMemory returned NULL tdIORequestBody!!!\n"));
8816 oneDeviceData->satDevData.IDDeviceValid = agFALSE;
8817 if (oneDeviceData->directlyAttached == agTRUE)
8818 {
8819 /* notifying link up */
8821 tiRoot,
8823 tiSuccess,
8824 (void *)onePortContext->tiPortalContext
8825 );
8826#ifdef INITIATOR_DRIVER
8827 /* triggers discovery */
8829 tiRoot,
8831 tiSuccess,
8832 (void *) onePortContext->tiPortalContext
8833 );
8834#endif
8835 }
8836 }
8837 else
8838 {
8839 /* initialize */
8840 osti_memset(tdIORequestBody, 0, sizeof(tdIORequestBody_t));
8841
8842 tdIORequestBody->osMemHandle = osMemHandle;
8843 TI_DBG2(("tdIDStart: tdIORequestBody %p tdIORequestBody->osMemHandle %p\n", tdIORequestBody, tdIORequestBody->osMemHandle));
8844
8845 /* not in use */
8846 tdIORequestBody->IOCompletionFunc = agNULL;
8847 tdIORequestBody->tiDevHandle = agNULL;
8848
8849 tdIORequestBody->tiIORequest = agNULL; /* not in use */
8850 tdIORequestBody->pid = onePortContext->id;
8851 tdIORequestBody->reTries = 0;
8852 smIORequest = (smIORequest_t *)&(tdIORequestBody->smIORequest);
8853 smIORequest->tdData = tdIORequestBody;
8854 smIORequest->smData = &tdIORequestBody->smIORequestBody;
8855
8856 smDeviceHandle = (smDeviceHandle_t *)&(oneDeviceData->smDeviceHandle);
8857 smDeviceHandle->tdData = oneDeviceData;
8858
8859 TI_DBG2(("tdIDStart: smIORequest %p\n", smIORequest));
8860
8861 SMstatus = smIDStart(smRoot,
8862 smIORequest,
8863 &(oneDeviceData->smDeviceHandle)
8864 );
8865
8866 if (SMstatus == SM_RC_SUCCESS)
8867 {
8868 if (oneDeviceData->directlyAttached == agTRUE)
8869 {
8870 TI_DBG2(("tdIDStart: successfully sent identify device data\n"));
8871
8872 /* Add the devicedata to the mainlink */
8874 TDLIST_ENQUEUE_AT_TAIL(&(oneDeviceData->MainLink), &(tdsaAllShared->MainDeviceList));
8876 TI_DBG6(("tdIDStart: one case did %d \n", oneDeviceData->id));
8877 }
8878 oneDeviceData->satDevData.IDPending = agTRUE;
8879 /* start a timer */
8880 tdIDStartTimer(tiRoot, smIORequest, oneDeviceData);
8881 }
8882 else
8883 {
8884 /* failed to send */
8885 TI_DBG1(("tdIDStart: smIDStart fail or busy %d\n", SMstatus));
8886
8887 /* free up allocated memory */
8889 tiRoot,
8890 tdIORequestBody->IOType.InitiatorTMIO.osMemHandle,
8891 sizeof(tdIORequestBody_t)
8892 );
8893
8894 oneDeviceData->satDevData.IDDeviceValid = agFALSE;
8895 if (oneDeviceData->directlyAttached == agTRUE)
8896 {
8897 TI_DBG1(("tdIDStart: failed in sending identify device data\n"));
8898 /* put onedevicedata back to free list */
8900 TDLIST_ENQUEUE_AT_TAIL(&(oneDeviceData->FreeLink), &(tdsaAllShared->FreeDeviceList));
8902 /* notifying link up */
8904 tiRoot,
8906 tiSuccess,
8907 (void *)onePortContext->tiPortalContext
8908 );
8909#ifdef INITIATOR_DRIVER
8910 /* triggers discovery */
8912 tiRoot,
8914 tiSuccess,
8915 (void *) onePortContext->tiPortalContext
8916 );
8917#endif
8918 }
8919 else
8920 {
8921 smReportRemoval(tiRoot, agRoot, oneDeviceData, onePortContext);
8922 }
8923 }
8924 }
8925 }
8926 TI_DBG1(("tdIDStart: exit\n"));
8927 return;
8928}
8929
8930#endif
8931
8932#ifdef SALLSDK_OS_IOMB_LOG_ENABLE
8933GLOBAL void ossaLogIomb(agsaRoot_t *agRoot,
8934 bit32 queueNum,
8935 agBOOLEAN isInbound,
8936 void *pMsg,
8937 bit32 msgLength)
8938{
8939 return;
8940}
8941#endif /* SALLSDK_OS_IOMB_LOG_ENABLE */
8942
8943#ifndef SATA_ENABLE
8944/*
8945 * These callback routines are defined in ossasat.c which are included in the
8946 * compilation if SATA_ENABLED is defined.
8947 */
8948
8949/*****************************************************************************
8950*! \brief ossaDiscoverSataCB
8951*
8952* Purpose: This function is called by lower layer to inform TD layer of
8953* STP/SATA discovery results
8954*
8955*
8956* \param agRoot Pointer to chip/driver Instance.
8957* \param agPortContext Pointer to the port context of TD and Lower layer
8958* \param event event type
8959* \param pParm1 Pointer to data associated with event
8960* \param pParm2 Pointer to data associated with event
8961*
8962* \return: none
8963*
8964* \note - For details, refer to SAS/SATA Low-Level API Specification
8965*
8966*****************************************************************************/
8967
8969 agsaPortContext_t *agPortContext,
8970 bit32 event,
8971 void *pParm1,
8972 void *pParm2
8973 )
8974{
8975 return;
8976}
8977
8978
8979/*****************************************************************************
8980*! \brief ossaSATACompleted
8981*
8982* This routine is called to complete a SATA request previously issued to the
8983* LL Layer in saSATAStart()
8984*
8985* \param agRoot: Handles for this instance of SAS/SATA hardware
8986* \param agIORequest: Pointer to the LL I/O request context for this I/O.
8987* \param agIOStatus: Status of completed I/O.
8988* \param agFirstDword:Pointer to the four bytes of FIS.
8989* \param agIOInfoLen: Length in bytes of overrun/underrun residual or FIS
8990* length.
8991* \param agParam: Additional info based on status.
8992*
8993* \return: none
8994*
8995*****************************************************************************/
8997 agsaRoot_t *agRoot,
8998 agsaIORequest_t *agIORequest,
8999 bit32 agIOStatus,
9000 void *agFirstDword,
9001 bit32 agIOInfoLen,
9002 void *agParam
9003 )
9004{
9005 return;
9006}
9007
9008
9009/*****************************************************************************
9010*! \brief ossaSATAEvent
9011*
9012* This routine is called to notify the OS Layer of an event associated with
9013* SATA port or SATA device
9014*
9015* \param agRoot: Handles for this instance of SAS/SATA hardware
9016* \param agIORequest: Pointer to the LL I/O request context for this I/O.
9017* \param agPortContext Pointer to the port context of TD and Lower layer
9018* \param agDevHandle: Pointer to a device handle
9019* \param event: event type
9020*
9021* \return: none
9022*
9023*****************************************************************************/
9025 agsaRoot_t *agRoot,
9026 agsaIORequest_t *agIORequest,
9027 agsaPortContext_t *agPortContext,
9028 agsaDevHandle_t *agDevHandle,
9029 bit32 event,
9030 bit32 agIOInfoLen,
9031 void *agParam
9032 )
9033{
9034 return;
9035}
9036
9037
9038/*****************************************************************************
9039*! \brief ossaSATADeviceResetCB
9040*
9041* This routine is called to complete a SATA device reset request previously
9042* issued to the LL Layer in saSATADeviceReset().
9043*
9044* \param agRoot: Handles for this instance of SAS/SATA hardware
9045* \param agDevHandle: Pointer to a device handle
9046* \param resetStatus: Reset status:
9047* OSSA_SUCCESS: The reset operation completed successfully.
9048* OSSA_FAILURE: The reset operation failed.
9049* \param resetparm: Pointer to the Device-To-Host FIS received from the device.
9050*
9051* \return: none
9052*
9053*****************************************************************************/
9055 agsaRoot_t *agRoot,
9056 agsaDevHandle_t *agDevHandle,
9057 bit32 resetStatus,
9058 void *resetparm)
9059{
9060
9061 return;
9062
9063}
9064
9065/*****************************************************************************
9066*! \brief ossaDiscoverSasCB
9067*
9068* Purpose: This function is called by lower layer to inform TD layer of
9069* SAS discovery results
9070*
9071*
9072* \param agRoot Pointer to chip/driver Instance.
9073* \param agPortContext Pointer to the port context of TD and Lower layer
9074* \param event event type
9075* \param pParm1 Pointer to data associated with event
9076* \param pParm2 Pointer to data associated with event
9077*
9078* \return: none
9079*
9080* \note - For details, refer to SAS/SATA Low-Level API Specification
9081*
9082*****************************************************************************/
9084 agsaPortContext_t *agPortContext,
9085 bit32 event,
9086 void *pParm1,
9087 void *pParm2
9088 )
9089{
9090 return;
9091}
9092#endif
9093
#define INITIATOR_DRIVER
Definition: config.h:32
#define FDS_DM
Definition: config.h:56
#define DM_RC_FAILURE
Definition: dm.h:49
#define DM_DISCOVERY_OPTION_INCREMENTAL_START
Definition: dm.h:60
#define DM_RC_SUCCESS
Definition: dm.h:48
@ dmDiscInProgress
Definition: dm.h:73
@ dmDiscCompleted
Definition: dm.h:69
@ dmDiscAborted
Definition: dm.h:71
@ dmDiscAbortInvalid
Definition: dm.h:74
@ dmDiscFailed
Definition: dm.h:70
#define DM_DISCOVERY_OPTION_ABORT
Definition: dm.h:61
osGLOBAL bit32 dmQueryDiscovery(dmRoot_t *dmRoot, dmPortContext_t *dmPortContext)
osGLOBAL bit32 dmRegisterDevice(dmRoot_t *dmRoot, dmPortContext_t *dmPortContext, dmDeviceInfo_t *dmDeviceInfo, agsaDevHandle_t *agDevHandle)
osGLOBAL void dmNotifyBC(dmRoot_t *dmRoot, dmPortContext_t *dmPortContext, bit32 type)
osGLOBAL bit32 dmCreatePort(dmRoot_t *dmRoot, dmPortContext_t *dmPortContext, dmPortInfo_t *dmPortInfo)
osGLOBAL bit32 dmResetFailedDiscovery(dmRoot_t *dmRoot, dmPortContext_t *dmPortContext)
osGLOBAL bit32 dmDestroyPort(dmRoot_t *dmRoot, dmPortContext_t *dmPortContext, dmPortInfo_t *dmPortInfo)
osGLOBAL bit32 dmDiscover(dmRoot_t *dmRoot, dmPortContext_t *dmPortContext, bit32 option)
#define DEVICE_IS_SATA_DEVICE(DeviceData)
Definition: dmdefs.h:1172
#define SAS_NO_DEVICE
Definition: dmdefs.h:1110
#define SAS_CONNECTION_RATE_6_0G
Definition: dmdefs.h:1122
#define SATA_ID_DEVICE_DATA_TIMER_VALUE
Definition: dmdefs.h:1089
#define SAS_EDGE_EXPANDER_DEVICE
Definition: dmdefs.h:1112
#define DEVICE_IS_STP_TARGET(DeviceData)
Definition: dmdefs.h:1166
#define MIN(a, b)
MIN macro.
Definition: dmdefs.h:88
#define SAS_CONNECTION_RATE_1_5G
Definition: dmdefs.h:1120
#define DEVINFO_PUT_SAS_ADDRESSLO(devInfo, src32)
Definition: dmdefs.h:1216
#define DEVICE_IS_SMP_TARGET(DeviceData)
Definition: dmdefs.h:1169
#define SMP_PHY_CONTROL_HARD_RESET
Definition: dmdefs.h:199
#define SAS_FANOUT_EXPANDER_DEVICE
Definition: dmdefs.h:1113
#define DEVINFO_GET_LINKRATE(devInfo)
Definition: dmdefs.h:1186
#define SAS_CONNECTION_RATE_12_0G
Definition: dmdefs.h:1123
#define SAS_END_DEVICE
Definition: dmdefs.h:1111
#define DEVINFO_PUT_SAS_ADDRESSHI(devInfo, src32)
Definition: dmdefs.h:1219
#define SAS_CONNECTION_RATE_3_0G
Definition: dmdefs.h:1121
#define DEVICE_IS_SSP_TARGET(DeviceData)
Definition: dmdefs.h:1163
#define DEVINFO_GET_DEVICETTYPE(devInfo)
Definition: dmdefs.h:1183
bit32 status
Definition: encrypt_ioctl.h:12
#define ITD_DSTATE_NOT_STARTED
Definition: itddefs.h:37
#define ITD_DSTATE_COMPLETED
Definition: itddefs.h:39
#define ITD_DSTATE_STARTED
Definition: itddefs.h:38
U32 ostiTimeStamp(tiRoot_t *ptiRoot)
Definition: lxosapi.c:707
void ostiChipWriteBit32(tiRoot_t *ptiRoot, U32 chipOffset, U32 chipValue)
Definition: lxosapi.c:214
U32 ostiChipConfigReadBit32(tiRoot_t *ptiRoot, U32 chipConfigOffset)
Definition: lxosapi.c:155
U32 ostiChipReadBit32(tiRoot_t *ptiRoot, U32 chipOffset)
Definition: lxosapi.c:194
osGLOBAL U32 ostiFreeMemory(tiRoot_t *ptiRoot, void *osMemHandle, U32 allocLength)
Definition: lxosapi.c:320
osGLOBAL U32 ostiAllocMemory(tiRoot_t *ptiRoot, void **osMemHandle, void **agVirtAddr, U32 *agPhysUpper32, U32 *agPhysLower32, U32 alignment, U32 allocLength, agBOOLEAN isCacheable)
Definition: lxosapi.c:51
void ostiChipWriteBit32Ext(tiRoot_t *ptiRoot, U32 busBaseNumber, U32 chipOffset, U32 aData)
Definition: lxosapi.c:255
U32 ostiChipReadBit32Ext(tiRoot_t *ptiRoot, U32 busBaseNumber, U32 chipOffset)
Definition: lxosapi.c:232
osGLOBAL void ostiCacheInvalidate(tiRoot_t *ptiRoot, void *osMemHandle, void *virtPtr, bit32 length)
Definition: lxosapi.c:750
void ostiStallThread(tiRoot_t *ptiRoot, U32 microseconds)
Definition: lxosapi.c:691
osGLOBAL void ostiCacheFlush(tiRoot_t *ptiRoot, void *osMemHandle, void *virtPtr, bit32 length)
Definition: lxosapi.c:741
void ostiPortEvent(tiRoot_t *ptiRoot, tiPortEvent_t eventType, U32 status, void *pParm)
Definition: lxosapi.c:591
osGLOBAL void ostiCachePreFlush(tiRoot_t *tiRoot, void *osMemHandle, void *virtPtr, bit32 length)
Definition: lxosapi.c:759
U64 ostiTimeStamp64(tiRoot_t *ptiRoot)
Definition: lxosapi.c:713
The file defines the debug constants and structures.
#define hpDBG_REGISTERS
Definition: mpidebug.h:97
#define smTraceFuncEnter(L, I)
Definition: mpidebug.h:238
#define smTraceFuncExit(L, S, I)
Definition: mpidebug.h:239
#define smTrace(L, I, V)
Definition: mpidebug.h:244
#define hpDBG_VERY_LOUD
Definition: mpidebug.h:100
void ostiSingleThreadedLeave(tiRoot_t *ptiRoot, U32 queueId)
Definition: osapi.c:534
void ostiInitiatorEvent(tiRoot_t *ptiRoot, tiPortalContext_t *ptiPortalContext, tiDeviceHandle_t *ptiDevHandle, tiIntrEventType_t eventType, U32 eventStatus, void *parm)
Definition: osapi.c:49
void ostiInitiatorSMPCompleted(tiRoot_t *ptiRoot, tiIORequest_t *ptiSMPRequest, tiSMPStatus_t smpStatus, bit32 tiSMPInfoLen, void *tiFrameHandle, bit32 context)
Definition: osapi.c:420
osGLOBAL void ostiPCI_TRIGGER(tiRoot_t *tiRoot)
Definition: osapi.c:803
void ostiInitiatorIOCompleted(tiRoot_t *ptiRoot, tiIORequest_t *ptiIORequest, tiIOStatus_t IOStatus, U32 statusDetail, tiSenseData_t *pSenseData, U32 context)
Definition: osapi.c:270
void ostiSingleThreadedEnter(tiRoot_t *ptiRoot, U32 queueId)
Definition: osapi.c:514
#define TIDEBUG_MSG(mask, val, format)
Definition: osdebug.h:103
GLOBAL void ossaGetIOErrorStatsCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, agsaIOErrorEventStats_t *stats)
Definition: ossacmnapi.c:7871
GLOBAL void ossaGetIOEventStatsCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, agsaIOErrorEventStats_t *stats)
Definition: ossacmnapi.c:7883
osGLOBAL void ossaSMPReqReceived(agsaRoot_t *agRoot, agsaDevHandle_t *agDevHandle, agsaFrameHandle_t agFrameHandle, bit32 agIOInfoLen, bit32 phyId)
Definition: ossacmnapi.c:4087
osGLOBAL void ossaSMPIoctlCompleted(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 agIOStatus, bit32 agIOInfoLen, agsaFrameHandle_t agFrameHandle)
Definition: ossacmnapi.c:3912
FORCEINLINE void ossaCachePreFlush(agsaRoot_t *agRoot, void *osMemHandle, void *virtPtr, bit32 length)
Definition: ossacmnapi.c:134
GLOBAL void ossaSetPhyProfileCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 ppc, bit32 phyID, void *parm)
Definition: ossacmnapi.c:5857
osGLOBAL void ossaLogTrace2(agsaRoot_t *agRoot, bit32 traceCode, bit32 value1, bit32 value2)
Definition: ossacmnapi.c:721
osGLOBAL void ossaReconfigSASParamsCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, agsaSASReconfig_t *agSASConfig)
ossaReconfigSASParamsCB
Definition: ossacmnapi.c:7413
osGLOBAL void ossaStallThread(agsaRoot_t *agRoot, bit32 microseconds)
ossaStallThread
Definition: ossacmnapi.c:4652
FORCEINLINE void ossaSingleThreadedLeave(agsaRoot_t *agRoot, bit32 syncLockId)
ossaSingleThreadedLeave
Definition: ossacmnapi.c:3827
FORCEINLINE void ossaCacheInvalidate(agsaRoot_t *agRoot, void *osMemHandle, void *virtPtr, bit32 length)
Definition: ossacmnapi.c:102
GLOBAL void ossaGetForensicDataCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, agsaForensicData_t *forensicData)
Definition: ossacmnapi.c:7842
osGLOBAL void ossaSATADeviceResetCB(agsaRoot_t *agRoot, agsaDevHandle_t *agDevHandle, bit32 resetStatus, void *resetparm)
Definition: ossacmnapi.c:9054
GLOBAL void ossaGetDFEDataCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 agInfoLen)
ossaGetDFEDataCB
Definition: ossacmnapi.c:8235
osGLOBAL void ossaSSPEvent(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, agsaPortContext_t *agPortContext, agsaDevHandle_t *agDevHandle, bit32 event, bit16 sspTag, bit32 agIOInfoLen, void *agParam)
Definition: ossacmnapi.c:4682
GLOBAL bit32 ossaTimeStamp(agsaRoot_t *agRoot)
Definition: ossacmnapi.c:8446
FORCEINLINE void ossaHwRegWrite(agsaRoot_t *agRoot, bit32 regOffset, bit32 regValue)
Definition: ossacmnapi.c:3563
osGLOBAL void ossaEchoCB(agsaRoot_t *agRoot, agsaContext_t *agContext, void *echoPayload)
ossaEchoCB
Definition: ossacmnapi.c:7197
osGLOBAL void ossaLogTrace0(agsaRoot_t *agRoot, bit32 traceCode)
Definition: ossacmnapi.c:704
osGLOBAL void ossaFwFlashUpdateCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status)
ossaFwFlashUpdateCB
Definition: ossacmnapi.c:6866
osGLOBAL void ossaSASDiagExecuteCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 command, bit32 reportData)
ossaSASDiagExecuteCB
Definition: ossacmnapi.c:7347
GLOBAL void ossaEncryptSelftestExecuteCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 type, bit32 length, void *TestResult)
Definition: ossacmnapi.c:8300
GLOBAL void ossaDIFEncryptionOffloadStartCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, agsaOffloadDifDetails_t *agsaOffloadDifDetails)
Definition: ossacmnapi.c:8435
osGLOBAL void ossaGpioEvent(agsaRoot_t *agRoot, bit32 gpioEvent)
ossaGpioEvent
Definition: ossacmnapi.c:7314
osGLOBAL void ossaDiscoverSasCB(agsaRoot_t *agRoot, agsaPortContext_t *agPortContext, bit32 event, void *pParm1, void *pParm2)
Definition: ossacmnapi.c:9083
osGLOBAL void ossaLocalPhyControlCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 phyId, bit32 phyOperation, bit32 status, void *parm)
ossaLocalPhyControlCB
Definition: ossacmnapi.c:5549
osGLOBAL void ossaSATAEvent(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, agsaPortContext_t *agPortContext, agsaDevHandle_t *agDevHandle, bit32 event, bit32 agIOInfoLen, void *agParam)
Definition: ossacmnapi.c:9024
osGLOBAL void ossaSetNVMDResponseCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status)
ossaSetNVMDResponseCB
Definition: ossacmnapi.c:7050
GLOBAL void ossaSATACompleted(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 agIOStatus, void *agFirstDword, bit32 agIOInfoLen, void *agParam)
Definition: ossacmnapi.c:8996
GLOBAL void ossaOperatorManagementCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 eq)
Definition: ossacmnapi.c:8276
GLOBAL void ossaSetOperatorCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 eq)
Definition: ossacmnapi.c:8386
GLOBAL void ossaPCIeDiagExecuteCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 command, agsaPCIeDiagResponse_t *resp)
Definition: ossacmnapi.c:7423
osGLOBAL void ossaSMPCAMCompleted(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 agIOStatus, bit32 agIOInfoLen, agsaFrameHandle_t agFrameHandle)
ossaSMPCAMCompleted
Definition: ossacmnapi.c:4120
osGLOBAL void ossaDeregisterDeviceHandleCB(agsaRoot_t *agRoot, agsaContext_t *agContext, agsaDevHandle_t *agDevHandle, bit32 status)
ossaDeregisterDeviceHandleCB
Definition: ossacmnapi.c:6448
osGLOBAL void ossaPortControlCB(agsaRoot_t *agRoot, agsaContext_t *agContext, agsaPortContext_t *agPortContext, bit32 portOperation, bit32 status)
Definition: ossacmnapi.c:3439
__FBSDID("$FreeBSD$")
osGLOBAL void ossaLogTrace1(agsaRoot_t *agRoot, bit32 traceCode, bit32 value1)
Definition: ossacmnapi.c:712
osGLOBAL bit32 ossaDeviceHandleAccept(agsaRoot_t *agRoot, agsaDevHandle_t *agDevHandle, agsaSASDeviceInfo_t *agDevInfo, agsaPortContext_t *agPortContext, bit32 *hostAssignedDeviceId)
Definition: ossacmnapi.c:169
GLOBAL void ossaGetPhyProfileCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 ppc, bit32 phyID, void *parm)
Definition: ossacmnapi.c:5711
osGLOBAL bit32 ossaHwRegReadConfig32(agsaRoot_t *agRoot, bit32 regOffset)
Definition: ossacmnapi.c:3690
osGLOBAL void ossaSMPCompleted(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 agIOStatus, bit32 agIOInfoLen, agsaFrameHandle_t agFrameHandle)
ossaSMPCompleted
Definition: ossacmnapi.c:3961
osGLOBAL void ossaSASDiagStartEndCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status)
ossaSASDiagStartEndCB
Definition: ossacmnapi.c:7383
void ossaPCI_TRIGGER(agsaRoot_t *agRoot)
Definition: ossacmnapi.c:3633
osGLOBAL void ossaSSPReqReceived(agsaRoot_t *agRoot, agsaDevHandle_t *agDevHandle, agsaFrameHandle_t agFrameHandle, bit16 agInitiatorTag, bit32 parameter, bit32 agFrameLen)
ossaSSPReqReceived
Definition: ossacmnapi.c:4603
GLOBAL void ossaFlashExtExecuteCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 command, agsaFlashExtResponse_t *agFlashExtRsp)
Definition: ossacmnapi.c:6955
osGLOBAL void ossaGetDeviceHandlesCB(agsaRoot_t *agRoot, agsaContext_t *agContext, agsaPortContext_t *agPortContext, agsaDevHandle_t *agDev[], bit32 validDevs)
ossaGetDeviceHandlesCB
Definition: ossacmnapi.c:5891
osGLOBAL void ossaLogTrace4(agsaRoot_t *agRoot, bit32 traceCode, bit32 value1, bit32 value2, bit32 value3, bit32 value4)
Definition: ossacmnapi.c:744
osGLOBAL void ossaDeviceRegistrationCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, agsaDevHandle_t *agDevHandle, bit32 deviceID)
ossaDeviceRegistrationCB
Definition: ossacmnapi.c:6021
GLOBAL void ossaSMPAbortCB(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 flag, bit32 status)
ossaSMPAbortCB
Definition: ossacmnapi.c:7592
FORCEINLINE bit32 ossaHwRegRead(agsaRoot_t *agRoot, bit32 regOffset)
Definition: ossacmnapi.c:3521
GLOBAL void ossaSetDeviceStateCB(agsaRoot_t *agRoot, agsaContext_t *agContext, agsaDevHandle_t *agDevHandle, bit32 status, bit32 newDeviceState, bit32 previousDeviceState)
ossaSetDeviceStateCB
Definition: ossacmnapi.c:7952
GLOBAL void ossaHwEventAckCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status)
ossaHwEventAckCB
Definition: ossacmnapi.c:7516
GLOBAL void ossaSetDeviceInfoCB(agsaRoot_t *agRoot, agsaContext_t *agContext, agsaDevHandle_t *agDevHandle, bit32 status, bit32 option, bit32 param)
ossaSetDeviceInfoCB
Definition: ossacmnapi.c:8174
osGLOBAL void ossaDeviceHandleRemovedEvent(agsaRoot_t *agRoot, agsaDevHandle_t *agDevHandle, agsaPortContext_t *agPortContext)
ossaDeviceHandleRemovedEvent
Definition: ossacmnapi.c:6750
osGLOBAL void ossaHwCB(agsaRoot_t *agRoot, agsaPortContext_t *agPortContext, bit32 event, bit32 eventParm1, void *eventParm2, void *eventParm3)
Definition: ossacmnapi.c:775
FORCEINLINE void ossaSSPCompleted(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 agIOStatus, bit32 agIOInfoLen, void *agParam, bit16 sspTag, bit32 agOtherInfo)
ossaSSPCompleted
Definition: ossacmnapi.c:4321
GLOBAL void ossaSGpioCB(agsaRoot_t *agRoot, agsaContext_t *agContext, agsaSGpioReqResponse_t *pSgpioResponse)
Definition: ossacmnapi.c:7444
osGLOBAL void ossaSSPIoctlCompleted(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 agIOStatus, bit32 agIOInfoLen, void *agParam, bit16 sspTag, bit32 agOtherInfo)
Definition: ossacmnapi.c:3865
GLOBAL void ossaGetDeviceStateCB(agsaRoot_t *agRoot, agsaContext_t *agContext, agsaDevHandle_t *agDevHandle, bit32 status, bit32 deviceState)
ossaGetDeviceStateCB
Definition: ossacmnapi.c:8007
GLOBAL bit64 ossaTimeStamp64(agsaRoot_t *agRoot)
Definition: ossacmnapi.c:8461
GLOBAL void ossaGetTimeStampCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 timeStampLower, bit32 timeStampUpper)
ossaGetTimeStampCB
Definition: ossacmnapi.c:7561
GLOBAL void ossaGeneralEvent(agsaRoot_t *agRoot, bit32 status, agsaContext_t *agContext, bit32 *msg)
ossaGeneralEvent
Definition: ossacmnapi.c:7819
GLOBAL void ossaLogDebugString(agsaRoot_t *agRoot, bit32 level, char *string, void *ptr1, void *ptr2, bit32 value1, bit32 value2)
ossaLogDebugString
Definition: ossacmnapi.c:7483
GLOBAL void ossaGetOperatorCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 option, bit32 num, bit32 role, agsaID_t *id)
Definition: ossacmnapi.c:8326
osGLOBAL void ossaGpioResponseCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 gpioReadValue, agsaGpioPinSetupInfo_t *gpioPinSetupInfo, agsaGpioEventSetupInfo_t *gpioEventSetupInfo)
ossaGpioResponseCB
Definition: ossacmnapi.c:7266
FORCEINLINE void ossaHwRegWriteExt(agsaRoot_t *agRoot, bit32 busBaseNumber, bit32 regOffset, bit32 regValue)
Definition: ossacmnapi.c:3660
osGLOBAL void ossaGetNVMDResponseCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit8 indirectPayload, bit32 agInfoLen, agsaFrameHandle_t agFrameHandle)
ossaGetNVMDResponseCB
Definition: ossacmnapi.c:6989
GLOBAL void ossaGetRegisterDumpCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status)
ossaGetRegisterDumpCB
Definition: ossacmnapi.c:7914
FORCEINLINE void ossaSingleThreadedEnter(agsaRoot_t *agRoot, bit32 syncLockId)
ossaSingleThreadedEnter
Definition: ossacmnapi.c:3786
FORCEINLINE void ossaCacheFlush(agsaRoot_t *agRoot, void *osMemHandle, void *virtPtr, bit32 length)
Definition: ossacmnapi.c:118
osGLOBAL void ossaLogTrace3(agsaRoot_t *agRoot, bit32 traceCode, bit32 value1, bit32 value2, bit32 value3)
Definition: ossacmnapi.c:731
void ossaVhistCaptureCB(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 status, bit32 len)
ossaVhistCaptureCB
Definition: ossacmnapi.c:8265
osGLOBAL void ossaGetDeviceInfoCB(agsaRoot_t *agRoot, agsaContext_t *agContext, agsaDevHandle_t *agDevHandle, bit32 status, void *agInfo)
ossaGetDeviceInfoCB
Definition: ossacmnapi.c:5931
FORCEINLINE bit32 ossaHwRegReadExt(agsaRoot_t *agRoot, bit32 busBaseNumber, bit32 regOffset)
Definition: ossacmnapi.c:3603
osGLOBAL void ossaDiscoverSataCB(agsaRoot_t *agRoot, agsaPortContext_t *agPortContext, bit32 event, void *pParm1, void *pParm2)
Definition: ossacmnapi.c:8968
#define osti_memset(s, c, n)
Definition: osstring.h:65
#define osti_memcpy(des, src, n)
Definition: osstring.h:64
osGLOBAL bit32 ostiTargetEvent(tiRoot_t *tiRoot, tiPortalContext_t *portalContext, tiDeviceHandle_t *tiDeviceHandle, tiTgtEventType_t eventType, bit32 eventStatus, void *parm)
unsigned short bit16
Definition: ostypes.h:98
#define NULL
Definition: ostypes.h:142
unsigned long long bit64
Definition: ostypes.h:104
#define osGLOBAL
Definition: ostypes.h:147
#define agNULL
Definition: ostypes.h:151
#define GLOBAL
Definition: ostypes.h:131
unsigned int bit32
Definition: ostypes.h:99
#define agBOOLEAN
Definition: ostypes.h:146
#define agFALSE
Definition: ostypes.h:150
#define FORCEINLINE
Definition: ostypes.h:86
#define agTRUE
Definition: ostypes.h:149
unsigned char bit8
Definition: ostypes.h:97
The file defines the constants, data structure, and functions defined by LL API.
#define AGSA_PHY_HARD_RESET
Definition: sa.h:835
#define OSSA_RC_ACCEPT
Definition: sa.h:1241
#define AGSA_REQ_TYPE_UNKNOWN
Definition: sa.h:886
#define AGSA_PORT_SET_PORT_RESET_TIME
Definition: sa.h:1173
#define OSSA_HW_ENCRYPT_DEK_UPDATE
Definition: sa.h:1490
#define OSSA_ERR_DEVICE_TYPE_NOT_VALID
Definition: sa.h:1221
#define OSSA_FLASH_UPDATE_DISABLED
Definition: sa.h:1363
#define OSSA_FLASH_UPDATE_HDR_ERR
Definition: sa.h:1355
#define AGSA_RC_BUSY
Definition: sa.h:782
#define OSSA_PORT_IN_RESET
Definition: sa.h:1327
void * agsaFrameHandle_t
handle to access frame
Definition: sa.h:1719
#define OSSA_DEV_INFO_NO_EXTENDED_INFO
Definition: sa.h:1404
#define OSSA_FLASH_UPDATE_IN_PROGRESS
Definition: sa.h:1354
#define SA_DS_OPERATIONAL
Definition: sa.h:1179
#define OSSA_DISCOVER_ABORT_ERROR_9
Definition: sa.h:1382
#define OSSA_HW_EVENT_PHY_ERR_PHY_RESET_FAILED
Definition: sa.h:1308
#define AGSA_ENCRYPTION_GENERAL_CONFIG_PAGE
Definition: sa.h:3155
#define OSSA_HW_EVENT_ID_FRAME_TIMEOUT
Definition: sa.h:1300
#define OSSA_HW_EVENT_BROADCAST_EXP
Definition: sa.h:1301
#define AGSA_ENCRYPTION_HMAC_CONFIG_PAGE
Definition: sa.h:3158
#define OSSA_DEV_INFO_INVALID_HANDLE
Definition: sa.h:1403
#define OSSA_ERR_PORT_STATE_NOT_VALID
Definition: sa.h:1226
#define OSSA_HW_EVENT_RESET_START
Definition: sa.h:1284
#define OSSA_DISCOVER_ABORT_ERROR_5
Definition: sa.h:1378
#define OSSA_DEV_INFO_SATA_EXTENDED_INFO
Definition: sa.h:1406
#define OSSA_FLASH_UPDATE_COMPLETE_PENDING_REBOOT
Definition: sa.h:1353
#define OSSA_FLASH_UPDATE_HW_ERR
Definition: sa.h:1359
#define OSSA_FLASH_UPDATE_DNLD_NOT_SUPPORTED
Definition: sa.h:1362
#define AGSA_SAS_PHY_BW_COUNTERS_PAGE
Definition: sa.h:845
#define OSSA_RC_REJECT
Definition: sa.h:1242
#define OSSA_HW_EVENT_SECURITY_MODE
Definition: sa.h:1320
#define OSSA_HW_ENCRYPT_KEK_UPDATE_AND_STORE
Definition: sa.h:1488
#define AGSA_PORT_SET_SMP_PHY_WIDTH
Definition: sa.h:1170
#define OSSA_HW_EVENT_PORT_RESET_TIMER_TMO
Definition: sa.h:1311
#define OSSA_FAILURE_PHY_ID_ALREADY_REGISTERED
Definition: sa.h:1215
#define OSSA_FAILURE_INVALID_PHY_ID
Definition: sa.h:1214
#define OSSA_HW_EVENT_BROADCAST_SES
Definition: sa.h:1295
#define OSSA_DISCOVER_ABORT_ERROR_4
Definition: sa.h:1377
#define OSSA_DISCOVER_ABORT_ERROR_2
Definition: sa.h:1375
#define OSSA_DISCOVER_ABORT_ERROR_6
Definition: sa.h:1379
#define OSSA_DISCOVER_REMOVED_DEVICE
Definition: sa.h:1371
#define OSSA_DISCOVER_ABORT_ERROR_1
Definition: sa.h:1374
#define OSSA_DEV_INFO_SAS_EXTENDED_INFO
Definition: sa.h:1405
#define agsaModePageGet
Definition: sa.h:1584
#define OSSA_FLASH_UPDATE_CRC_ERR
Definition: sa.h:1357
#define OSSA_HW_EVENT_RESET_COMPLETE
Definition: sa.h:1285
#define AGSA_PHY_CLEAR_ERROR_COUNTS
Definition: sa.h:837
#define AGSA_SAS_PHY_ANALOG_SETTINGS_PAGE
Definition: sa.h:846
#define OSSA_PORT_VALID
Definition: sa.h:1325
#define OSSA_PORT_3RDPARTY_RESET
Definition: sa.h:1328
#define OSSA_DISCOVER_ABORT_ERROR_8
Definition: sa.h:1381
#define AGSA_STOP_PORT_RECOVERY_TIMER
Definition: sa.h:1176
#define OSSA_FAILURE_OUT_OF_RESOURCE
Definition: sa.h:1212
#define AGSA_PORT_IO_ABORT
Definition: sa.h:1172
#define OSSA_ERR_DEVICE_HANDLE_INVALID
Definition: sa.h:1237
#define OSSA_HW_EVENT_PORT_RESET_COMPLETE
Definition: sa.h:1312
#define AGSA_SAS_PHY_GENERAL_STATUS_PAGE
Definition: sa.h:847
#define AGSA_ENCRYPTION_DEK_CONFIG_PAGE
Definition: sa.h:3156
#define AGSA_PHY_LINK_RESET
Definition: sa.h:834
#define AGSA_INTERRUPT_CONFIGURATION_PAGE
Definition: sa.h:3153
#define AG_SA_DISCOVERY_TYPE_SATA
Definition: sa.h:863
#define OSSA_FLASH_FWDNLD_DEVICE_UNSUPPORT
Definition: sa.h:1364
#define AG_SA_DISCOVERY_OPTION_INCREMENTAL_START
Definition: sa.h:869
#define OSSA_ERR_PHY_ID_INVALID
Definition: sa.h:1230
#define OSSA_HW_EVENT_SAS_PHY_UP
Definition: sa.h:1287
#define AGSA_ENCRYPTION_CONTROL_PARM_PAGE
Definition: sa.h:3157
#define OSSA_ERR_DEVICE_ALREADY_REGISTERED
Definition: sa.h:1220
#define OSSA_ERR_DEVICE_HANDLE_UNAVAILABLE
Definition: sa.h:1219
#define OSSA_DISCOVER_STARTED
Definition: sa.h:1369
#define OSSA_INVALID_HANDLE
Definition: sa.h:1236
#define OSSA_HW_EVENT_PHY_ERR_CODE_VIOLATION
Definition: sa.h:1306
#define OSSA_FLASH_UPDATE_LENGTH_ERR
Definition: sa.h:1358
#define agsaEncryptSMB
Definition: sa.h:1526
#define agsaEncryptCipherModeECB
Definition: sa.h:1541
#define AGSA_PORT_CLEAN_UP
Definition: sa.h:1175
#define OSSA_DISCOVER_ABORT
Definition: sa.h:1373
#define OSSA_HW_EVENT_PHY_ERR_DISPARITY_ERROR
Definition: sa.h:1305
#define OSSA_HW_EVENT_SATA_SPINUP_HOLD
Definition: sa.h:1289
#define OSSA_HW_EVENT_SATA_PHY_UP
Definition: sa.h:1288
#define OSSA_HW_EVENT_ENCRYPTION
Definition: sa.h:1318
#define agsaEncryptCipherModeXTS
Definition: sa.h:1542
#define OSSA_PORT_LOSTCOMM
Definition: sa.h:1326
#define AG_SA_DISCOVERY_TYPE_SAS
Definition: sa.h:862
#define OSSA_HW_ENCRYPT_KEK_UPDATE
Definition: sa.h:1487
#define OSSA_DISCOVER_COMPLETE
Definition: sa.h:1372
#define AG_SA_DISCOVERY_OPTION_FULL_START
Definition: sa.h:868
#define OSSA_HW_EVENT_HARD_RESET_RECEIVED
Definition: sa.h:1297
#define OSSA_FAILURE_PORT_NOT_VALID_STATE
Definition: sa.h:1217
#define agsaEncryptSMA
Definition: sa.h:1525
#define OSSA_HW_ENCRYPT_OPERATOR_MANAGEMENT
Definition: sa.h:1492
#define OSSA_PORT_INVALID
Definition: sa.h:1329
#define OSSA_HW_EVENT_OPEN_RETRY_BACKOFF_THR_ADJUSTED
Definition: sa.h:1316
#define OSSA_HW_ENCRYPT_TEST_EXECUTE
Definition: sa.h:1493
#define OSSA_HW_ENCRYPT_KEK_INVALIDTE
Definition: sa.h:1489
#define AGSA_SAS_PHY_ERR_COUNTERS_PAGE
Definition: sa.h:843
#define OSSA_HW_EVENT_PHY_ERR_LOSS_OF_DWORD_SYNCH
Definition: sa.h:1307
#define AGSA_QUERY_TASK
Definition: sa.h:1110
#define OSSA_HW_EVENT_PORT_RECOVERY_TIMER_TMO
Definition: sa.h:1309
#define OSSA_DISCOVER_FOUND_DEVICE
Definition: sa.h:1370
#define SA_DEVINFO_GET_SAS_ADDRESSLO(devInfo)
Definition: sa.h:2627
#define OSSA_FLASH_UPDATE_OFFSET_ERR
Definition: sa.h:1356
#define OSSA_HW_EVENT_MALFUNCTION
Definition: sa.h:1299
#define AGSA_PHY_NOTIFY_ENABLE_SPINUP
Definition: sa.h:839
#define OSSA_HW_EVENT_PHY_DOWN
Definition: sa.h:1290
#define OSSA_FAILURE_DEVICE_TYPE_NOT_VALID
Definition: sa.h:1218
#define OSSA_ERR_PORT_INVALID
Definition: sa.h:1225
#define OSSA_FAILURE_DEVICE_ALREADY_REGISTERED
Definition: sa.h:1213
#define OSSA_HW_EVENT_MODE
Definition: sa.h:1319
#define OSSA_SUCCESS
Definition: sa.h:1200
#define OSSA_ERR_PHY_ID_ALREADY_REGISTERED
Definition: sa.h:1231
#define OSSA_HW_EVENT_PHY_START_STATUS
Definition: sa.h:1303
#define OSSA_HW_EVENT_PORT_RECOVER
Definition: sa.h:1310
#define AGSA_RC_FAILURE
Definition: sa.h:781
#define OSSA_HW_EVENT_BROADCAST_ASYNCH_EVENT
Definition: sa.h:1313
#define OSSA_ERR_DEVICE_BUSY
Definition: sa.h:1238
#define SA_DEVINFO_GET_SAS_ADDRESSHI(devInfo)
Definition: sa.h:2630
#define AGSA_PHY_BROADCAST_ASYNCH_EVENT
Definition: sa.h:840
#define OSSA_FAILURE
Definition: sa.h:1201
#define OSSA_FAILURE_PORT_ID_OUT_OF_RANGE
Definition: sa.h:1216
#define AGSA_SAS_PHY_ERR_COUNTERS_CLR_PAGE
Definition: sa.h:844
#define OSSA_MPI_ENC_ERR_CONTROLLER_NOT_IDLE
Definition: sa.h:1519
#define AGSA_SAS_PROTOCOL_TIMER_CONFIG_PAGE
Definition: sa.h:3152
#define OSSA_DISCOVER_ABORT_ERROR_3
Definition: sa.h:1376
#define OSSA_FLASH_UPDATE_HMAC_ERR
Definition: sa.h:1360
#define OSSA_HW_EVENT_BROADCAST_CHANGE
Definition: sa.h:1292
#define OSSA_HW_ENCRYPT_DEK_INVALIDTE
Definition: sa.h:1491
#define AGSA_PORT_HARD_RESET
Definition: sa.h:1174
#define AGSA_SSP_TASK_MGNT_REQ
Definition: sa.h:992
#define AGSA_PHY_GET_ERROR_COUNTS
Definition: sa.h:836
#define OSSA_HW_EVENT_PHY_STOP_STATUS
Definition: sa.h:1286
#define AGSA_PORT_SET_PORT_RECOVERY_TIME
Definition: sa.h:1171
#define OSSA_HW_EVENT_PHY_ERR_INVALID_DWORD
Definition: sa.h:1304
#define OSSA_DISCOVER_ABORT_ERROR_7
Definition: sa.h:1380
#define AGSA_RC_SUCCESS
Definition: sa.h:780
#define agsaModePageSet
Definition: sa.h:1585
#define AGSA_SAS_PHY_OPEN_REJECT_RETRY_BACKOFF_THRESHOLD_PAGE
Definition: sa.h:851
#define OSSA_HW_EVENT_PHY_ERR_INBOUND_CRC
Definition: sa.h:1296
#define AGSA_PHY_COMINIT_OOB
Definition: sa.h:841
#define OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_COLLIDE
Definition: sa_err.h:117
#define OSSA_MPI_ERR_IO_RESOURCE_UNAVAILABLE
Definition: sa_err.h:131
#define OSSA_IO_ABORTED
Definition: sa_err.h:46
#define OSSA_IO_DS_NON_OPERATIONAL
Definition: sa_err.h:103
#define OSSA_IO_XFER_CMD_FRAME_ISSUED
Definition: sa_err.h:100
#define OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_TMO
Definition: sa_err.h:115
#define OSSA_MPI_ENC_ERR_ID_TRANSFER_FAILURE
Definition: sa_err.h:184
#define OSSA_IO_XFER_ERROR_PHY_NOT_READY
Definition: sa_err.h:62
#define OSSA_IO_ABORT_DELAYED
Definition: sa_err.h:111
#define OSSA_IO_XFR_ERROR_DEK_KEY_TAG_MISMATCH
Definition: sa_err.h:165
#define OSSA_MPI_ENC_OPERATOR_OPERATOR_ALREADY_LOGGED_IN
Definition: sa_err.h:187
#define OSSA_IO_XFR_ERROR_DIF_CRC_MISMATCH
Definition: sa_err.h:194
#define OSSA_IO_OVERFLOW
Definition: sa_err.h:47
#define OSSA_IO_XFER_ERROR_OFFSET_MISMATCH
Definition: sa_err.h:98
#define OSSA_IO_UNDERFLOW
Definition: sa_err.h:48
#define OSSA_IO_SUCCESS
Definition: sa_err.h:45
#define OSSA_MPI_ENC_OPERATOR_AUTH_FAILURE
Definition: sa_err.h:186
#define OSSA_IO_XFER_ERROR_BREAK
Definition: sa_err.h:61
#define OSSA_IO_XFR_ERROR_DIF_MISMATCH
Definition: sa_err.h:191
#define OSSA_IO_NOT_VALID
Definition: sa_err.h:51
#define OSSA_MPI_ENC_ERR_UNSUPPORTED_OPTION
Definition: sa_err.h:183
#define OSSA_IO_XFER_ERROR_CMD_ISSUE_ACK_NAK_TIMEOUT
Definition: sa_err.h:93
#define OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_PATHWAY_BLOCKED
Definition: sa_err.h:118
#define OSSA_MPI_ENC_OPERATOR_ILLEGAL_PARAMETER
Definition: sa_err.h:188
#define OSSA_IO_ABORT_RESET
Definition: sa_err.h:50
#define OSSA_IO_XFR_ERROR_DIF_APPLICATION_TAG_MISMATCH
Definition: sa_err.h:192
#define OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_OPEN_RETRY_BACKOFF_THRESHOLD_REACHED
Definition: sa_err.h:114
#define OSSA_IO_NO_DEVICE
Definition: sa_err.h:52
#define OSSA_IO_XFER_ERROR_XFER_RDY_OVERRUN
Definition: sa_err.h:90
#define OSSA_IO_ABORT_IN_PROGRESS
Definition: sa_err.h:110
#define OSSA_IO_XFR_ERROR_DIF_REFERENCE_TAG_MISMATCH
Definition: sa_err.h:193
#define OSSA_IO_OPEN_CNX_ERROR_IT_NEXUS_LOSS_NO_DEST
Definition: sa_err.h:116
#define SA_SSPRESP_GET_RESPONSEDATALEN(pSSPResp)
Definition: sa_spec.h:881
#define SA_IDFRM_IS_SSP_TARGET(identFrame)
Definition: sa_spec.h:512
#define SA_SSPRESP_GET_DATAPRES(pSSPResp)
Definition: sa_spec.h:884
#define SA_SSPRESP_GET_SENSEDATALEN(pSSPResp)
Definition: sa_spec.h:878
#define SA_IDFRM_GET_SAS_ADDRESSLO(identFrame)
Definition: sa_spec.h:482
#define SA_IDFRM_GET_DEVICETTYPE(identFrame)
Definition: sa_spec.h:488
#define SA_IDFRM_GET_SAS_ADDRESSHI(identFrame)
Definition: sa_spec.h:485
The file defines the declaration of tSDK APIs.
GLOBAL bit32 saSetPhyProfile(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 queueNum, bit32 ppc, bit32 length, void *buffer, bit32 phyID)
Definition: saphy.c:936
GLOBAL void saFrameReadBlock(agsaRoot_t *agRoot, agsaFrameHandle_t agFrame, bit32 frameOffset, void *frameBuffer, bit32 frameBufLen)
Read a block from a frame.
Definition: saframe.c:96
GLOBAL bit32 saSetDeviceInfo(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 queueNum, agsaDevHandle_t *agDevHandle, bit32 option, bit32 param, ossaSetDeviceInfoCB_t agCB)
Set Device Information.
Definition: sadisc.c:672
GLOBAL bit32 saSATAAbort(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 queueNum, agsaDevHandle_t *agDevHandle, bit32 flag, void *abortParam, ossaGenericAbortCB_t agCB)
Abort SATA command.
Definition: sasata.c:592
GLOBAL bit32 saLocalPhyControl(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 queueNum, bit32 phyId, bit32 phyOperation, ossaLocalPhyControlCB_t agCB)
Initiate a Local PHY control command.
Definition: saphy.c:420
GLOBAL bit32 saSetDeviceState(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 queueNum, agsaDevHandle_t *agDevHandle, bit32 newDeviceState)
Set Device State.
Definition: sadisc.c:801
GLOBAL bit32 saEchoCommand(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 queueNum, void *echoPayload)
SAS/SATA LL API ECHO Command.
Definition: sampicmd.c:57
GLOBAL bit32 saHwEventAck(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 queueNum, agsaEventSource_t *eventSource, bit32 param0, bit32 param1)
Initiate a HW Event Ack command.
Definition: saphy.c:1004
GLOBAL bit32 saDeregisterDeviceHandle(agsaRoot_t *agRoot, agsaContext_t *agContext, agsaDevHandle_t *agDevHandle, bit32 queueNum)
Function for target to remove stale initiator device handle.
Definition: sadisc.c:83
GLOBAL bit32 saPortControl(agsaRoot_t *agRoot, agsaContext_t *agContext, bit32 queueNum, agsaPortContext_t *agPortContext, bit32 portOperation, bit32 param0, bit32 param1)
Initiate a Port COntrol IOMB command.
Definition: saport.c:422
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.
Definition: sassp.c:580
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.
Definition: sadisc.c:302
GLOBAL bit32 saDiscover(agsaRoot_t *agRoot, agsaPortContext_t *agPortContext, bit32 type, bit32 option)
Start/Abort SAS/SATA discovery.
Definition: sadisc.c:57
bit32 gLLDebugLevel
Definition: sainit.c:40
The file defines the declaration of OS APIs.
#define ossaLogIomb(a, b, c, d, e)
Definition: saosapi.h:821
GLOBAL void ossaSSPAbortCB(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 flag, bit32 status)
@ SM_RC_SUCCESS
Definition: sm.h:48
@ SM_RC_FAILURE
Definition: sm.h:49
osGLOBAL bit32 smDeregisterDevice(smRoot_t *smRoot, agsaDevHandle_t *agDevHandle, smDeviceHandle_t *smDeviceHandle)
Definition: smsat.c:85
osGLOBAL bit32 smIDStart(smRoot_t *smRoot, smIORequest_t *smIORequest, smDeviceHandle_t *smDeviceHandle)
Definition: smsat.c:3143
osGLOBAL bit32 smIOAbort(smRoot_t *smRoot, smIORequest_t *tasktag)
Definition: smsat.c:113
osGLOBAL bit32 smRegisterDevice(smRoot_t *smRoot, agsaDevHandle_t *agDevHandle, smDeviceHandle_t *smDeviceHandle, agsaDevHandle_t *agExpDevHandle, bit32 phyID, bit32 DeviceType)
Definition: smsat.c:46
#define SAT_DEV_STATE_NORMAL
Definition: smdefs.h:554
bit32 sasAddressHi
Definition: tdtypes.h:229
bit32 sasAddressLo
Definition: tdtypes.h:228
data structure stores OS specific and LL specific context
Definition: sa.h:1658
void * osData
Definition: sa.h:1659
void * sdkData
Definition: sa.h:1660
data structure provides some information about a SATA device
Definition: sa.h:2561
bit8 devType_S_Rate
Definition: sa.h:2567
bit16 firstBurstSize
Definition: sa.h:2564
bit32 flag
Definition: sa.h:2582
bit8 sasAddressHi[4]
Definition: sa.h:3359
bit32 LowerLBA
Definition: sa.h:3358
bit32 ErrBoffsetEDataLen
Definition: sa.h:3366
bit8 sasAddressLo[4]
Definition: sa.h:3360
bit32 UpperLBA
Definition: sa.h:3357
bit32 DIFErrDevID
Definition: sa.h:3365
describe a information for a Event in the SAS/SATA hardware
Definition: sa.h:2033
bit32 event
Definition: sa.h:2035
bit32 param
Definition: sa.h:2036
agsaPortContext_t * agPortContext
Definition: sa.h:2034
describe a fatal error information for a Controller in the SAS/SATA hardware
Definition: sa.h:2014
bit32 regDumpBusBaseNum0
Definition: sa.h:2019
bit32 regDumpLen1
Definition: sa.h:2024
bit32 regDumpOffset1
Definition: sa.h:2023
bit32 errorInfo3
Definition: sa.h:2018
bit32 errorInfo0
Definition: sa.h:2015
bit32 errorInfo1
Definition: sa.h:2016
bit32 regDumpBusBaseNum1
Definition: sa.h:2022
bit32 errorInfo2
Definition: sa.h:2017
bit32 regDumpOffset0
Definition: sa.h:2020
bit32 regDumpLen0
Definition: sa.h:2021
data structure for firmware flash update saFwFlashUpdate().
Definition: sa.h:3418
describe a GPIO Event Setup Infomation in the SAS/SATA hardware
Definition: sa.h:2102
bit32 gpioEventRisingEdge
Definition: sa.h:2105
bit32 gpioEventFallingEdge
Definition: sa.h:2106
describe a GPIO Pin Setup Infomation in the SAS/SATA hardware
Definition: sa.h:2115
bit32 gpioTypePart1
Definition: sa.h:2118
bit32 gpioTypePart2
Definition: sa.h:2119
bit32 gpioInputEnabled
Definition: sa.h:2117
Definition: sa.h:3292
bit8 ID[AGSA_ID_SIZE]
Definition: sa.h:3293
agsaPCIeDiagResponse_t
Definition: sa.h:1997
describe a Phy Analog Setting
Definition: sa.h:1779
describe a Phy Analog Setup registers for a Controller in the SAS/SATA hardware
Definition: sa.h:1750
structure describes bandwidth counters of a PHY in the SAS/SATA
Definition: sa.h:2287
used in saGetPhyProfile
Definition: sa.h:2270
bit32 lossOfDwordSynch
Definition: sa.h:2274
bit32 runningDisparityError
Definition: sa.h:2272
structure describe error counters of a PHY in the SAS/SATA
Definition: sa.h:2247
bit32 lossOfDwordSynch
Definition: sa.h:2253
bit32 receivedErrorPrimitive
Definition: sa.h:2260
bit32 phyResetProblem
Definition: sa.h:2255
bit32 runningDisparityError
Definition: sa.h:2250
bit32 elasticityBufferOverflow
Definition: sa.h:2258
bit32 invalidDword
Definition: sa.h:2248
bit16 numInboundQueues
Definition: sa.h:2428
bit16 numOutboundQueues
Definition: sa.h:2429
data structure provides some information about a SAS device
Definition: sa.h:2682
agsaDeviceInfo_t commonDevInfo
Definition: sa.h:2683
bit8 phyIdentifier
Definition: sa.h:2698
bit32 numOfPhys
Definition: sa.h:2697
bit8 target_ssp_stp_smp
Definition: sa.h:2691
bit8 initiator_ssp_stp_smp
Definition: sa.h:2685
describe SAS IDENTIFY address frame
Definition: sa_spec.h:448
for the SAS/SATA LL Layer
Definition: sa.h:2522
describe a Open reject retry backoff threshold page
Definition: sa.h:1799
describe a SAS ReCofiguration structure in the SAS/SATA hardware
Definition: sa.h:1726
data structure provides some information about a SATA device
Definition: sa.h:2649
agsaDeviceInfo_t commonDevInfo
Definition: sa.h:2650
bit8 stpPhyIdentifier
Definition: sa.h:2664
bit8 signature[8]
Definition: sa.h:2668
bit8 portMultiplierField
Definition: sa.h:2658
data structure provides the identify data of the SATA device
Definition: sa_spec.h:530
describe a serial GPIO request and response in the SAS/SATA hardware
Definition: sa.h:2156
data structure describes the first four bytes of the SMP frame.
Definition: sa_spec.h:921
data structure describes a SAS SSP command request to be sent to the target device
Definition: sa.h:2892
structure describes an SSP Response INFORMATION UNIT
Definition: sa_spec.h:818
structure describes a SAS SSP Task Management command request
Definition: sa_spec.h:898
Definition: dm.h:91
void * tdData
Definition: dm.h:92
bit8 initiator_ssp_stp_smp
Definition: dm.h:104
bit16 ext
Definition: dm.h:114
bit8 devType_S_Rate
Definition: dm.h:101
bit8 target_ssp_stp_smp
Definition: dm.h:105
bit32 flag
Definition: dm.h:159
bit8 sasRemoteAddressHi[4]
Definition: dm.h:155
bit8 sasRemoteAddressLo[4]
Definition: dm.h:156
bit8 sasLocalAddressHi[4]
Definition: dm.h:157
bit8 sasLocalAddressLo[4]
Definition: dm.h:158
bit32 satNCQMaxIO
Definition: tdtypes.h:289
bit32 satPendingNCQIO
Definition: tdtypes.h:287
bit32 satPendingIO
Definition: tdtypes.h:286
bit32 satDriveState
Definition: tdtypes.h:290
bit32 satPendingNONNCQIO
Definition: tdtypes.h:288
agsaSATAIdentifyData_t satIdentifyData
Definition: tdtypes.h:273
bit32 satDeviceType
Definition: tdtypes.h:302
bit32 IDPending
Definition: tdtypes.h:313
bit32 IDDeviceValid
Definition: tdtypes.h:305
void * tdData
Definition: sm.h:138
void * smData
Definition: sm.h:139
bit8 inProgress
Definition: tdioctl.h:257
bit8 * usrAddr
Definition: tdioctl.h:254
data structure for SAS SSP IO reuqest body This structure contains IO related fields....
Definition: tdtypes.h:587
tiIORequest_t * tiIOToBeAbortedRequest
Definition: tdtypes.h:592
tiDeviceHandle_t * tiDevHandle
Definition: tdtypes.h:589
tdssIOCompleted_t IOCompletionFunc
Definition: tdtypes.h:588
bit32 ioCompleted
Definition: tdtypes.h:620
struct tdIORequestBody_s::@15::@17 SAS
void * osMemHandle
Definition: tdtypes.h:633
struct tdIORequestBody_s::@16::@20 InitiatorTMIO
union tdIORequestBody_s::@15 transport
union tdIORequestBody_s::@16 IOType
bit32 agRequestType
Definition: tdtypes.h:624
tiIORequest_t * tiIORequest
Definition: tdtypes.h:590
agsaSASRequestBody_t agSASRequestBody
Definition: tdtypes.h:607
tdList_t * flink
Definition: tdlist.h:38
bit32 LossOfSyncDW
Definition: tdioctl.h:650
bit32 BW_rx
Definition: tdioctl.h:646
bit32 phyResetProblem
Definition: tdioctl.h:651
bit32 BW_tx
Definition: tdioctl.h:645
bit32 runningDisparityError
Definition: tdioctl.h:648
bit32 inboundCRCError
Definition: tdioctl.h:652
bit32 InvalidDword
Definition: tdioctl.h:647
bit32 codeViolation
Definition: tdioctl.h:649
agBOOLEAN resetInProgress
Definition: tdtypes.h:193
data structure for SAS/SATA context at TD layer
Definition: tdsatypes.h:199
agsaQueueConfig_t QueueConfig
Definition: tdsatypes.h:217
bit32 portTMO
Definition: tdsatypes.h:298
tdList_t MainPortContextList
Definition: tdsatypes.h:248
bit32 ResetInDiscovery
Definition: tdsatypes.h:302
tdList_t FreePortContextList
Definition: tdsatypes.h:247
tdFWControlEx_t tdFWControlEx
Definition: tdsatypes.h:258
tdsaHwEventSource_t eventSource[TD_MAX_NUM_PHYS]
Definition: tdsatypes.h:297
tdList_t MainDeviceList
Definition: tdsatypes.h:250
tdList_t FreeDeviceList
Definition: tdsatypes.h:249
tdsaPortStartInfo_t Ports[TD_MAX_NUM_PHYS]
Definition: tdsatypes.h:255
struct tdsaComMemFlags_s flags
Definition: tdsatypes.h:210
struct itdsaIni_s * itdsaIni
Definition: tdsatypes.h:240
bit32 MaxNumOSLocks
Definition: tdsatypes.h:309
data structure for SAS device list This structure maintains the device as a list and information abou...
Definition: tdtypes.h:322
tiDeviceHandle_t tiDeviceHandle
Definition: tdtypes.h:325
agsaRoot_t * agRoot
Definition: tdtypes.h:335
bit8 target_ssp_stp_smp
Definition: tdtypes.h:343
tdList_t MainLink
Definition: tdtypes.h:328
agsaDevHandle_t * agDevHandle
Definition: tdtypes.h:336
bit8 initiator_ssp_stp_smp
Definition: tdtypes.h:342
bit8 directlyAttached
Definition: tdtypes.h:367
struct tdsaPortContext_s * tdPortContext
Definition: tdtypes.h:349
agsaContext_t agDeviceResetContext
Definition: tdtypes.h:371
tdList_t FreeLink
Definition: tdtypes.h:327
TDSASAddressID_t SASAddressID
Definition: tdtypes.h:341
satDeviceData_t satDevData
Definition: tdtypes.h:346
bit32 OSAbortAll
Definition: tdtypes.h:376
agsaDeviceInfo_t agDeviceInfo
Definition: tdtypes.h:357
tdsaJumpTable_t * pJumpTable
Definition: tdtypes.h:324
struct tdsaDeviceData_s * ExpDevice
Definition: tdtypes.h:361
agsaContext_t agContext
Definition: tdtypes.h:358
agsaEventSource_t Source
Definition: tdsatypes.h:189
tdssSMPReqReceived_t pSMPReqReceived
Definition: tdtypes.h:106
tdssSSPReqReceived_t pSSPReqReceived
Definition: tdtypes.h:104
data structure for TD port context This structure maintains information about the port such as ID add...
Definition: tdtypes.h:412
bit32 sasRemoteAddressLo
Definition: tdtypes.h:433
bit32 sasLocalAddressHi
Definition: tdtypes.h:438
bit32 eventPhyID
Definition: tdtypes.h:457
tdList_t FreeLink
Definition: tdtypes.h:429
bit32 sasRemoteAddressHi
Definition: tdtypes.h:432
bit32 DiscFailNSeenBC
Definition: tdtypes.h:461
bit32 RegisteredDevNums
Definition: tdtypes.h:456
bit32 sasLocalAddressLo
Definition: tdtypes.h:439
tiPortalContext_t * tiPortalContext
Definition: tdtypes.h:443
tdList_t MainLink
Definition: tdtypes.h:430
agsaSASIdentify_t SASID
Definition: tdtypes.h:480
tdsaPortContext_t * portContext
Definition: tdtypes.h:479
tiPortalContext_t * tiPortalContext
Definition: tdtypes.h:478
data structure OS root from the view of lower layer. TD Layer interrupt/non-interrupt context support...
Definition: tdtypes.h:151
void * ttdsaTgt
Definition: tdtypes.h:155
void * tdsaAllShared
Definition: tdtypes.h:153
agBOOLEAN IntContext
Definition: tdtypes.h:159
tiRoot_t * tiRoot
Definition: tdtypes.h:152
the root data structure for TD layer
Definition: tdsatypes.h:362
tdsaContext_t tdsaAllShared
Definition: tdsatypes.h:364
bit8 initiator_ssp_stp_smp
Definition: tdtypes.h:396
bit32 sasAddressLo
Definition: tdtypes.h:395
bit8 target_ssp_stp_smp
Definition: tdtypes.h:397
bit32 sasAddressHi
Definition: tdtypes.h:394
data structure for SAS SMP reuqest body This structure contains IO related fields....
Definition: tdtypes.h:668
tdssSMPCompleted_t SMPCompletionFunc
Definition: tdtypes.h:670
void * tdData
Definition: titypes.h:57
bit32 subEvent
Definition: titypes.h:308
void * pData
Definition: titypes.h:309
bit32 encryptEvent
Definition: titypes.h:307
void * osData
Definition: titypes.h:117
void * tdData
Definition: titypes.h:118
Definition: titypes.h:61
void * tdData
Definition: titypes.h:63
void * senseData
Definition: titypes.h:131
bit8 senseLen
Definition: titypes.h:132
#define TD_MAX_NUM_NOTIFY_SPINUP
Definition: tddefs.h:1105
#define TD_GET_PORT_STATE(input)
Definition: tddefs.h:1101
#define SAS_PORT_RESET_TMO
Definition: tddefs.h:1113
#define SATA_PORT_RESET_TMO
Definition: tddefs.h:1114
#define TD_GET_SAS_ADDRESSHI(sasAddressHi)
Definition: tddefs.h:1193
#define TD_GET_LINK_RATE(input)
Definition: tddefs.h:1100
#define NO_ACK
Definition: tddefs.h:1129
#define TD_OPERATION_TARGET
Definition: tddefs.h:89
#define TD_GET_RESET_STATUS(input)
Definition: tddefs.h:1103
#define TD_GET_SAS_ADDRESSLO(sasAddressLo)
Definition: tddefs.h:1190
#define tIsSPC12SATA(agr)
Definition: tddefs.h:1263
#define tIsSPCV12G(agr)
Definition: tddefs.h:1279
#define TD_ASSERT
Definition: tddefs.h:1055
#define TD_GET_PHY_ID(input)
Definition: tddefs.h:1098
#define TD_GET_PHY_STATUS(input)
Definition: tddefs.h:1102
#define TD_MAX_NUM_PHYS
Definition: tddefs.h:108
#define tIsSPCV12or6G(agr)
Definition: tddefs.h:1306
#define SAS_12G_PORT_RESET_TMO
Definition: tddefs.h:1115
#define TD_OPERATION_INITIATOR
Definition: tddefs.h:88
@ TD_TIMER_LOCK
Definition: tddefs.h:1159
@ TD_DEVICE_LOCK
Definition: tddefs.h:1146
@ TD_PORT_LOCK
Definition: tddefs.h:1149
#define tiIS_SPC(agr)
Definition: tddefs.h:1265
osGLOBAL void tdsaPortContextReInit(tiRoot_t *tiRoot, tdsaPortContext_t *onePortContext)
Definition: tdinit.c:2811
osGLOBAL void tdsaDeviceDataReInit(tiRoot_t *tiRoot, tdsaDeviceData_t *oneDeviceData)
Definition: tdinit.c:3071
osGLOBAL void ostiGetPhyGeneralStatusRsp(tiRoot_t *tiRoot, agsaSASPhyGeneralStatusPage_t *GenStatus, bit32 phyID)
Definition: tdioctl.c:2897
osGLOBAL void ostiSgpioIoctlRsp(tiRoot_t *tiRoot, agsaSGpioReqResponse_t *pSgpioResponse)
Definition: tdioctl.c:1418
osGLOBAL void ostiCOMMgntVPDSetIOCTLRsp(tiRoot_t *tiRoot, bit32 status)
Definition: tdioctl.c:2244
#define TDLIST_OBJECT_BASE(baseType, fieldName, fieldPtr)
Definition: tdlist.h:161
#define TDLIST_NOT_EMPTY(listHdr)
Definition: tdlist.h:76
#define TDLIST_ENQUEUE_AT_TAIL(toAddHdr, listHdr)
Definition: tdlist.h:65
#define TDLIST_EMPTY(listHdr)
Definition: tdlist.h:73
#define TDLIST_DEQUEUE_THIS(hdr)
Definition: tdlist.h:79
#define TDLIST_DEQUEUE_FROM_HEAD(atHeadHdr, listHdr)
Definition: tdlist.h:93
void tdsaSingleThreadedEnter(tiRoot_t *ptiRoot, bit32 queueId)
Definition: tdmisc.c:2862
void tdhexdump(const char *ptitle, bit8 *pbuf, int len)
Definition: tdmisc.c:2836
void tdsaSingleThreadedLeave(tiRoot_t *ptiRoot, bit32 queueId)
Definition: tdmisc.c:2875
osGLOBAL bit32 tdsaAbortAll(tiRoot_t *tiRoot, agsaRoot_t *agRoot, tdsaDeviceData_t *oneDeviceData)
Definition: tdmisc.c:354
osGLOBAL void print_tdlist_flink(tdList_t *hdr, int type, int flag)
Definition: tdmisc.c:2733
osGLOBAL void tdsaDeregisterDevicesInPort(tiRoot_t *tiRoot, tdsaPortContext_t *onePortContext)
Definition: tdmisc.c:2604
osGLOBAL void tdssRemoveSASFromSharedcontext(tdsaPortContext_t *tdsaPortContext_Ins, tdsaDeviceData_t *tdsaDeviceData_Ins, agsaRoot_t *agRoot)
Definition: tdport.c:6790
FORCEINLINE bit32 tdsaRotateQnumber(tiRoot_t *tiRoot, tdsaDeviceData_t *oneDeviceData)
Definition: tdport.c:7956
osGLOBAL void tdssAddSASToSharedcontext(tdsaPortContext_t *tdsaPortContext_Instance, agsaRoot_t *agRoot, agsaDevHandle_t *agDevHandle, tdsaSASSubID_t *agSASSubID, bit32 registered, bit8 phyID, bit32 flag)
Definition: tdport.c:6487
osGLOBAL void tdssRemoveSASSATAFromSharedcontextByReset(agsaRoot_t *agRoot)
osGLOBAL void tdssSubAddSATAToSharedcontext(tiRoot_t *tiRoot, tdsaDeviceData_t *oneDeviceData)
osGLOBAL void tdssRetrySATAID(tiRoot_t *tiRoot, tdsaDeviceData_t *oneDeviceData)
osGLOBAL void tdssAddSATAToSharedcontext(tdsaPortContext_t *tdsaPortContext_Instance, agsaRoot_t *agRoot, agsaDevHandle_t *agDevHandle, agsaSATADeviceInfo_t *agSATADeviceInfo, bit32 registered, bit8 phyID)
osGLOBAL void tdsaAddTimer(tiRoot_t *tiRoot, tdList_t *timerListHdr, tdsaTimerRequest_t *timerRequest)
Definition: tdtimers.c:202
#define TDSA_OUT_LEAVE(root)
Definition: tdproto.h:2253
osGLOBAL void tdsaKillTimer(tiRoot_t *tiRoot, tdsaTimerRequest_t *timerRequest)
Definition: tdtimers.c:228
#define TDSA_OUT_ENTER(root)
Definition: tdproto.h:2252
osGLOBAL void tdsaSetTimerRequest(tiRoot_t *tiRoot, tdsaTimerRequest_t *timerRequest, bit32 timeout, tdsaTimerCBFunc_t CBFunc, void *timerData1, void *timerData2, void *timerData3)
Definition: tdtimers.c:170
#define TD_SAS_DEVICE
Definition: tdsatypes.h:41
#define TD_DEFAULT_DEVICE
Definition: tdsatypes.h:40
#define REPORT_LUN_OPCODE
Definition: tdtypes.h:489
osGLOBAL void ostiSendSMPIOCTLRsp(tiRoot_t *tiRoot, bit32 status)
Definition: tdioctl.c:3237
osGLOBAL void ostiGetNVMDIOCTLRsp(tiRoot_t *tiRoot, bit32 status)
Definition: tdioctl.c:1640
osGLOBAL void ostiCOMMgntIOCTLRsp(tiRoot_t *tiRoot, bit32 status)
Definition: tdioctl.c:1466
osGLOBAL void ostiGetIoErrorStatsIOCTLRsp(tiRoot_t *tiRoot, bit32 status, void *param)
osGLOBAL void ostiNumOfLUNIOCTLRsp(tiRoot_t *tiRoot, bit32 status)
Definition: tdioctl.c:3639
osGLOBAL void ostiGetPhyProfileIOCTLRsp(tiRoot_t *tiRoot, bit32 status)
Definition: tdioctl.c:1693
osGLOBAL void ostiGenEventIOCTLRsp(tiRoot_t *tiRoot, bit32 status)
Definition: tdioctl.c:1764
osGLOBAL void ostiGetForensicDataIOCTLRsp(tiRoot_t *tiRoot, bit32 status, void *param)
Definition: tdioctl.c:1924
osGLOBAL void ostiGetIoEventStatsIOCTLRsp(tiRoot_t *tiRoot, bit32 status, void *param)
Definition: tdioctl.c:1900
osGLOBAL void ostiRegDumpIOCTLRsp(tiRoot_t *tiRoot, bit32 status)
Definition: tdioctl.c:1505
osGLOBAL void ostiSetNVMDIOCTLRsp(tiRoot_t *tiRoot, bit32 status)
Definition: tdioctl.c:1546
@ tiAbortFailed
Definition: tidefs.h:512
@ tiAbortInProgress
Definition: tidefs.h:514
@ tiAbortOK
Definition: tidefs.h:511
@ tiAbortDelayed
Definition: tidefs.h:513
@ tiModePageOperation
Definition: tidefs.h:140
@ tiPortLinkDown
Definition: tidefs.h:132
@ tiPortDiscoveryReady
Definition: tidefs.h:137
@ tiEncryptOperation
Definition: tidefs.h:139
@ tiPortStopped
Definition: tidefs.h:135
@ tiPortLinkUp
Definition: tidefs.h:133
@ tiPortPanic
Definition: tidefs.h:129
@ tiPortResetComplete
Definition: tidefs.h:130
#define TI_ENCRYPT_SEC_MODE_B
Definition: tidefs.h:273
@ tiRecOK
Definition: tidefs.h:491
@ tiRecFailed
Definition: tidefs.h:492
@ tiDetailNoLogin
Definition: tidefs.h:201
@ tiDetailAbortReset
Definition: tidefs.h:203
@ tiDetailOtherError
Definition: tidefs.h:214
@ tiDetailAborted
Definition: tidefs.h:204
#define TI_ENCRYPT_SEC_MODE_A
Definition: tidefs.h:272
@ tiSuccess
Definition: tidefs.h:67
@ tiBusy
Definition: tidefs.h:69
@ tiError
Definition: tidefs.h:68
#define TI_ENCRYPT_ATTRIB_CIPHER_XTS
Definition: tidefs.h:276
@ tiTgtEventTypeDeviceChange
Definition: tidefs.h:601
#define TI_ENCRYPT_ATTRIB_CIPHER_ECB
Definition: tidefs.h:277
@ tiIOOverRun
Definition: tidefs.h:180
@ tiIOUnderRun
Definition: tidefs.h:181
@ tiIOFailed
Definition: tidefs.h:182
@ tiIOSuccess
Definition: tidefs.h:179
@ tiTMFailed
Definition: tidefs.h:499
@ tiTMOK
Definition: tidefs.h:498
@ tiEncryptDekInvalidate
Definition: tidefs.h:151
@ tiEncryptGetOperator
Definition: tidefs.h:160
@ tiEncryptDekAdd
Definition: tidefs.h:155
@ tiEncryptSetOperator
Definition: tidefs.h:159
@ tiEncryptSetMode
Definition: tidefs.h:149
@ tiEncryptKekStore
Definition: tidefs.h:152
@ tiEncryptSelfTest
Definition: tidefs.h:158
@ tiEncryptGetInfo
Definition: tidefs.h:148
@ tiEncryptOperatorManagement
Definition: tidefs.h:157
@ tiEncryptKekAdd
Definition: tidefs.h:150
@ tiDeviceArrival
Definition: tidefs.h:505
@ tiDeviceRemoval
Definition: tidefs.h:504
tiSMPStatus_t
Definition: tidefs.h:191
@ tiSMPAborted
Definition: tidefs.h:193
@ tiSMPSuccess
Definition: tidefs.h:192
@ tiSMPFailed
Definition: tidefs.h:194
@ tiNVRAMNotFound
Definition: tidefs.h:543
@ tiNVRAMSuccess
Definition: tidefs.h:540
@ tiNVRAMAccessTimeout
Definition: tidefs.h:544
@ tiNVRAMWriteFail
Definition: tidefs.h:541
@ tiDiscFailed
Definition: tidefs.h:478
@ tiDiscOK
Definition: tidefs.h:477
@ tiIntrEventTypeLocalAbort
Definition: tidefs.h:463
@ tiIntrEventTypeTransportRecovery
Definition: tidefs.h:459
@ tiIntrEventTypeDeviceChange
Definition: tidefs.h:461
@ tiIntrEventTypeDiscovery
Definition: tidefs.h:458
@ tiIntrEventTypeTaskManagement
Definition: tidefs.h:460
#define TI_ENCRYPT_SEC_MODE_FACT_INIT
Definition: tidefs.h:271
#define TI_DBG3(a)
Definition: tiglobal.h:50
#define TI_DBG4(a)
Definition: tiglobal.h:51
#define TI_DBG6(a)
Definition: tiglobal.h:53
#define TI_DBG1(a)
Definition: tiglobal.h:48
#define TI_DBG5(a)
Definition: tiglobal.h:52
#define TI_DBG2(a)
Definition: tiglobal.h:49
union data structure specifies a request
Definition: sa.h:3104
agsaSSPScsiTaskMgntReq_t sspTaskMgntReq
Definition: sa.h:3109