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* $FreeBSD$
22*
23********************************************************************************/
24/*******************************************************************************/
25/** \file
26 *
27 * function definitions used in SAS/SATA TD layer
28 *
29 */
30
31#ifndef __TDPROTO_H__
32#define __TDPROTO_H__
33
34#ifdef FDS_DM
35#include <dev/pms/RefTisa/discovery/api/dm.h>
36#endif
37
38/*****************************************************************************
39*
40* SA SHARED PROTOTYPES
41*
42*****************************************************************************/
43
44osGLOBAL void
45tdsaQueueConfigInit(
46             tiRoot_t *tiRoot
47             );
48
49osGLOBAL void
50tdsaEsglInit(
51             tiRoot_t *tiRoot
52             );
53
54osGLOBAL void
55tdsaResetComMemFlags(
56                   tiRoot_t *tiRoot
57                   );
58
59
60osGLOBAL void
61tdsaInitTimerRequest(
62                     tiRoot_t                *tiRoot,
63                     tdsaTimerRequest_t      *timerRequest
64                     );
65
66osGLOBAL void
67tdsaSetTimerRequest(
68                  tiRoot_t            *tiRoot,
69                  tdsaTimerRequest_t  *timerRequest,
70                  bit32               timeout,
71                  tdsaTimerCBFunc_t   CBFunc,
72                  void                *timerData1,
73                  void                *timerData2,
74                  void                *timerData3
75                  );
76
77osGLOBAL void
78tdsaAddTimer (
79              tiRoot_t            *tiRoot,
80              tdList_t            *timerListHdr,
81              tdsaTimerRequest_t  *timerRequest
82             );
83
84osGLOBAL void
85tdsaKillTimer(
86              tiRoot_t            *tiRoot,
87              tdsaTimerRequest_t  *timerRequest
88              );
89
90
91
92
93
94osGLOBAL void
95tdsaLoLevelGetResource (
96                        tiRoot_t              * tiRoot,
97                        tiLoLevelResource_t   * loResource
98                        );
99
100osGLOBAL void
101tdsaSharedMemCalculate (
102                        tiRoot_t              * tiRoot,
103                        tiLoLevelResource_t   * loResource,
104                        tiTdSharedMem_t       * tdSharedMem
105                        );
106
107osGLOBAL void
108tdsaGetEsglPagesInfo(
109                     tiRoot_t *tiRoot,
110                     bit32    *PageSize,
111                     bit32    *NumPages
112                     );
113
114osGLOBAL void
115tdsaGetPortParams(
116                  tiRoot_t *tiRoot
117                  );
118
119
120
121osGLOBAL void
122tdsaGetSwConfigParams(
123                      tiRoot_t *tiRoot
124                      );
125
126osGLOBAL void
127tdsaGetHwConfigParams(
128                      tiRoot_t *tiRoot
129                      );
130
131osGLOBAL void
132tdsaGetCardPhyParams(
133                       tiRoot_t *tiRoot
134                       );
135
136
137osGLOBAL void
138tdsaGetGlobalPhyParams(
139                       tiRoot_t *tiRoot
140                       );
141
142osGLOBAL bit32
143tdsaGetCardIDString(
144                    tiRoot_t *tiRoot
145                    );
146
147osGLOBAL void
148tdsaParseLinkRateMode(
149                      tiRoot_t *tiRoot,
150                      bit32 index,
151                      bit32 LinkRateRead,
152                      bit32 ModeRead,
153                      bit32 OpticalModeRead,
154                      bit32 LinkRate,
155                      bit32 Mode,
156                      bit32 OpticalMode
157                      );
158
159osGLOBAL void
160tdsaInitTimers(
161               tiRoot_t *tiRoot
162               );
163
164osGLOBAL void
165tdsaProcessTimers(
166                  tiRoot_t *tiRoot
167                  );
168
169osGLOBAL void
170tdsaInitTimerHandler(
171                     tiRoot_t  *tiRoot,
172                     void      *timerData
173                     );
174
175osGLOBAL void
176tdsaGetEsglPages(
177                 tiRoot_t *tiRoot,
178                 tdList_t *EsglListHdr,
179                 tiSgl_t  *ptiSgl,
180                 tiSgl_t  *virtSgl
181                 );
182
183osGLOBAL void
184tdsaFreeEsglPages(
185                  tiRoot_t *tiRoot,
186                  tdList_t *EsglListHdr
187                  );
188
189osGLOBAL void
190tdssGetMaxTargetsParams(
191                      tiRoot_t                *tiRoot,
192                      bit32                   *pMaxTargets
193                      );
194
195osGLOBAL void
196tdssGetSATAOnlyModeParams(
197                      tiRoot_t                *tiRoot,
198                      bit32                   *pMaxTargets
199                      );
200
201osGLOBAL bit32
202tdipFWControlIoctl(
203                   tiRoot_t            *tiRoot,
204                   tiIOCTLPayload_t    *agIOCTLPayload,
205                   void                *agParam1,
206                   void                *agParam2,
207                   void                *agParam3
208                   );
209
210osGLOBAL bit32
211tdsaVPDGetIoctl(
212                tiRoot_t            *tiRoot,
213                tiIOCTLPayload_t    *agIOCTLPayload,
214                void                *agParam1,
215                void                *agParam2,
216                void                *agParam3
217                );
218
219osGLOBAL bit32
220tdsaVPDSetIoctl(
221                tiRoot_t            *tiRoot,
222                tiIOCTLPayload_t    *agIOCTLPayload,
223                void                *agParam1,
224                void                *agParam2,
225                void                *agParam3
226                );
227
228osGLOBAL void
229ostiCOMMgntVPDSetIOCTLRsp(
230                          tiRoot_t            *tiRoot,
231                          bit32               status
232                          );
233
234osGLOBAL void
235tdsaFreeCardID(tiRoot_t *tiRoot,
236               bit32    CardID
237               );
238
239
240osGLOBAL bit32
241tdsaAbortAll(
242             tiRoot_t                   *tiRoot,
243             agsaRoot_t                 *agRoot,
244             tdsaDeviceData_t           *oneDeviceData
245             );
246
247osGLOBAL bit32
248tdsaFindLocalMCN(
249                 tiRoot_t                   *tiRoot,
250                 tdsaPortContext_t          *onePortContext
251                );
252
253osGLOBAL bit32
254tdsaRegDumpGetIoctl(
255                tiRoot_t            *tiRoot,
256                tiIOCTLPayload_t    *agIOCTLPayload,
257                void                *agParam1,
258                void                *agParam2,
259                void                *agParam3
260                );
261
262osGLOBAL bit32
263tdsaNVMDSetIoctl(
264                tiRoot_t            *tiRoot,
265                tiIOCTLPayload_t    *agIOCTLPayload,
266                void                *agParam1,
267                void                *agParam2,
268                void                *agParam3
269                );
270
271osGLOBAL bit32
272tdsaNVMDGetIoctl(
273                tiRoot_t            *tiRoot,
274                tiIOCTLPayload_t    *agIOCTLPayload,
275                void                *agParam1,
276                void                *agParam2,
277                void                *agParam3
278                );
279
280osGLOBAL void ostiGetGpioIOCTLRsp(
281		tiRoot_t	       *tiRoot,
282		bit32		       status,
283		bit32		       gpioReadValue,
284		agsaGpioPinSetupInfo_t *gpioPinSetupInfo,
285		agsaGpioEventSetupInfo_t *gpioEventSetupInfo
286		);
287
288osGLOBAL bit32
289tdsaGpioSetup(
290		tiRoot_t		*tiRoot,
291		agsaContext_t		*agContext,
292		tiIOCTLPayload_t	*agIOCTLPayload,
293		void			*agParam1,
294		void			*agParam2
295		);
296
297
298osGLOBAL bit32
299tdsaSGpioIoctlSetup(
300                    tiRoot_t            *tiRoot,
301                    agsaContext_t       *agContext,
302                    tiIOCTLPayload_t    *agIOCTLPayload,
303                    void                *agParam1,
304                    void                *agParam2
305                    );
306
307osGLOBAL void ostiSgpioIoctlRsp(
308                                tiRoot_t                *tiRoot,
309                                agsaSGpioReqResponse_t  *pSgpioResponse
310                                );
311osGLOBAL bit32
312tdsaDeviceInfoGetIoctl(
313                tiRoot_t            *tiRoot,
314                tiIOCTLPayload_t    *agIOCTLPayload,
315                void                *agParam1,
316                void                *agParam2,
317                void                *agParam3
318                );
319
320osGLOBAL bit32
321tdsaIoErrorStatisticGetIoctl(
322                 tiRoot_t            *tiRoot,
323                 tiIOCTLPayload_t    *agIOCTLPayload,
324                 void                *agParam1,
325                 void                *agParam2,
326                 void                *agParam3
327                 );
328
329osGLOBAL bit32
330tdsaIoEventStatisticGetIoctl(
331                 tiRoot_t            *tiRoot,
332                 tiIOCTLPayload_t    *agIOCTLPayload,
333                 void                *agParam1,
334                 void                *agParam2,
335                 void                *agParam3
336                 );
337
338osGLOBAL bit32
339tdsaForensicDataGetIoctl(
340                 tiRoot_t            *tiRoot,
341                 tiIOCTLPayload_t    *agIOCTLPayload,
342                 void                *agParam1,
343                 void                *agParam2,
344                 void                *agParam3
345                 );
346
347osGLOBAL bit32
348tdsaSendSMPIoctl(
349                tiRoot_t            *tiRoot,
350                tiIOCTLPayload_t    *agIOCTLPayload,
351                void                *agParam1,
352                void                *agParam2,
353                void                *agParam3
354                );
355
356osGLOBAL bit32
357tdsaSendBISTIoctl(
358                 tiRoot_t            *tiRoot,
359                 tiIOCTLPayload_t    *agIOCTLPayload,
360                 void                *agParam1,
361                 void                *agParam2,
362                 void                *agParam3
363                 );
364
365osGLOBAL bit32
366tdsaSendTMFIoctl(
367		tiRoot_t	*tiRoot,
368		tiIOCTLPayload_t *agIOCTLPayload,
369		void		*agParam1,
370		void		*agParam2,
371		unsigned long	resetType
372	       );
373
374
375osGLOBAL bit32
376tdsaRegisterIoctl(
377                 tiRoot_t            *tiRoot,
378                 tiIOCTLPayload_t    *agIOCTLPayload,
379                 void                *agParam1,
380                 void                *agParam2,
381                 void                *agParam3
382                 );
383
384osGLOBAL bit32
385tdsaGetPhyGeneralStatusIoctl(
386	                tiRoot_t                  *tiRoot,
387	                agsaPhyGeneralState_t     *PhyData
388	                );
389
390osGLOBAL void ostiGetPhyGeneralStatusRsp(
391									tiRoot_t				      *tiRoot,
392                                    agsaSASPhyGeneralStatusPage_t *GenStatus,
393                                    bit32                          phyID
394									);
395
396
397osGLOBAL bit32
398tdsaPhyProfileIoctl(
399                 tiRoot_t            *tiRoot,
400                 tiIOCTLPayload_t    *agIOCTLPayload,
401                 void                *agParam1,
402                 void                *agParam2,
403                 void                *agParam3
404                 );
405
406osGLOBAL void
407tdsaDeregisterDevicesInPort(
408                tiRoot_t             *tiRoot,
409                tdsaPortContext_t    *onePortContext
410               );
411
412#ifdef VPD_TESTING
413osGLOBAL bit32
414tdsaVPDGet(
415                tiRoot_t            *tiRoot
416                );
417
418osGLOBAL bit32
419tdsaVPDSet(
420                tiRoot_t            *tiRoot
421                );
422
423#endif
424
425/*****************************************************************************
426*
427* SAS SHARED PROTOTYPES
428*
429*****************************************************************************/
430osGLOBAL void
431tdsaJumpTableInit(
432                  tiRoot_t *tiRoot
433                  );
434
435osGLOBAL void
436tdsaPortContextInit(
437                    tiRoot_t *tiRoot
438                    );
439
440osGLOBAL void
441tdsaPortContextReInit(
442                      tiRoot_t             *tiRoot,
443                      tdsaPortContext_t    *onePortContext
444                    );
445
446osGLOBAL void
447tdsaDeviceDataInit(
448                   tiRoot_t *tiRoot
449                   );
450
451osGLOBAL void
452tdsaDeviceDataReInit(
453                   tiRoot_t             *tiRoot,
454                   tdsaDeviceData_t     *oneDeviceData
455                   );
456
457#ifdef TD_INT_COALESCE
458osGLOBAL void
459tdsaIntCoalCxtInit(
460                    tiRoot_t *tiRoot
461                    );
462#endif
463
464osGLOBAL FORCEINLINE bit32
465tdsaRotateQnumber(tiRoot_t                *tiRoot,
466                  tdsaDeviceData_t        *oneDeviceData);
467
468osGLOBAL bit32
469tdsaRotateQnumber1(tiRoot_t                *tiRoot,
470                  tdsaDeviceData_t        *oneDeviceData );
471osGLOBAL void
472tdssRemoveSASSATAFromSharedcontext(
473                          agsaRoot_t           *agRoot,
474                          tdsaPortContext_t    *PortContext_Instance
475                          );
476osGLOBAL void
477tdssRemoveSASSATAFromSharedcontextByReset(
478                          agsaRoot_t           *agRoot
479                          );
480osGLOBAL bit32
481tdssSASFindDiscoveringExpander(
482                          tiRoot_t                 *tiRoot,
483                          tdsaPortContext_t        *onePortContext,
484                          tdsaExpander_t           *oneExpander
485                          );
486
487osGLOBAL void
488tdssAddSASToSharedcontext(
489                          tdsaPortContext_t    *tdsaPortContext_Instance,
490                          agsaRoot_t           *agRoot,
491                          agsaDevHandle_t      *agDevHandle,
492                          tdsaSASSubID_t       *agSASSubID,
493                          bit32                registered,
494                          bit8                 phyID,
495                          bit32                flag
496                          );
497
498osGLOBAL void
499tdssRemoveSASFromSharedcontext(
500                               tdsaPortContext_t *tdsaPortContext_Ins,
501                               tdsaDeviceData_t  *tdsaDeviceData_ins,
502                               agsaRoot_t        *agRoot
503                               );
504
505osGLOBAL void
506tdssRemoveAllDevicelistFromPortcontext(
507                                       tdsaPortContext_t *PortContext_Ins,
508                                       agsaRoot_t        *agRoot
509                                       );
510
511osGLOBAL void
512tdssAddSATAToSharedcontext( tdsaPortContext_t    *tdsaPortContext_Instance,
513                            agsaRoot_t           *agRoot,
514                            agsaDevHandle_t      *agDevHandle,
515                            agsaSATADeviceInfo_t *agSATADeviceInfo,
516                            bit32                 registered,
517                            bit8                  phyID
518                            );
519
520osGLOBAL void
521tdssSubAddSATAToSharedcontext( tiRoot_t             *tiRoot,
522                               tdsaDeviceData_t     *oneDeviceData
523                              );
524
525osGLOBAL void
526tdssRetrySATAID( tiRoot_t             *tiRoot,
527                 tdsaDeviceData_t     *oneDeviceData
528               );
529
530osGLOBAL void
531tdssInitSASPortStartInfo(
532                         tiRoot_t *tiRoot
533                         );
534#ifndef ossaDeviceRegistrationCB
535osGLOBAL void
536ossaDeviceRegistrationCB(
537                         agsaRoot_t        *agRoot,
538                         agsaContext_t     *agContext,
539                         bit32             status,
540                         agsaDevHandle_t   *agDevHandle,
541                         bit32                   deviceID);
542#endif
543
544#ifndef ossaDeregisterDeviceHandleCB
545osGLOBAL void
546ossaDeregisterDeviceHandleCB(
547                             agsaRoot_t          *agRoot,
548                             agsaContext_t       *agContext,
549                             agsaDevHandle_t     *agDevHandle,
550                             bit32               status
551                             );
552#endif
553
554#ifdef INITIATOR_DRIVER
555/*****************************************************************************
556*
557* SAS Initiator only PROTOTYPES
558*
559*****************************************************************************/
560osGLOBAL bit32
561itdssInit(
562          tiRoot_t              *tiRoot,
563          tiInitiatorResource_t *initiatorResource,
564          tiTdSharedMem_t       *tdSharedMem
565          );
566
567osGLOBAL void
568itdssInitTimers (
569                 tiRoot_t *tiRoot
570                 );
571
572osGLOBAL FORCEINLINE void
573itdssIOCompleted(
574                 agsaRoot_t             *agRoot,
575                 agsaIORequest_t        *agIORequest,
576                 bit32                  agIOStatus,
577                 bit32                  agIOInfoLen,
578                 void                   *agParam,
579                 bit32                  agOtherInfo
580                 );
581
582osGLOBAL void
583itdssTaskCompleted(
584                   agsaRoot_t             *agRoot,
585                   agsaIORequest_t        *agIORequest,
586                   bit32                  agIOStatus,
587                   bit32                  agIOInfoLen,
588                   void                   *agParam,
589                   bit32                  agOtherInfo
590                   );
591
592osGLOBAL void
593itdssQueryTaskCompleted(
594                        agsaRoot_t             *agRoot,
595                        agsaIORequest_t        *agIORequest,
596                        bit32                  agIOStatus,
597                        bit32                  agIOInfoLen,
598                        void                   *agParam,
599                        bit32                  agOtherInfo
600                        );
601
602osGLOBAL void
603itdssSMPCompleted (
604                   agsaRoot_t            *agRoot,
605                   agsaIORequest_t       *agIORequest,
606                   bit32                 agIOStatus,
607                   bit32                 agIOInfoLen,
608                   agsaFrameHandle_t     agFrameHandle
609                   );
610
611osGLOBAL void
612ossaSMPCAMCompleted(
613                    agsaRoot_t            *agRoot,
614                    agsaIORequest_t       *agIORequest,
615                    bit32                 agIOStatus,
616                    bit32                 agIOInfoLen,
617                    agsaFrameHandle_t     agFrameHandle
618                   );
619
620osGLOBAL void
621itdssIOSuccessHandler(
622                      agsaRoot_t           *agRoot,
623                      agsaIORequest_t      *agIORequest,
624                      bit32                agIOStatus,
625                      bit32                agIOInfoLen,
626                      void                 *agParam,
627                      bit32                 agOtherInfo
628                      );
629osGLOBAL void
630itdssIOAbortedHandler(
631                      agsaRoot_t           *agRoot,
632                      agsaIORequest_t      *agIORequest,
633                      bit32                agIOStatus,
634                      bit32                agIOInfoLen,
635                      void                 *agParam,
636                      bit32                agOtherInfo
637                      );
638
639#ifdef REMOVED
640osGLOBAL void
641itdssIOOverFlowHandler(
642                       agsaRoot_t           *agRoot,
643                       agsaIORequest_t      *agIORequest,
644                       bit32                 agIOStatus,
645                       bit32                 agIOInfoLen,
646                       void                 *agParam
647                       );
648#endif
649
650osGLOBAL void
651itdssIOUnderFlowHandler(
652                        agsaRoot_t           *agRoot,
653                        agsaIORequest_t      *agIORequest,
654                        bit32                agIOStatus,
655                        bit32                agIOInfoLen,
656                        void                 *agParam,
657                        bit32                agOtherInfo
658                        );
659
660osGLOBAL void
661itdssIOFailedHandler(
662                     agsaRoot_t           *agRoot,
663                     agsaIORequest_t      *agIORequest,
664                     bit32                agIOStatus,
665                     bit32                agIOInfoLen,
666                     void                 *agParam,
667                     bit32                agOtherInfo
668                     );
669
670osGLOBAL void
671itdssIOAbortResetHandler(
672                         agsaRoot_t           *agRoot,
673                         agsaIORequest_t      *agIORequest,
674                         bit32                agIOStatus,
675                         bit32                agIOInfoLen,
676                         void                 *agParam,
677                         bit32                agOtherInfo
678                         );
679osGLOBAL void
680itdssIONotValidHandler(
681                       agsaRoot_t               *agRoot,
682                       agsaIORequest_t          *agIORequest,
683                       bit32                    agIOStatus,
684                       bit32                    agIOInfoLen,
685                       void                     *agParam,
686                       bit32                    agOtherInfo
687                       );
688
689osGLOBAL void
690itdssIONoDeviceHandler(
691                       agsaRoot_t           *agRoot,
692                       agsaIORequest_t      *agIORequest,
693                       bit32                agIOStatus,
694                       bit32                agIOInfoLen,
695                       void                 *agParam,
696                       bit32                agOtherInfo
697                       );
698
699#ifdef REMOVED /* removed from spec */
700osGLOBAL void
701itdssIllegalParameterHandler(
702                       agsaRoot_t           *agRoot,
703                       agsaIORequest_t      *agIORequest,
704                       bit32                agIOStatus,
705                       bit32                agIOInfoLen,
706                       void                 *agParam
707                       );
708#endif
709
710osGLOBAL void
711itdssLinkFailureHandler(
712                       agsaRoot_t           *agRoot,
713                       agsaIORequest_t      *agIORequest,
714                       bit32                agIOStatus,
715                       bit32                agIOInfoLen,
716                       void                 *agParam,
717                       bit32                agOtherInfo
718                       );
719osGLOBAL void
720itdssProgErrorHandler(
721                       agsaRoot_t           *agRoot,
722                       agsaIORequest_t      *agIORequest,
723                       bit32                agIOStatus,
724                       bit32                agIOInfoLen,
725                       void                 *agParam,
726                       bit32                agOtherInfo
727                       );
728osGLOBAL void
729itdssXferErrorBreakHandler(
730                       agsaRoot_t           *agRoot,
731                       agsaIORequest_t      *agIORequest,
732                       bit32                agIOStatus,
733                       bit32                agIOInfoLen,
734                       void                 *agParam,
735                       bit32                agOtherInfo
736                       );
737osGLOBAL void
738itdssXferErrorPhyNotReadyHandler(
739                       agsaRoot_t           *agRoot,
740                       agsaIORequest_t      *agIORequest,
741                       bit32                agIOStatus,
742                       bit32                agIOInfoLen,
743                       void                 *agParam,
744                       bit32                agOtherInfo
745                       );
746osGLOBAL void
747itdssOpenCnxErrorProtocolNotSupprotedHandler(
748                       agsaRoot_t           *agRoot,
749                       agsaIORequest_t      *agIORequest,
750                       bit32                agIOStatus,
751                       bit32                agIOInfoLen,
752                       void                 *agParam,
753                       bit32                agOtherInfo
754                       );
755osGLOBAL void
756itdssOpenCnxErrorZoneViolationHandler(
757                       agsaRoot_t           *agRoot,
758                       agsaIORequest_t      *agIORequest,
759                       bit32                agIOStatus,
760                       bit32                agIOInfoLen,
761                       void                 *agParam,
762                       bit32                agOtherInfo
763                       );
764osGLOBAL void
765itdssOpenCnxErrorBreakHandler(
766                       agsaRoot_t           *agRoot,
767                       agsaIORequest_t      *agIORequest,
768                       bit32                agIOStatus,
769                       bit32                agIOInfoLen,
770                       void                 *agParam,
771                       bit32                agOtherInfo
772                       );
773osGLOBAL void
774itdssOpenCnxErrorITNexusLossHandler(
775                       agsaRoot_t           *agRoot,
776                       agsaIORequest_t      *agIORequest,
777                       bit32                agIOStatus,
778                       bit32                agIOInfoLen,
779                       void                 *agParam,
780                       bit32                agOtherInfo
781                       );
782osGLOBAL void
783itdssOpenCnxErrorBadDestinationHandler(
784                       agsaRoot_t           *agRoot,
785                       agsaIORequest_t      *agIORequest,
786                       bit32                agIOStatus,
787                       bit32                agIOInfoLen,
788                       void                 *agParam,
789                       bit32                agOtherInfo
790                       );
791osGLOBAL void
792itdssOpenCnxErrorConnectionRateNotSupportedHandler(
793                       agsaRoot_t           *agRoot,
794                       agsaIORequest_t      *agIORequest,
795                       bit32                agIOStatus,
796                       bit32                agIOInfoLen,
797                       void                 *agParam,
798                       bit32                agOtherInfo
799                       );
800
801osGLOBAL void
802itdssOpenCnxErrorSTPResourceBusyHandler(
803                       agsaRoot_t           *agRoot,
804                       agsaIORequest_t      *agIORequest,
805                       bit32                agIOStatus,
806                       bit32                agIOInfoLen,
807                       void                 *agParam,
808                       bit32                agOtherInfo
809                       );
810osGLOBAL void
811itdssOpenCnxErrorWrongDestinationHandler(
812                       agsaRoot_t           *agRoot,
813                       agsaIORequest_t      *agIORequest,
814                       bit32                agIOStatus,
815                       bit32                agIOInfoLen,
816                       void                 *agParam,
817                       bit32                agOtherInfo
818                       );
819osGLOBAL void
820itdssOpenCnxErrorUnknownErrorHandler(
821                       agsaRoot_t           *agRoot,
822                       agsaIORequest_t      *agIORequest,
823                       bit32                agIOStatus,
824                       bit32                agIOInfoLen,
825                       void                 *agParam,
826                       bit32                agOtherInfo
827                       );
828osGLOBAL void
829itdssXferErrorNAKReceivedHandler(
830                       agsaRoot_t           *agRoot,
831                       agsaIORequest_t      *agIORequest,
832                       bit32                agIOStatus,
833                       bit32                agIOInfoLen,
834                       void                 *agParam,
835                       bit32                agOtherInfo
836                       );
837osGLOBAL void
838itdssXferErrorACKNAKTimeoutHandler(
839                       agsaRoot_t           *agRoot,
840                       agsaIORequest_t      *agIORequest,
841                       bit32                agIOStatus,
842                       bit32                agIOInfoLen,
843                       void                 *agParam,
844                       bit32                agOtherInfo
845                       );
846osGLOBAL void
847itdssXferErrorPeerAbortedHandler(
848                       agsaRoot_t           *agRoot,
849                       agsaIORequest_t      *agIORequest,
850                       bit32                agIOStatus,
851                       bit32                agIOInfoLen,
852                       void                 *agParam,
853                       bit32                agOtherInfo
854                       );
855osGLOBAL void
856itdssXferErrorRxFrameHandler(
857                       agsaRoot_t           *agRoot,
858                       agsaIORequest_t      *agIORequest,
859                       bit32                agIOStatus,
860                       bit32                agIOInfoLen,
861                       void                 *agParam,
862                       bit32                agOtherInfo
863                       );
864osGLOBAL void
865itdssXferErrorDMAHandler(
866                       agsaRoot_t           *agRoot,
867                       agsaIORequest_t      *agIORequest,
868                       bit32                agIOStatus,
869                       bit32                agIOInfoLen,
870                       void                 *agParam,
871                       bit32                agOtherInfo
872                       );
873osGLOBAL void
874itdssXferErrorCreditTimeoutHandler(
875                       agsaRoot_t           *agRoot,
876                       agsaIORequest_t      *agIORequest,
877                       bit32                agIOStatus,
878                       bit32                agIOInfoLen,
879                       void                 *agParam,
880                       bit32                agOtherInfo
881                       );
882
883osGLOBAL void
884itdssXferErrorCMDIssueACKNAKTimeoutHandler(
885                       agsaRoot_t           *agRoot,
886                       agsaIORequest_t      *agIORequest,
887                       bit32                agIOStatus,
888                       bit32                agIOInfoLen,
889                       void                 *agParam,
890                       bit32                agOtherInfo
891                       );
892osGLOBAL void
893itdssXferErrorCMDIssueBreakBeforeACKNAKHandler(
894                       agsaRoot_t           *agRoot,
895                       agsaIORequest_t      *agIORequest,
896                       bit32                agIOStatus,
897                       bit32                agIOInfoLen,
898                       void                 *agParam,
899                       bit32                agOtherInfo
900                       );
901osGLOBAL void
902itdssXferErrorCMDIssuePhyDownBeforeACKNAKHandler(
903                       agsaRoot_t           *agRoot,
904                       agsaIORequest_t      *agIORequest,
905                       bit32                agIOStatus,
906                       bit32                agIOInfoLen,
907                       void                 *agParam,
908                       bit32                agOtherInfo
909                       );
910osGLOBAL void
911itdssXferErrorDisruptedPhyDownHandler(
912                       agsaRoot_t           *agRoot,
913                       agsaIORequest_t      *agIORequest,
914                       bit32                agIOStatus,
915                       bit32                agIOInfoLen,
916                       void                 *agParam,
917                       bit32                agOtherInfo
918                       );
919osGLOBAL void
920itdssXferErrorOffsetMismatchHandler(
921                       agsaRoot_t           *agRoot,
922                       agsaIORequest_t      *agIORequest,
923                       bit32                agIOStatus,
924                       bit32                agIOInfoLen,
925                       void                 *agParam,
926                       bit32                agOtherInfo
927                       );
928osGLOBAL void
929itdssXferErrorXferZeroDataLenHandler(
930                       agsaRoot_t           *agRoot,
931                       agsaIORequest_t      *agIORequest,
932                       bit32                agIOStatus,
933                       bit32                agIOInfoLen,
934                       void                 *agParam,
935                       bit32                agOtherInfo
936                       );
937
938osGLOBAL void
939itdssXferOpenRetryTimeoutHandler(
940                       agsaRoot_t           *agRoot,
941                       agsaIORequest_t      *agIORequest,
942                       bit32                agIOStatus,
943                       bit32                agIOInfoLen,
944                       void                 *agParam,
945                       bit32                agOtherInfo
946                       );
947
948osGLOBAL void
949itdssPortInResetHandler(
950                       agsaRoot_t           *agRoot,
951                       agsaIORequest_t      *agIORequest,
952                       bit32                agIOStatus,
953                       bit32                agIOInfoLen,
954                       void                 *agParam,
955                       bit32                agOtherInfo
956                       );
957
958osGLOBAL void
959itdssDsNonOperationalHandler(
960                       agsaRoot_t           *agRoot,
961                       agsaIORequest_t      *agIORequest,
962                       bit32                agIOStatus,
963                       bit32                agIOInfoLen,
964                       void                 *agParam,
965                       bit32                agOtherInfo
966                       );
967osGLOBAL void
968itdssDsInRecoveryHandler(
969                       agsaRoot_t           *agRoot,
970                       agsaIORequest_t      *agIORequest,
971                       bit32                agIOStatus,
972                       bit32                agIOInfoLen,
973                       void                 *agParam,
974                       bit32                agOtherInfo
975                       );
976osGLOBAL void
977itdssTmTagNotFoundHandler(
978                       agsaRoot_t           *agRoot,
979                       agsaIORequest_t      *agIORequest,
980                       bit32                agIOStatus,
981                       bit32                agIOInfoLen,
982                       void                 *agParam,
983                       bit32                agOtherInfo
984                       );
985osGLOBAL void
986itdssSSPExtIUZeroLenHandler(
987                       agsaRoot_t           *agRoot,
988                       agsaIORequest_t      *agIORequest,
989                       bit32                agIOStatus,
990                       bit32                agIOInfoLen,
991                       void                 *agParam,
992                       bit32                agOtherInfo
993                       );
994osGLOBAL void
995itdssXferErrorUnexpectedPhaseHandler(
996                       agsaRoot_t           *agRoot,
997                       agsaIORequest_t      *agIORequest,
998                       bit32                agIOStatus,
999                       bit32                agIOInfoLen,
1000                       void                 *agParam,
1001                       bit32                agOtherInfo
1002                       );
1003
1004#ifdef REMOVED
1005osGLOBAL void
1006itdssIOUnderFlowWithChkConditionHandler(
1007                       agsaRoot_t           *agRoot,
1008                       agsaIORequest_t      *agIORequest,
1009                       bit32                agIOStatus,
1010                       bit32                agIOInfoLen,
1011                       void                 *agParam
1012                       );
1013#endif
1014
1015osGLOBAL void
1016itdssEncryptionHandler (
1017                       agsaRoot_t              *agRoot,
1018                       agsaIORequest_t         *agIORequest,
1019                       bit32                   agIOStatus,
1020                       bit32                   agIOInfoLen,
1021                       void                    *agParam,
1022                       bit32                   agOtherInfo
1023                       );
1024
1025osGLOBAL void
1026itdssXferOpenRetryBackoffThresholdReachedHandler(
1027                                                 agsaRoot_t           *agRoot,
1028                                                 agsaIORequest_t      *agIORequest,
1029                                                 bit32                agIOStatus,
1030                                                 bit32                agIOInfoLen,
1031                                                 void                 *agParam,
1032                                                 bit32                agOtherInfo
1033                                                );
1034
1035osGLOBAL void
1036itdssOpenCnxErrorItNexusLossOpenTmoHandler(
1037                                           agsaRoot_t           *agRoot,
1038                                           agsaIORequest_t      *agIORequest,
1039                                           bit32                agIOStatus,
1040                                           bit32                agIOInfoLen,
1041                                           void                 *agParam,
1042                                           bit32                agOtherInfo
1043                                          );
1044osGLOBAL void
1045itdssOpenCnxErrorItNexusLossNoDestHandler(
1046                                          agsaRoot_t           *agRoot,
1047                                          agsaIORequest_t      *agIORequest,
1048                                          bit32                agIOStatus,
1049                                          bit32                agIOInfoLen,
1050                                          void                 *agParam,
1051                                          bit32                agOtherInfo
1052                                         );
1053osGLOBAL void
1054itdssOpenCnxErrorItNexusLossOpenCollideHandler(
1055                                               agsaRoot_t           *agRoot,
1056                                               agsaIORequest_t      *agIORequest,
1057                                               bit32                agIOStatus,
1058                                               bit32                agIOInfoLen,
1059                                               void                 *agParam,
1060                                               bit32                agOtherInfo
1061                                              );
1062osGLOBAL void
1063itdssOpenCnxErrorItNexusLossOpenPathwayBlockedHandler(
1064                                                      agsaRoot_t           *agRoot,
1065                                                      agsaIORequest_t      *agIORequest,
1066                                                      bit32                agIOStatus,
1067                                                      bit32                agIOInfoLen,
1068                                                      void                 *agParam,
1069                                                      bit32                agOtherInfo
1070                                                     );
1071osGLOBAL void
1072itdssDifHandler(
1073                agsaRoot_t           *agRoot,
1074                agsaIORequest_t      *agIORequest,
1075                bit32                agIOStatus,
1076                bit32                agIOInfoLen,
1077                void                 *agParam,
1078                bit32                agOtherInfo
1079               );
1080
1081osGLOBAL void
1082itdssIOResourceUnavailableHandler(
1083                                  agsaRoot_t              *agRoot,
1084                                  agsaIORequest_t         *agIORequest,
1085                                  bit32                   agIOStatus,
1086                                  bit32                   agIOInfoLen,
1087                                  void                    *agParam,
1088                                  bit32                   agOtherInfo
1089                                 );
1090
1091osGLOBAL void
1092itdssIORQEBusyFullHandler(
1093                                  agsaRoot_t              *agRoot,
1094                                  agsaIORequest_t         *agIORequest,
1095                                  bit32                   agIOStatus,
1096                                  bit32                   agIOInfoLen,
1097                                  void                    *agParam,
1098                                  bit32                   agOtherInfo
1099                                 );
1100
1101osGLOBAL void
1102itdssXferErrorInvalidSSPRspFrameHandler(
1103                                  agsaRoot_t              *agRoot,
1104                                  agsaIORequest_t         *agIORequest,
1105                                  bit32                   agIOStatus,
1106                                  bit32                   agIOInfoLen,
1107                                  void                    *agParam,
1108                                  bit32                   agOtherInfo
1109                                 );
1110
1111osGLOBAL void
1112itdssXferErrorEOBDataOverrunHandler(
1113                                  agsaRoot_t              *agRoot,
1114                                  agsaIORequest_t         *agIORequest,
1115                                  bit32                   agIOStatus,
1116                                  bit32                   agIOInfoLen,
1117                                  void                    *agParam,
1118                                  bit32                   agOtherInfo
1119                                 );
1120
1121osGLOBAL void
1122itdssOpenCnxErrorOpenPreemptedHandler(
1123                                  agsaRoot_t              *agRoot,
1124                                  agsaIORequest_t         *agIORequest,
1125                                  bit32                   agIOStatus,
1126                                  bit32                   agIOInfoLen,
1127                                  void                    *agParam,
1128                                  bit32                   agOtherInfo
1129                                 );
1130
1131/* default handler */
1132osGLOBAL void
1133itdssIODefaultHandler (
1134                       agsaRoot_t           *agRoot,
1135                       agsaIORequest_t      *agIORequest,
1136                       bit32                agIOStatus,
1137                       bit32                agIOInfoLen,
1138                       void                 *agParam,
1139                       bit32                agOtherInfo
1140                       );
1141osGLOBAL void
1142itdssIOForDebugging1Completed(
1143                 agsaRoot_t             *agRoot,
1144                 agsaIORequest_t        *agIORequest,
1145                 bit32                  agIOStatus,
1146                 bit32                  agIOInfoLen,
1147                 void                   *agParam,
1148                 bit32                  agOtherInfo
1149                 );
1150
1151osGLOBAL void
1152itdssIOForDebugging2Completed(
1153                 agsaRoot_t             *agRoot,
1154                 agsaIORequest_t        *agIORequest,
1155                 bit32                  agIOStatus,
1156                 bit32                  agIOInfoLen,
1157                 void                   *agParam,
1158                 bit32                  agOtherInfo
1159                 );
1160
1161osGLOBAL void
1162itdssIOForDebugging3Completed(
1163                 agsaRoot_t             *agRoot,
1164                 agsaIORequest_t        *agIORequest,
1165                 bit32                  agIOStatus,
1166                 bit32                  agIOInfoLen,
1167                 void                   *agParam,
1168                 bit32                  agOtherInfo
1169                 );
1170
1171osGLOBAL void
1172itdssInitDiscoveryModule (
1173                          tiRoot_t *tiRoot
1174                          );
1175
1176osGLOBAL void
1177itdssGetResource (
1178                  tiRoot_t              *tiRoot,
1179                  tiInitiatorResource_t *initiatorResource
1180                  );
1181
1182
1183osGLOBAL void
1184itdssGetOperatingOptionParams(
1185                              tiRoot_t              *tiRoot,
1186                              itdssOperatingOption_t  *OperatingOption
1187                              );
1188
1189
1190osGLOBAL FORCEINLINE bit32
1191itdssIOPrepareSGL(
1192                  tiRoot_t            *tiRoot,
1193                  tdIORequestBody_t   *IORequestBody,
1194                  tiSgl_t             *tiSgl1,
1195                  void                *sglVirtualAddr
1196                  );
1197
1198#ifdef FDS_SM
1199osGLOBAL void
1200smReportRemoval(
1201                 tiRoot_t             *tiRoot,
1202                 agsaRoot_t           *agRoot,
1203                 tdsaDeviceData_t     *oneDeviceData,
1204                 tdsaPortContext_t    *onePortContext
1205	       );
1206osGLOBAL void
1207smReportRemovalDirect(
1208                       tiRoot_t             *tiRoot,
1209                       agsaRoot_t           *agRoot,
1210                       tdsaDeviceData_t     *oneDeviceData
1211		     );
1212osGLOBAL void
1213smHandleDirect(
1214                tiRoot_t             *tiRoot,
1215                agsaRoot_t           *agRoot,
1216                tdsaDeviceData_t     *oneDeviceData,
1217                void                 *IDdata
1218	      );
1219
1220osGLOBAL void
1221ossaSATAIDAbortCB(
1222                  agsaRoot_t               *agRoot,
1223                  agsaIORequest_t          *agIORequest,
1224                  bit32                    flag,
1225                  bit32                    status
1226                 );
1227
1228osGLOBAL void
1229ossaIniSetDeviceInfoCB(
1230                        agsaRoot_t        *agRoot,
1231                        agsaContext_t     *agContext,
1232                        agsaDevHandle_t   *agDevHandle,
1233                        bit32             status,
1234                        bit32             option,
1235                        bit32             param
1236                      );
1237
1238#endif /* FDS_SM */
1239
1240#endif /* INITIATOR_DRIVER */
1241
1242#ifdef TARGET_DRIVER
1243/*****************************************************************************
1244*
1245* SAS Target only PROTOTYPES (ttdproto.h)
1246*
1247*****************************************************************************/
1248osGLOBAL bit32
1249ttdssInit(
1250          tiRoot_t              *tiRoot,
1251          tiTargetResource_t    *targetResource,
1252          tiTdSharedMem_t       *tdSharedMem
1253          );
1254
1255osGLOBAL void
1256ttdssGetResource (
1257                  tiRoot_t              *tiRoot,
1258                  tiTargetResource_t    *targetResource
1259                  );
1260
1261osGLOBAL void
1262ttdssGetTargetParams(
1263                     tiRoot_t          *tiRoot
1264                     );
1265
1266osGLOBAL void
1267ttdssGetOperatingOptionParams(
1268                              tiRoot_t                *tiRoot,
1269                              ttdssOperatingOption_t  *OperatingOption
1270                              );
1271
1272osGLOBAL agBOOLEAN
1273ttdsaXchgInit(
1274              tiRoot_t           *tiRoot,
1275              ttdsaXchgData_t    *ttdsaXchgData,
1276              tiTargetMem_t      *tgtMem,
1277              bit32              maxNumXchgs
1278              );
1279
1280osGLOBAL void
1281ttdsaXchgLinkInit(
1282                   tiRoot_t           *tiRoot,
1283                   ttdsaXchg_t        *ttdsaXchg
1284                   );
1285
1286
1287osGLOBAL void
1288ttdsaXchgFreeStruct(
1289                   tiRoot_t           *tiRoot,
1290                   ttdsaXchg_t        *ttdsaXchg
1291                   );
1292osGLOBAL void
1293ttdsaSSPReqReceived(
1294                   agsaRoot_t           *agRoot,
1295                   agsaDevHandle_t      *agDevHandle,
1296                   agsaFrameHandle_t    agFrameHandle,
1297                   bit32                agInitiatorTag,
1298                   bit32                parameter,
1299                   bit32                agFrameLen
1300                   );
1301
1302osGLOBAL ttdsaXchg_t
1303*ttdsaXchgGetStruct(
1304                    agsaRoot_t *agRoot
1305                    );
1306osGLOBAL void
1307ttdsaDumpallXchg(tiRoot_t           *tiRoot);
1308
1309osGLOBAL void
1310tdsaProcessCDB(
1311               agsaSSPCmdInfoUnit_t      *cmdIU,
1312               ttdsaXchg_t               *ttdsaXchg
1313               );
1314
1315osGLOBAL bit32
1316ttdssIOPrepareSGL(
1317                  tiRoot_t                 *tiRoot,
1318                  tdIORequestBody_t        *tdIORequestBody,
1319                  tiSgl_t                  *tiSgl1,
1320                  tiSgl_t                  *tiSgl2,
1321                  void                     *sglVirtualAddr);
1322
1323osGLOBAL void
1324ttdsaIOCompleted(
1325                 agsaRoot_t             *agRoot,
1326                 agsaIORequest_t        *agIORequest,
1327                 bit32                  agIOStatus,
1328                 bit32                  agIOInfoLen,
1329                 agsaFrameHandle_t      agFrameHandle,
1330                 bit32                  agOtherInfo
1331                 );
1332
1333osGLOBAL void
1334ttdsaTMProcess(
1335               tiRoot_t    *tiRoot,
1336               ttdsaXchg_t *ttdsaXchg
1337               );
1338
1339osGLOBAL void
1340ttdsaSMPReqReceived(
1341                    agsaRoot_t            *agRoot,
1342                    agsaDevHandle_t       *agDevHandle,
1343                    agsaSMPFrameHeader_t  *agFrameHeader,
1344                    agsaFrameHandle_t     agFrameHandle,
1345                    bit32                 agFrameLength,
1346                    bit32                 phyId
1347                    );
1348osGLOBAL void
1349ttdsaSMPCompleted(
1350                  agsaRoot_t            *agRoot,
1351                  agsaIORequest_t       *agIORequest,
1352                  bit32                 agIOStatus,
1353                  //agsaSMPFrameHeader_t  *agFrameHeader,   (TP)
1354                  bit32                 agIOInfoLen,
1355                  agsaFrameHandle_t     agFrameHandle
1356                  );
1357osGLOBAL bit32
1358ttdsaSendResp(
1359              agsaRoot_t            *agRoot,
1360              ttdsaXchg_t           *ttdsaXchg
1361              );
1362
1363osGLOBAL void
1364ttdssReportRemovals(
1365                    agsaRoot_t           *agRoot,
1366                    tdsaPortContext_t    *onePortContext,
1367                    bit32                flag
1368                    );
1369
1370
1371osGLOBAL void
1372ttdsaAbortAll(
1373             tiRoot_t                   *tiRoot,
1374             agsaRoot_t                 *agRoot,
1375             tdsaDeviceData_t           *oneDeviceData
1376             );
1377
1378osGLOBAL void
1379ttdssIOAbortedHandler(
1380                      agsaRoot_t           *agRoot,
1381                      agsaIORequest_t      *agIORequest,
1382                      bit32                agIOStatus,
1383                      bit32                agIOInfoLen,
1384                      void                 *agParam,
1385                      bit32                agOtherInfo
1386                      );
1387
1388#endif /* TARGET_DRIVER */
1389
1390
1391
1392/*****************************************************************************
1393*
1394* For debugging only
1395*
1396*****************************************************************************/
1397osGLOBAL void
1398tdsaPrintSwConfig(
1399                agsaSwConfig_t *SwConfig
1400                );
1401
1402osGLOBAL void
1403tdsaPrintHwConfig(
1404                agsaHwConfig_t *HwConfig
1405                );
1406osGLOBAL void
1407tdssPrintSASIdentify(
1408                     agsaSASIdentify_t *id
1409                     );
1410osGLOBAL void
1411print_tdlist_flink(tdList_t *hdr, int type, int flag);
1412
1413osGLOBAL void
1414print_tdlist_blink(tdList_t *hdr, int flag);
1415
1416osGLOBAL void
1417tdhexdump(const char *ptitle, bit8 *pbuf, int len);
1418
1419
1420/*****************************************************************************
1421*
1422* SAT only PROTOTYPE
1423*
1424*****************************************************************************/
1425
1426#ifdef  SATA_ENABLE
1427
1428/*****************************************************************************
1429 *! \brief  satIOStart
1430 *
1431 *   This routine is called to initiate a new SCSI request to SATL.
1432 *
1433 *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
1434 *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
1435 *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1436 *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
1437 *  \param   satIOContext_t:   Pointer to the SAT IO Context
1438 *
1439 *  \return:
1440 *
1441 *  \e tiSuccess:     I/O request successfully initiated.
1442 *  \e tiBusy:        No resources available, try again later.
1443 *  \e tiIONoDevice:  Invalid device handle.
1444 *  \e tiError:       Other errors that prevent the I/O request to be started.
1445 *
1446 *
1447 *****************************************************************************/
1448
1449GLOBAL bit32  satIOStart(
1450                   tiRoot_t                  *tiRoot,
1451                   tiIORequest_t             *tiIORequest,
1452                   tiDeviceHandle_t          *tiDeviceHandle,
1453                   tiScsiInitiatorRequest_t *tiScsiRequest,
1454                   satIOContext_t            *satIOContext
1455                  );
1456
1457/*****************************************************************************
1458 *! \brief  satIOAbort
1459 *
1460 *   This routine is called to initiate a I/O abort to SATL.
1461 *   This routine is independent of HW/LL API.
1462 *
1463 *  \param  tiRoot:     Pointer to TISA initiator driver/port instance.
1464 *  \param  taskTag:    Pointer to TISA I/O request context/tag to be aborted.
1465 *
1466 *  \return:
1467 *
1468 *  \e tiSuccess:     I/O request successfully initiated.
1469 *  \e tiBusy:        No resources available, try again later.
1470 *  \e tiError:       Other errors that prevent the I/O request to be started.
1471 *
1472 *
1473 *****************************************************************************/
1474
1475GLOBAL bit32 satIOAbort(
1476                          tiRoot_t      *tiRoot,
1477                          tiIORequest_t *taskTag );
1478
1479
1480/*****************************************************************************
1481 *! \brief  satTM
1482 *
1483 *   This routine is called to initiate a TM request to SATL.
1484 *   This routine is independent of HW/LL API.
1485 *
1486 *  \param  tiRoot:           Pointer to TISA initiator driver/port instance.
1487 *  \param  tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1488 *  \param  task:             SAM-3 task management request.
1489 *  \param  lun:              Pointer to LUN.
1490 *  \param  taskTag:          Pointer to the associated task where the TM
1491 *                            command is to be applied.
1492 *  \param  currentTaskTag:   Pointer to tag/context for this TM request.
1493 *
1494 *  \return:
1495 *
1496 *  \e tiSuccess:     I/O request successfully initiated.
1497 *  \e tiBusy:        No resources available, try again later.
1498 *  \e tiIONoDevice:  Invalid device handle.
1499 *  \e tiError:       Other errors that prevent the I/O request to be started.
1500 *
1501 *
1502 *****************************************************************************/
1503
1504osGLOBAL bit32 satTM(
1505                        tiRoot_t          *tiRoot,
1506                        tiDeviceHandle_t  *tiDeviceHandle,
1507                        bit32             task,
1508                        tiLUN_t           *lun,
1509                        tiIORequest_t     *taskTag,
1510                        tiIORequest_t     *currentTaskTag,
1511                        tdIORequestBody_t *tiRequestBody,
1512                        bit32              NotifyOS
1513                        );
1514
1515
1516#endif  /* SAT only */
1517
1518#ifdef INITIATOR_DRIVER
1519#ifdef TD_DISCOVER
1520
1521osGLOBAL void
1522tdsaExpanderInit(
1523                 tiRoot_t *tiRoot
1524                 );
1525
1526osGLOBAL bit32
1527tdsaDiscover(
1528             tiRoot_t          *tiRoot,
1529             tdsaPortContext_t *onePortContext,
1530             bit32             type,
1531             bit32             option
1532             );
1533
1534osGLOBAL bit32
1535tdsaSASFullDiscover(
1536                    tiRoot_t          *tiRoot,
1537                    tdsaPortContext_t *onePortContext
1538                    );
1539
1540osGLOBAL bit32
1541tdsaSATAFullDiscover(
1542                     tiRoot_t          *tiRoot,
1543                     tdsaPortContext_t *onePortContext
1544                     );
1545osGLOBAL bit32
1546tdsaSASIncrementalDiscover(
1547                    tiRoot_t          *tiRoot,
1548                    tdsaPortContext_t *onePortContext
1549                    );
1550
1551osGLOBAL bit32
1552tdsaSATAIncrementalDiscover(
1553                     tiRoot_t          *tiRoot,
1554                     tdsaPortContext_t *onePortContext
1555                     );
1556
1557osGLOBAL void
1558tdsaSASUpStreamDiscoverStart(
1559                             tiRoot_t             *tiRoot,
1560                             tdsaPortContext_t    *onePortContext,
1561                             tdsaDeviceData_t     *oneDeviceData
1562                             );
1563
1564osGLOBAL void
1565tdsaSASUpStreamDiscovering(
1566                           tiRoot_t             *tiRoot,
1567                           tdsaPortContext_t    *onePortContext,
1568                           tdsaDeviceData_t     *oneDeviceData
1569                           );
1570
1571
1572osGLOBAL void
1573tdsaSASDownStreamDiscoverStart(
1574                               tiRoot_t             *tiRoot,
1575                               tdsaPortContext_t    *onePortContext,
1576                               tdsaDeviceData_t     *oneDeviceData
1577                               );
1578
1579osGLOBAL void
1580tdsaSASDownStreamDiscovering(
1581                             tiRoot_t             *tiRoot,
1582                             tdsaPortContext_t    *onePortContext,
1583                             tdsaDeviceData_t     *oneDeviceData
1584                             );
1585
1586osGLOBAL void
1587tdsaSASDiscoverDone(
1588                    tiRoot_t             *tiRoot,
1589                    tdsaPortContext_t    *onePortContext,
1590                    bit32                 flag
1591                    );
1592
1593osGLOBAL void
1594tdsaSATADiscoverDone(
1595                    tiRoot_t             *tiRoot,
1596                    tdsaPortContext_t    *onePortContext,
1597                    bit32                flag
1598                    );
1599
1600osGLOBAL void
1601tdsaAckBC(
1602                    tiRoot_t             *tiRoot,
1603                    tdsaPortContext_t    *onePortContext
1604                    );
1605
1606osGLOBAL void
1607tdsaDiscoveryResetProcessed(
1608                    tiRoot_t             *tiRoot,
1609                    tdsaPortContext_t    *onePortContext
1610                    );
1611
1612
1613
1614osGLOBAL void
1615tdsaSASUpStreamDiscoverExpanderPhy(
1616                                   tiRoot_t              *tiRoot,
1617                                   tdsaPortContext_t     *onePortContext,
1618                                   tdsaExpander_t        *oneExpander,
1619                                   smpRespDiscover_t     *pDiscoverResp
1620                                   );
1621osGLOBAL tdsaExpander_t *
1622tdsaFindUpStreamConfigurableExp(tiRoot_t              *tiRoot,
1623                                tdsaExpander_t        *oneExpander);
1624
1625osGLOBAL void
1626tdsaSASDownStreamDiscoverExpanderPhy(
1627                                     tiRoot_t              *tiRoot,
1628                                     tdsaPortContext_t     *onePortContext,
1629                                     tdsaExpander_t        *oneExpander,
1630                                     smpRespDiscover_t     *pDiscoverResp
1631                                     );
1632osGLOBAL void
1633tdsaSASUpStreamDiscoverExpanderPhySkip(
1634                                   tiRoot_t              *tiRoot,
1635                                   tdsaPortContext_t     *onePortContext,
1636                                   tdsaExpander_t        *oneExpander
1637                                   );
1638osGLOBAL tdsaExpander_t *
1639tdsaFindDownStreamConfigurableExp(tiRoot_t              *tiRoot,
1640                                  tdsaExpander_t        *oneExpander);
1641
1642osGLOBAL void
1643tdsaSASDownStreamDiscoverExpanderPhySkip(
1644                                     tiRoot_t              *tiRoot,
1645                                     tdsaPortContext_t     *onePortContext,
1646                                     tdsaExpander_t        *oneExpander
1647                                     );
1648osGLOBAL void
1649tdsaDiscoveringStpSATADevice(
1650                             tiRoot_t              *tiRoot,
1651                             tdsaPortContext_t     *onePortContext,
1652                             tdsaDeviceData_t      *oneDeviceData
1653                             );
1654
1655
1656osGLOBAL void
1657tdsaSASExpanderUpStreamPhyAdd(
1658                              tiRoot_t          *tiRoot,
1659                              tdsaExpander_t    *oneExpander,
1660                              bit8              phyId
1661                              );
1662
1663osGLOBAL void
1664tdsaSASExpanderDownStreamPhyAdd(
1665                              tiRoot_t          *tiRoot,
1666                              tdsaExpander_t    *oneExpander,
1667                              bit8              phyId
1668                              );
1669osGLOBAL bit16
1670tdsaFindCurrentDownStreamPhyIndex(
1671                              tiRoot_t          *tiRoot,
1672                              tdsaExpander_t    *oneExpander
1673                              );
1674
1675osGLOBAL tdsaDeviceData_t *
1676tdsaPortSASDeviceFind(
1677                      tiRoot_t           *tiRoot,
1678                      tdsaPortContext_t  *onePortContext,
1679                      bit32              sasAddrLo,
1680                      bit32              sasAddrHi
1681                      );
1682
1683GLOBAL tdsaDeviceData_t *
1684tdsaPortSASDeviceAdd(
1685                     tiRoot_t            *tiRoot,
1686                     tdsaPortContext_t   *onePortContext,
1687                     agsaSASIdentify_t   sasIdentify,
1688                     bit32               sasInitiator,
1689                     bit8                connectionRate,
1690                     bit32               itNexusTimeout,
1691                     bit32               firstBurstSize,
1692                     bit32               deviceType,
1693                     tdsaDeviceData_t    *oneExpDeviceData,
1694                     bit8                phyID
1695                     );
1696
1697
1698
1699
1700
1701/* in tdport.c */
1702osGLOBAL tdsaDeviceData_t *
1703tdssNewAddSASToSharedcontext(
1704                                 agsaRoot_t           *agRoot,
1705                                 tdsaPortContext_t    *onePortContext,
1706                                 tdsaSASSubID_t       *agSASSubID,
1707                                 tdsaDeviceData_t     *oneExpDeviceData,
1708                                 bit8                 phyID
1709                                 );
1710osGLOBAL void
1711tdsaResetValidDeviceData(
1712                                 agsaRoot_t           *agRoot,
1713                                 tdsaPortContext_t    *onePortContext
1714                                 );
1715
1716
1717osGLOBAL void
1718tdssReportChanges(
1719                                 agsaRoot_t           *agRoot,
1720                                 tdsaPortContext_t    *onePortContext                                                 );
1721
1722osGLOBAL void
1723tdssReportRemovals(
1724                                 agsaRoot_t           *agRoot,
1725                                 tdsaPortContext_t    *onePortContext,
1726                                 bit32                flag
1727                                 );
1728osGLOBAL void
1729tdssInternalRemovals(
1730                                 agsaRoot_t           *agRoot,
1731                                 tdsaPortContext_t    *onePortContext
1732                                 );
1733osGLOBAL void
1734tdssDiscoveryErrorRemovals(
1735                                 agsaRoot_t           *agRoot,
1736                                 tdsaPortContext_t    *onePortContext
1737                                 );
1738
1739osGLOBAL void
1740tdsaSASDiscoverAbort(
1741                    tiRoot_t             *tiRoot,
1742                    tdsaPortContext_t    *onePortContext
1743                    );
1744
1745
1746osGLOBAL tdsaDeviceData_t *
1747tdsaFindRegNValid(
1748                                 agsaRoot_t           *agRoot,
1749                                 tdsaPortContext_t    *onePortContext,
1750                                 tdsaSASSubID_t       *agSASSubID
1751                  );
1752bit32
1753tdssNewSASorNot(
1754                                 agsaRoot_t           *agRoot,
1755                                 tdsaPortContext_t    *onePortContext,
1756                                 tdsaSASSubID_t       *agSASSubID
1757                                 );
1758
1759
1760osGLOBAL tdsaExpander_t *
1761tdssSASDiscoveringExpanderAlloc(
1762                                tiRoot_t                 *tiRoot,
1763                                tdsaPortContext_t        *onePortContext,
1764                                tdsaDeviceData_t         *oneDeviceData
1765                                );
1766
1767osGLOBAL void
1768tdssSASDiscoveringExpanderAdd(
1769                              tiRoot_t                 *tiRoot,
1770                              tdsaPortContext_t        *onePortContext,
1771                              tdsaExpander_t           *oneExpander
1772                              );
1773
1774osGLOBAL void
1775tdssSASDiscoveringExpanderRemove(
1776                                 tiRoot_t                 *tiRoot,
1777                                 tdsaPortContext_t        *onePortContext,
1778                                 tdsaExpander_t           *oneExpander
1779                                 );
1780
1781GLOBAL bit32
1782tdssSATADeviceTypeDecode(
1783                         bit8  *pSignature
1784                         );
1785
1786
1787GLOBAL tdsaDeviceData_t *
1788tdsaPortSATADeviceAdd(
1789                      tiRoot_t                *tiRoot,
1790                      tdsaPortContext_t       *onePortContext,
1791                      tdsaDeviceData_t        *oneSTPBridge,
1792                      bit8                    *Signature,
1793                      bit8                    pm,
1794                      bit8                    pmField,
1795                      bit8                    connectionRate,
1796                      tdsaDeviceData_t        *oneExpDeviceData,
1797                      bit8                    phyID
1798                      );
1799
1800/* in tdport.c */
1801osGLOBAL tdsaDeviceData_t *
1802tdssNewAddSATAToSharedcontext(tiRoot_t             *tiRoot,
1803                              agsaRoot_t           *agRoot,
1804                              tdsaPortContext_t    *onePortContext,
1805                              agsaSATADeviceInfo_t *agSATADeviceInfo,
1806                              bit8                    *Signature,
1807                              bit8                    pm,
1808                              bit8                    pmField,
1809                              bit32                   connectionRate,
1810                              tdsaDeviceData_t        *oneExpDeviceData,
1811                              bit8                    phyID
1812                              );
1813
1814osGLOBAL tdsaDeviceData_t  *
1815tdsaFindRightDevice(
1816                   tiRoot_t               *tiRoot,
1817                   tdsaPortContext_t      *onePortContext,
1818                   tdsaDeviceData_t       *tdsaDeviceData
1819                   );
1820GLOBAL void
1821ossaIDCDiscoverCompleted(
1822                  agsaRoot_t        *agRoot,
1823                  agsaIORequest_t   *agIORequest,
1824                  bit32             agIOStatus,
1825                  void              *agFirstDword,
1826                  bit32             agIOInfoLen,
1827                  agsaFrameHandle_t agFrameHandle
1828                  );
1829
1830osGLOBAL bit8
1831tdsaFindLocalLinkRate(
1832                      tiRoot_t                  *tiRoot,
1833                      tdsaPortStartInfo_t       *tdsaPortStartInfo
1834                      );
1835
1836/* SMP related */
1837
1838osGLOBAL bit32
1839tdSMPStart(
1840           tiRoot_t              *tiRoot,
1841           agsaRoot_t            *agRoot,
1842           tdsaDeviceData_t      *oneDeviceData,
1843           bit32                 functionCode,
1844           bit8                  *pSmpBody,
1845           bit32                 smpBodySize,
1846           bit32                 agRequestType,
1847           tiIORequest_t         *CurrentTaskTag,
1848           bit32                 queueNumber
1849           );
1850//temp for testing
1851osGLOBAL void
1852tdsaReportManInfoSend(
1853                      tiRoot_t             *tiRoot,
1854                      tdsaDeviceData_t     *oneDeviceData
1855                      );
1856
1857osGLOBAL void
1858tdsaReportManInfoRespRcvd(
1859                          tiRoot_t              *tiRoot,
1860                          agsaRoot_t            *agRoot,
1861                          tdsaDeviceData_t      *oneDeviceData,
1862                          tdssSMPFrameHeader_t  *frameHeader,
1863                          agsaFrameHandle_t     frameHandle
1864                          );
1865
1866//end temp for testing
1867
1868osGLOBAL void
1869tdsaReportGeneralSend(
1870                      tiRoot_t             *tiRoot,
1871                      tdsaDeviceData_t     *oneDeviceData
1872                      );
1873
1874osGLOBAL void
1875tdsaReportGeneralRespRcvd(
1876                          tiRoot_t              *tiRoot,
1877                          agsaRoot_t            *agRoot,
1878                          agsaIORequest_t       *agIORequest,
1879                          tdsaDeviceData_t      *oneDeviceData,
1880                          tdssSMPFrameHeader_t  *frameHeader,
1881                          agsaFrameHandle_t     frameHandle
1882              );
1883osGLOBAL void
1884tdsaDiscoverSend(
1885                 tiRoot_t             *tiRoot,
1886                 tdsaDeviceData_t     *oneDeviceData
1887                 );
1888
1889osGLOBAL void
1890tdsaDiscoverRespRcvd(
1891                     tiRoot_t              *tiRoot,
1892                     agsaRoot_t            *agRoot,
1893                     agsaIORequest_t       *agIORequest,
1894                     tdsaDeviceData_t      *oneDeviceData,
1895                     tdssSMPFrameHeader_t  *frameHeader,
1896                     agsaFrameHandle_t     frameHandle
1897                     );
1898
1899
1900osGLOBAL void
1901tdsaReportPhySataSend(
1902                      tiRoot_t             *tiRoot,
1903                      tdsaDeviceData_t     *oneDeviceData,
1904                      bit8                 phyId
1905                      );
1906
1907
1908
1909osGLOBAL void
1910tdsaReportPhySataRcvd(
1911                      tiRoot_t              *tiRoot,
1912                      agsaRoot_t            *agRoot,
1913                      agsaIORequest_t       *agIORequest,
1914                      tdsaDeviceData_t      *oneDeviceData,
1915                      tdssSMPFrameHeader_t  *frameHeader,
1916                      agsaFrameHandle_t     frameHandle
1917                      );
1918
1919osGLOBAL bit32
1920tdsaSASRoutingEntryAdd(
1921                       tiRoot_t          *tiRoot,
1922                       tdsaExpander_t    *oneExpander,
1923                       bit32             phyId,
1924                       bit32             configSASAddressHi,
1925                       bit32             configSASAddressLo
1926                       );
1927
1928
1929osGLOBAL void
1930tdsaConfigRoutingInfoRespRcvd(
1931                              tiRoot_t              *tiRoot,
1932                              agsaRoot_t            *agRoot,
1933                              agsaIORequest_t       *agIORequest,
1934                              tdsaDeviceData_t      *oneDeviceData,
1935                              tdssSMPFrameHeader_t  *frameHeader,
1936                              agsaFrameHandle_t     frameHandle
1937                              );
1938
1939osGLOBAL bit32
1940tdsaPhyControlSend(
1941                   tiRoot_t             *tiRoot,
1942                   tdsaDeviceData_t     *oneDeviceData,
1943                   bit8                 phyOp,
1944                   tiIORequest_t        *CurrentTaskTag,
1945                   bit32                queueNumber
1946                   );
1947
1948osGLOBAL void
1949tdsaPhyControlRespRcvd(
1950                       tiRoot_t              *tiRoot,
1951                       agsaRoot_t            *agRoot,
1952                       agsaIORequest_t       *agIORequest,
1953                       tdsaDeviceData_t      *oneDeviceData,
1954                       tdssSMPFrameHeader_t  *frameHeader,
1955                       agsaFrameHandle_t     frameHandle,
1956                       tiIORequest_t         *CurrentTaskTag
1957                       );
1958
1959osGLOBAL void
1960tdsaPhyControlFailureRespRcvd(
1961                              tiRoot_t              *tiRoot,
1962                              agsaRoot_t            *agRoot,
1963                              tdsaDeviceData_t      *oneDeviceData,
1964                              tdssSMPFrameHeader_t  *frameHeader,
1965                              agsaFrameHandle_t     frameHandle,
1966                              tiIORequest_t         *CurrentTaskTag
1967                             );
1968
1969
1970osGLOBAL void
1971tdsaDumpAllExp(
1972                              tiRoot_t                 *tiRoot,
1973                              tdsaPortContext_t        *onePortContext,
1974                              tdsaExpander_t           *oneExpander
1975                              );
1976osGLOBAL void
1977tdsaDumpAllUpExp(
1978                              tiRoot_t                 *tiRoot,
1979                              tdsaPortContext_t        *onePortContext,
1980                              tdsaExpander_t           *oneExpander
1981                              );
1982osGLOBAL void
1983tdsaCleanAllExp(
1984                              tiRoot_t                 *tiRoot,
1985                              tdsaPortContext_t        *onePortContext
1986                              );
1987osGLOBAL void
1988tdsaFreeAllExp(
1989                              tiRoot_t                 *tiRoot,
1990                              tdsaPortContext_t        *onePortContext
1991                              );
1992osGLOBAL void
1993tdsaDumpAllFreeExp(
1994                              tiRoot_t                 *tiRoot
1995                              );
1996
1997osGLOBAL void
1998tdsaDiscoveryTimer(tiRoot_t                 *tiRoot,
1999                   tdsaPortContext_t        *onePortContext,
2000                   tdsaDeviceData_t         *oneDeviceData
2001                   );
2002
2003osGLOBAL void
2004tdsaDiscoveryTimerCB(
2005                       tiRoot_t    * tiRoot,
2006                       void        * timerData1,
2007                       void        * timerData2,
2008                       void        * timerData3
2009                       );
2010
2011osGLOBAL void
2012tdsaConfigureRouteTimer(tiRoot_t                 *tiRoot,
2013                        tdsaPortContext_t        *onePortContext,
2014                        tdsaExpander_t           *oneExpander,
2015                        smpRespDiscover_t        *ptdSMPDiscoverResp
2016                       );
2017
2018osGLOBAL void
2019tdsaConfigureRouteTimerCB(
2020                          tiRoot_t    * tiRoot,
2021                          void        * timerData1,
2022                          void        * timerData2,
2023                          void        * timerData3
2024                         );
2025
2026osGLOBAL void
2027tdsaDeviceRegistrationTimer(tiRoot_t                 *tiRoot,
2028                            tdsaPortContext_t        *onePortContext,
2029                            tdsaDeviceData_t         *oneDeviceData
2030                            );
2031
2032osGLOBAL void
2033tdsaDeviceRegistrationTimerCB(
2034                              tiRoot_t    * tiRoot,
2035                              void        * timerData1,
2036                              void        * timerData2,
2037                              void        * timerData3
2038                             );
2039
2040osGLOBAL void
2041tdsaSMPBusyTimer(tiRoot_t                 *tiRoot,
2042                 tdsaPortContext_t        *onePortContext,
2043                 tdsaDeviceData_t         *oneDeviceData,
2044                 tdssSMPRequestBody_t     *tdSMPRequestBody
2045                 );
2046
2047osGLOBAL void
2048tdsaSMPBusyTimerCB(
2049                       tiRoot_t    * tiRoot,
2050                       void        * timerData1,
2051                       void        * timerData2,
2052                       void        * timerData3
2053                       );
2054
2055osGLOBAL void
2056tdsaSATAIDDeviceTimer(tiRoot_t                 *tiRoot,
2057                      tdsaDeviceData_t         *oneDeviceData
2058                     );
2059#ifdef FDS_SM
2060osGLOBAL void
2061tdIDStartTimer(tiRoot_t                 *tiRoot,
2062               smIORequest_t            *smIORequest,
2063               tdsaDeviceData_t         *oneDeviceData
2064               );
2065osGLOBAL void
2066tdIDStartTimerCB(
2067                  tiRoot_t    * tiRoot,
2068                  void        * timerData1,
2069                  void        * timerData2,
2070                  void        * timerData3
2071                );
2072#endif
2073osGLOBAL void
2074tdsaBCTimer(tiRoot_t                 *tiRoot,
2075            tdsaPortContext_t        *onePortContext
2076           );
2077
2078osGLOBAL void
2079tdsaBCTimerCB(
2080              tiRoot_t    * tiRoot,
2081              void        * timerData1,
2082              void        * timerData2,
2083              void        * timerData3
2084              );
2085
2086osGLOBAL void
2087tdsaSATAIDDeviceTimerCB(
2088                       tiRoot_t    * tiRoot,
2089                       void        * timerData1,
2090                       void        * timerData2,
2091                       void        * timerData3
2092                       );
2093
2094osGLOBAL void
2095tdsaDiscoverySMPTimer(tiRoot_t                 *tiRoot,
2096                      tdsaPortContext_t        *onePortContext,
2097                      bit32                    functionCode,
2098                      tdssSMPRequestBody_t     *tdSMPRequestBody
2099                     );
2100
2101osGLOBAL void
2102tdsaDiscoverySMPTimerCB(
2103                        tiRoot_t    * tiRoot,
2104                        void        * timerData1,
2105                        void        * timerData2,
2106                        void        * timerData3
2107                       );
2108
2109osGLOBAL void
2110dumpRoutingAttributes(
2111                      tiRoot_t                 *tiRoot,
2112                      tdsaExpander_t           *oneExpander,
2113                      bit8                     phyID
2114                      );
2115
2116osGLOBAL bit32
2117tdsaDuplicateConfigSASAddr(
2118                      tiRoot_t                 *tiRoot,
2119                      tdsaExpander_t           *oneExpander,
2120                      bit32                    configSASAddressHi,
2121                      bit32                    configSASAddressLo
2122                      );
2123
2124osGLOBAL tdsaExpander_t *
2125tdsaFindConfigurableExp(
2126                         tiRoot_t                 *tiRoot,
2127                         tdsaPortContext_t        *onePortContext,
2128                         tdsaExpander_t           *oneExpander
2129                        );
2130
2131GLOBAL bit32
2132tdsaDiscoveryStartIDDev(
2133                        tiRoot_t                  *tiRoot,
2134                        tiIORequest_t             *tiIORequest,
2135                        tiDeviceHandle_t          *tiDeviceHandle,
2136                        tiScsiInitiatorRequest_t *tiScsiRequest,
2137                        tdsaDeviceData_t          *oneDeviceData
2138                        );
2139
2140GLOBAL void  satFreeIntIoResource(
2141                    tiRoot_t              *tiRoot,
2142                    satDeviceData_t       *satDevData,
2143                    satInternalIo_t       *satIntIo);
2144osGLOBAL void
2145tddmDeregisterDevicesInPort(
2146                tiRoot_t             *tiRoot,
2147                tdsaPortContext_t    *onePortContext
2148               );
2149
2150#ifdef AGTIAPI_CTL
2151osGLOBAL void
2152tdsaCTLSet(
2153           tiRoot_t          *tiRoot,
2154           tdsaPortContext_t *onePortContext,
2155           tiIntrEventType_t eventType,
2156           bit32             eventStatus);
2157
2158STATIC void
2159tdsaCTLNextDevice(
2160                  tiRoot_t          *tiRoot,
2161                  tdsaPortContext_t *onePortContext,
2162                  tdIORequest_t     *tdIORequest,
2163                  tdList_t          *DeviceList);
2164
2165STATIC int
2166tdsaCTLModeSelect(
2167                  tiRoot_t                  *tiRoot,
2168                  tiDeviceHandle_t          *tiDeviceHandle,
2169                  tdIORequest_t             *tdIORequest);
2170
2171STATIC void
2172tdsaCTLIOCompleted(
2173                   agsaRoot_t      *agRoot,
2174                   agsaIORequest_t *agIORequest,
2175                   bit32           agIOStatus,
2176                   bit32           agIOInfoLen,
2177                   void            *agParam,
2178                   bit16           sspTag,
2179                   bit32           agOtherInfo);
2180#endif /* AGTIAPI_CTL */
2181
2182#endif /* TD_DISCOVER */
2183#endif /* INITIATOR_DRIVER */
2184
2185#ifdef FDS_DM
2186/**********		For DM		*******/
2187osGLOBAL tdsaDeviceData_t *
2188tddmPortDeviceAdd(
2189                     tiRoot_t            *tiRoot,
2190                     tdsaPortContext_t   *onePortContext,
2191                     dmDeviceInfo_t      *dmDeviceInfo,
2192                     tdsaDeviceData_t    *oneExpDeviceData
2193                     );
2194
2195osGLOBAL void
2196tddmInvalidateDevicesInPort(
2197                tiRoot_t             *tiRoot,
2198                tdsaPortContext_t    *onePortContext
2199               );
2200
2201osGLOBAL bit32
2202tddmNewSASorNot(
2203                                 tiRoot_t             *tiRoot,
2204                                 tdsaPortContext_t    *onePortContext,
2205                                 tdsaSASSubID_t       *agSASSubID
2206                                 );
2207
2208osGLOBAL tdsaDeviceData_t *
2209tddmPortSASDeviceFind(
2210                      tiRoot_t           *tiRoot,
2211                      tdsaPortContext_t  *onePortContext,
2212                      bit32              sasAddrLo,
2213                      bit32              sasAddrHi
2214                      );
2215
2216osGLOBAL tdsaDeviceData_t *
2217tddmAddToSharedcontext(
2218                       agsaRoot_t           *agRoot,
2219                       tdsaPortContext_t    *onePortContext,
2220                       tdsaSASSubID_t       *agSASSubID,
2221                       tdsaDeviceData_t     *oneExpDeviceData,
2222                       bit8                 phyID
2223                      );
2224
2225osGLOBAL void
2226tdsaUpdateMCN(
2227              dmRoot_t 	           *dmRoot,
2228              tdsaPortContext_t    *onePortContext
2229             );
2230#endif
2231
2232GLOBAL void
2233tdsaSingleThreadedEnter(tiRoot_t *ptiRoot, bit32 queueId);
2234
2235GLOBAL void
2236tdsaSingleThreadedLeave(tiRoot_t *ptiRoot, bit32 queueId);
2237
2238#ifdef PERF_COUNT
2239GLOBAL void
2240tdsaEnter(tiRoot_t *ptiRoot, int io);
2241
2242GLOBAL void
2243tdsaLeave(tiRoot_t *ptiRoot, int io);
2244
2245#define TDSA_INP_ENTER(root) tdsaEnter(root, 0)
2246#define TDSA_INP_LEAVE(root) tdsaLeave(root, 0)
2247#define TDSA_OUT_ENTER(root) tdsaEnter(root, 1)
2248#define TDSA_OUT_LEAVE(root) tdsaLeave(root, 1)
2249#else
2250#define TDSA_INP_ENTER(root)
2251#define TDSA_INP_LEAVE(root)
2252#define TDSA_OUT_ENTER(root)
2253#define TDSA_OUT_LEAVE(root)
2254#endif
2255
2256#if defined(FDS_DM) && defined(FDS_SM)
2257GLOBAL void
2258tdIDStart(
2259           tiRoot_t             *tiRoot,
2260           agsaRoot_t           *agRoot,
2261           smRoot_t             *smRoot,
2262           tdsaDeviceData_t     *oneDeviceData,
2263           tdsaPortContext_t    *onePortContext
2264          );
2265#endif
2266
2267void t_MacroCheck(  agsaRoot_t       *agRoot);
2268
2269#endif                          /* __TDPROTO_H__ */
2270