xref: /freebsd/sys/dev/pms/RefTisa/sat/src/smproto.h (revision 42249ef2)
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 #ifndef __SMPROTO_H__
25 #define __SMPROTO_H__
26 
27 #include <dev/pms/RefTisa/sat/src/smtypes.h>
28 
29 /***************** start of util ****************************************/
30 osGLOBAL FORCEINLINE void*
31 sm_memset(void *s, int c, bit32 n);
32 
33 osGLOBAL FORCEINLINE void *
34 sm_memcpy(void *dst, const void *src, bit32 count);
35 
36 osGLOBAL char
37 *sm_strncpy(char *dst, const char *src, bit32 len);
38 
39 
40 osGLOBAL void
41 smhexdump(const char *ptitle, bit8 *pbuf, size_t len);
42 /***************** end of util ****************************************/
43 
44 /***************** start of timer fns ****************************************/
45 osGLOBAL void
46 smTimerTick(smRoot_t 		*smRoot );
47 
48 osGLOBAL void
49 smInitTimerRequest(
50                    smRoot_t                *smRoot,
51                    smTimerRequest_t        *timerRequest
52                   );
53 osGLOBAL void
54 smSetTimerRequest(
55                   smRoot_t            *smRoot,
56                   smTimerRequest_t    *timerRequest,
57                   bit32               timeout,
58                   smTimerCBFunc_t     CBFunc,
59                   void                *timerData1,
60                   void                *timerData2,
61                   void                *timerData3
62                   );
63 
64 osGLOBAL void
65 smAddTimer(
66            smRoot_t            *smRoot,
67            smList_t            *timerListHdr,
68            smTimerRequest_t    *timerRequest
69           );
70 
71 osGLOBAL void
72 smKillTimer(
73             smRoot_t            *smRoot,
74             smTimerRequest_t    *timerRequest
75            );
76 
77 osGLOBAL void
78 smProcessTimers(
79                 smRoot_t *smRoot
80                );
81 
82 
83 /***************** end of timer fns ****************************************/
84 
85 osGLOBAL void
86 smInitTimers(
87              smRoot_t *smRoot
88             );
89 
90 osGLOBAL void
91 smDeviceDataInit(
92                  smRoot_t *smRoot,
93                  bit32    max_dev
94                 );
95 
96 osGLOBAL void
97 smIOInit(
98          smRoot_t *smRoot
99         );
100 
101 osGLOBAL FORCEINLINE void
102 smIOReInit(
103           smRoot_t          *smRoot,
104           smIORequestBody_t *smIORequestBody
105           );
106 
107 osGLOBAL void
108 smDeviceDataReInit(
109                    smRoot_t        *smRoot,
110                    smDeviceData_t  *oneDeviceData
111                   );
112 
113 osGLOBAL void
114 smEnqueueIO(
115              smRoot_t           *smRoot,
116              smSatIOContext_t   *satIOContext
117              );
118 
119 osGLOBAL FORCEINLINE void
120 smsatFreeIntIoResource(
121              smRoot_t           *smRoot,
122              smDeviceData_t     *satDevData,
123              smSatInternalIo_t  *satIntIo
124              );
125 
126 osGLOBAL smSatInternalIo_t *
127 smsatAllocIntIoResource(
128                         smRoot_t              *smRoot,
129                         smIORequest_t         *smIORequest,
130                         smDeviceData_t        *satDevData,
131                         bit32                 dmaAllocLength,
132                         smSatInternalIo_t     *satIntIo);
133 
134 
135 
136 osGLOBAL smDeviceData_t *
137 smAddToSharedcontext(
138                      smRoot_t                   *smRoot,
139                      agsaDevHandle_t            *agDevHandle,
140                      smDeviceHandle_t           *smDeviceHandle,
141                      agsaDevHandle_t            *agExpDevHandle,
142                      bit32                      phyID
143                     );
144 
145 osGLOBAL bit32
146 smRemoveFromSharedcontext(
147                           smRoot_t                      *smRoot,
148                           agsaDevHandle_t               *agDevHandle,
149                           smDeviceHandle_t              *smDeviceHandle
150                          );
151 
152 osGLOBAL smDeviceData_t *
153 smFindInSharedcontext(
154                       smRoot_t                  *smRoot,
155                       agsaDevHandle_t           *agDevHandle
156                       );
157 
158 osGLOBAL bit32
159 smsatLogSenseAllocate(
160                       smRoot_t                  *smRoot,
161                       smIORequest_t             *smIORequest,
162                       smDeviceHandle_t          *smDeviceHandle,
163                       smScsiInitiatorRequest_t  *smSCSIRequest,
164                       smSatIOContext_t            *satIOContext,
165                       bit32                     payloadSize,
166                       bit32                     flag
167                      );
168 
169 osGLOBAL bit32
170 smsatIDSubStart(
171                  smRoot_t                 *smRoot,
172                  smIORequest_t            *smIORequest,
173                  smDeviceHandle_t         *smDeviceHandle,
174                  smScsiInitiatorRequest_t *smSCSIRequest,
175                  smSatIOContext_t           *satIOContext
176                );
177 
178 
179 osGLOBAL bit32
180 smsatIDStart(
181               smRoot_t                  *smRoot,
182               smIORequest_t             *smIORequest,
183               smDeviceHandle_t          *smDeviceHandle,
184               smScsiInitiatorRequest_t  *smSCSIRequest,
185               smSatIOContext_t            *satIOContext
186              );
187 
188 
189 osGLOBAL FORCEINLINE bit32
190 smsatIOStart(
191               smRoot_t                  *smRoot,
192               smIORequest_t             *smIORequest,
193               smDeviceHandle_t          *smDeviceHandle,
194               smScsiInitiatorRequest_t  *smSCSIRequest,
195               smSatIOContext_t            *satIOContext
196              );
197 
198 osGLOBAL void
199 smsatSetSensePayload(
200                      smScsiRspSense_t   *pSense,
201                      bit8               SnsKey,
202                      bit32              SnsInfo,
203                      bit16              SnsCode,
204                      smSatIOContext_t     *satIOContext
205 		    );
206 
207 osGLOBAL void
208 smsatSetDeferredSensePayload(
209                              smScsiRspSense_t *pSense,
210                              bit8             SnsKey,
211                              bit32            SnsInfo,
212                              bit16            SnsCode,
213                              smSatIOContext_t   *satIOContext
214                             );
215 
216 osGLOBAL FORCEINLINE bit32
217 smsatIOPrepareSGL(
218                   smRoot_t                 *smRoot,
219                   smIORequestBody_t        *smIORequestBody,
220                   smSgl_t                  *smSgl1,
221                   void                     *sglVirtualAddr
222                   );
223 osGLOBAL FORCEINLINE void
224 smsatBitSet(smRoot_t *smRoot,bit8 *data, bit32 index);
225 
226 osGLOBAL FORCEINLINE void
227 smsatBitClear(smRoot_t *smRoot,bit8 *data, bit32 index);
228 
229 osGLOBAL FORCEINLINE BOOLEAN
230 smsatBitTest(smRoot_t *smRoot,bit8 *data, bit32 index);
231 
232 osGLOBAL FORCEINLINE bit32
233 smsatTagAlloc(
234                smRoot_t         *smRoot,
235                smDeviceData_t   *pSatDevData,
236                bit8             *pTag
237              );
238 
239 osGLOBAL FORCEINLINE bit32
240 smsatTagRelease(
241                 smRoot_t         *smRoot,
242                 smDeviceData_t   *pSatDevData,
243                 bit8              tag
244                );
245 
246 osGLOBAL FORCEINLINE void
247 smsatDecrementPendingIO(
248                         smRoot_t                *smRoot,
249                         smIntContext_t          *smAllShared,
250                         smSatIOContext_t        *satIOContext
251                         );
252 
253 osGLOBAL smSatIOContext_t *
254 smsatPrepareNewIO(
255                   smSatInternalIo_t       *satNewIntIo,
256                   smIORequest_t           *smOrgIORequest,
257                   smDeviceData_t          *satDevData,
258                   smIniScsiCmnd_t         *scsiCmnd,
259                   smSatIOContext_t        *satOrgIOContext
260                  );
261 
262 osGLOBAL void
263 smsatSetDevInfo(
264                  smDeviceData_t            *oneDeviceData,
265                  agsaSATAIdentifyData_t    *SATAIdData
266                );
267 
268 osGLOBAL void
269 smsatInquiryStandard(
270                      bit8                    *pInquiry,
271                      agsaSATAIdentifyData_t  *pSATAIdData,
272                      smIniScsiCmnd_t         *scsiCmnd
273                     );
274 
275 osGLOBAL void
276 smsatInquiryPage0(
277                    bit8                    *pInquiry,
278                    agsaSATAIdentifyData_t  *pSATAIdData
279 		 );
280 
281 osGLOBAL void
282 smsatInquiryPage83(
283                     bit8                    *pInquiry,
284                     agsaSATAIdentifyData_t  *pSATAIdData,
285                     smDeviceData_t          *oneDeviceData
286 		  );
287 
288 
289 osGLOBAL void
290 smsatInquiryPage89(
291                     bit8                    *pInquiry,
292                     agsaSATAIdentifyData_t  *pSATAIdData,
293                     smDeviceData_t          *oneDeviceData,
294                     bit32                   len
295 		  );
296 
297 osGLOBAL void
298 smsatInquiryPage80(
299                     bit8                    *pInquiry,
300                     agsaSATAIdentifyData_t  *pSATAIdData
301 		   );
302 
303 osGLOBAL void
304 smsatInquiryPageB1(
305                     bit8                    *pInquiry,
306                     agsaSATAIdentifyData_t  *pSATAIdData
307 		   );
308 
309 osGLOBAL void
310 smsatDefaultTranslation(
311                         smRoot_t                  *smRoot,
312                         smIORequest_t             *smIORequest,
313                         smSatIOContext_t            *satIOContext,
314                         smScsiRspSense_t          *pSense,
315                         bit8                      ataStatus,
316                         bit8                      ataError,
317                         bit32                     interruptContext
318                        );
319 
320 osGLOBAL bit32
321 smPhyControlSend(
322                   smRoot_t             *smRoot,
323                   smDeviceData_t       *oneDeviceData,
324                   bit8                 phyOp,
325                   smIORequest_t        *CurrentTaskTag,
326                   bit32                queueNumber
327                 );
328 
329 osGLOBAL bit32
330 smsatTaskManagement(
331                     smRoot_t          *smRoot,
332                     smDeviceHandle_t  *smDeviceHandle,
333                     bit32             task,
334                     smLUN_t           *lun,
335                     smIORequest_t     *taskTag,
336                     smIORequest_t     *currentTaskTag,
337                     smIORequestBody_t *smIORequestBody
338 		   );
339 
340 osGLOBAL bit32
341 smsatTmAbortTask(
342                   smRoot_t                  *smRoot,
343                   smIORequest_t             *currentTaskTag,
344                   smDeviceHandle_t          *smDeviceHandle,
345                   smScsiInitiatorRequest_t  *tiScsiRequest,
346                   smSatIOContext_t            *satIOContext,
347                   smIORequest_t             *taskTag);
348 
349 osGLOBAL bit32
350 smsatStartCheckPowerMode(
351                          smRoot_t                  *smRoot,
352                          smIORequest_t             *currentTaskTag,
353                          smDeviceHandle_t          *smDeviceHandle,
354                          smScsiInitiatorRequest_t  *smScsiRequest,
355                          smSatIOContext_t            *satIOContext
356                         );
357 osGLOBAL bit32
358 smsatStartResetDevice(
359                        smRoot_t                  *smRoot,
360                        smIORequest_t             *currentTaskTag,
361                        smDeviceHandle_t          *smDeviceHandle,
362                        smScsiInitiatorRequest_t  *smScsiRequest,
363                        smSatIOContext_t            *satIOContext
364                      );
365 osGLOBAL void
366 smsatAbort(
367            smRoot_t          *smRoot,
368            agsaRoot_t        *agRoot,
369            smSatIOContext_t    *satIOContext
370 	  );
371 
372 osGLOBAL smIORequestBody_t *
373 smDequeueIO(smRoot_t          *smRoot);
374 
375 osGLOBAL bit32
376 smsatDecodeSATADeviceType(bit8 * pSignature);
377 
378 /******************************** beginning of start ******************************************************/
379 
380 /*! \brief SAT implementation for ATAPI Packet Command.
381  *
382  *  SAT implementation for ATAPI Packet and send FIS request to LL layer.
383  *
384  *  \param   smRoot:           Pointer to TISA initiator driver/port instance.
385  *  \param   smIORequest:      Pointer to TISA I/O request context for this I/O.
386  *  \param   smDeviceHandle:   Pointer to TISA device handle for this I/O.
387  *  \param   smScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
388  *  \param   smSatIOContext_t:   Pointer to the SAT IO Context
389  *
390  *  \return If command is started successfully
391  *    - \e smIOSuccess: 	  I/O request successfully initiated.
392  *    - \e smIOBusy:        No resources available, try again later.
393  *    - \e smIOIONoDevice:  Invalid device handle.
394  *    - \e smIOError:       Other errors.
395  */
396 /*****************************************************************************/
397 osGLOBAL bit32
398 smsatPacket(
399             smRoot_t                  *smRoot,
400             smIORequest_t             *smIORequest,
401             smDeviceHandle_t          *smDeviceHandle,
402             smScsiInitiatorRequest_t  *smScsiRequest,
403             smSatIOContext_t            *satIOContext
404             );
405 
406 osGLOBAL void
407 smsatPacketCB(
408             agsaRoot_t        *agRoot,
409             agsaIORequest_t   *agIORequest,
410             bit32             agIOStatus,
411             agsaFisHeader_t   *agFirstDword,
412             bit32             agIOInfoLen,
413             void              *agParam,
414             void              *ioContext
415             );
416 /*****************************************************************************/
417 /*! \brief SAT implementation for smsatExecuteDeviceDiagnostic.
418  *
419  *  This function creates Execute Device Diagnostic fis and sends the request to LL layer
420  *
421  *  \param   smRoot:           Pointer to TISA initiator driver/port instance.
422  *  \param   smIORequest:      Pointer to TISA I/O request context for this I/O.
423  *  \param   smDeviceHandle:   Pointer to TISA device handle for this I/O.
424  *  \param   smScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
425  *  \param   smSatIOContext_t:   Pointer to the SAT IO Context
426  *
427  *  \return If command is started successfully
428  *    - \e smIOSuccess: 	  I/O request successfully initiated.
429  *    - \e smIOBusy:        No resources available, try again later.
430  *    - \e smIOIONoDevice:  Invalid device handle.
431  *    - \e smIOError:       Other errors.
432 
433  */
434 /*****************************************************************************/
435 osGLOBAL bit32
436 smsatExecuteDeviceDiagnostic(
437        smRoot_t                  *smRoot,
438        smIORequest_t             *smIORequest,
439        smDeviceHandle_t          *smDeviceHandle,
440        smScsiInitiatorRequest_t  *smScsiRequest,
441        smSatIOContext_t            *satIOContext
442        );
443 
444 osGLOBAL void
445 smsatExecuteDeviceDiagnosticCB(
446        agsaRoot_t        *agRoot,
447        agsaIORequest_t   *agIORequest,
448        bit32             agIOStatus,
449        agsaFisHeader_t   *agFirstDword,
450        bit32             agIOInfoLen,
451        void              *agParam,
452        void              *ioContext
453        );
454 /* set feature for auto activate */
455 osGLOBAL bit32
456 smsatSetFeaturesAA(
457            smRoot_t                  *smRoot,
458            smIORequest_t             *smIORequest,
459            smDeviceHandle_t          *smDeviceHandle,
460            smScsiInitiatorRequest_t  *smScsiRequest,
461            smSatIOContext_t            *satIOContext
462            );
463 osGLOBAL void
464 smsatSetFeaturesAACB(
465          agsaRoot_t        *agRoot,
466          agsaIORequest_t   *agIORequest,
467          bit32             agIOStatus,
468          agsaFisHeader_t   *agFirstDword,
469          bit32             agIOInfoLen,
470          void              *agParam,
471          void              *ioContext
472          );
473 
474 /*****************************************************************************/
475 /*! \brief SAT implementation for satSetFeatures.
476  *
477  *  This function creates SetFeatures fis and sends the request to LL layer
478  *
479  *  \param   smRoot:           Pointer to TISA initiator driver/port instance.
480  *  \param   smIORequest:      Pointer to TISA I/O request context for this I/O.
481  *  \param   smDeviceHandle:   Pointer to TISA device handle for this I/O.
482  *  \param   smScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
483  *  \param   smSatIOContext_t:   Pointer to the SAT IO Context
484  *
485  *  \return If command is started successfully
486  *    - \e smIOSuccess: 	  I/O request successfully initiated.
487  *    - \e smIOBusy:        No resources available, try again later.
488  *    - \e smIOIONoDevice:  Invalid device handle.
489  *    - \e smIOError:       Other errors.
490  */
491 /*****************************************************************************/
492 osGLOBAL bit32
493 smsatSetFeaturesPIO(
494            smRoot_t                  *smRoot,
495            smIORequest_t             *smIORequest,
496            smDeviceHandle_t          *smDeviceHandle,
497            smScsiInitiatorRequest_t  *smScsiRequest,
498            smSatIOContext_t          *satIOContext
499            );
500 osGLOBAL void
501 smsatSetFeaturesPIOCB(
502           agsaRoot_t        *agRoot,
503           agsaIORequest_t   *agIORequest,
504           bit32             agIOStatus,
505           agsaFisHeader_t   *agFirstDword,
506           bit32             agIOInfoLen,
507           void              *agParam,
508           void              *ioContext
509           );
510 
511 osGLOBAL bit32
512 smsatSetFeaturesDMA(
513            smRoot_t                  *smRoot,
514            smIORequest_t             *smIORequest,
515            smDeviceHandle_t          *smDeviceHandle,
516            smScsiInitiatorRequest_t  *smScsiRequest,
517            smSatIOContext_t            *satIOContext
518            );
519 
520 osGLOBAL void
521 smsatSetFeaturesDMACB(
522          agsaRoot_t        *agRoot,
523          agsaIORequest_t   *agIORequest,
524          bit32             agIOStatus,
525          agsaFisHeader_t   *agFirstDword,
526          bit32             agIOInfoLen,
527          void              *agParam,
528          void              *ioContext
529          );
530 
531 osGLOBAL bit32
532 smsatSetFeaturesReadLookAhead(
533            smRoot_t                  *smRoot,
534            smIORequest_t             *smIORequest,
535            smDeviceHandle_t          *smDeviceHandle,
536            smScsiInitiatorRequest_t  *smScsiRequest,
537            smSatIOContext_t            *satIOContext
538            );
539 
540 osGLOBAL void
541 smsatSetFeaturesReadLookAheadCB(
542          agsaRoot_t        *agRoot,
543          agsaIORequest_t   *agIORequest,
544          bit32             agIOStatus,
545          agsaFisHeader_t   *agFirstDword,
546          bit32             agIOInfoLen,
547          void              *agParam,
548          void              *ioContext
549          );
550 
551 osGLOBAL bit32
552 smsatSetFeaturesVolatileWriteCache(
553            smRoot_t                  *smRoot,
554            smIORequest_t             *smIORequest,
555            smDeviceHandle_t          *smDeviceHandle,
556            smScsiInitiatorRequest_t  *smScsiRequest,
557            smSatIOContext_t            *satIOContext
558            );
559 
560 osGLOBAL void
561 smsatSetFeaturesVolatileWriteCacheCB(
562          agsaRoot_t        *agRoot,
563          agsaIORequest_t   *agIORequest,
564          bit32             agIOStatus,
565          agsaFisHeader_t   *agFirstDword,
566          bit32             agIOInfoLen,
567          void              *agParam,
568          void              *ioContext
569          );
570 
571 osGLOBAL void
572 smsatSMARTEnablePassCB(
573                      agsaRoot_t        *agRoot,
574                      agsaIORequest_t   *agIORequest,
575                      bit32             agIOStatus,
576                      agsaFisHeader_t   *agFirstDword,
577                      bit32             agIOInfoLen,
578                      agsaFrameHandle_t agFrameHandle,
579                      void              *ioContext
580                     );
581 
582 osGLOBAL void
583 smsatSMARTRStatusPassCB(
584                 agsaRoot_t        *agRoot,
585                 agsaIORequest_t   *agIORequest,
586                 bit32             agIOStatus,
587                 agsaFisHeader_t   *agFirstDword,
588                 bit32             agIOInfoLen,
589                 void              *agParam,
590                 void              *ioContext
591                );
592 osGLOBAL void
593 smsatSMARTReadLogCB(
594                 agsaRoot_t        *agRoot,
595                 agsaIORequest_t   *agIORequest,
596                 bit32             agIOStatus,
597                 agsaFisHeader_t   *agFirstDword,
598                 bit32             agIOInfoLen,
599                 void              *agParam,
600                 void              *ioContext
601                );
602 
603 
604 /*****************************************************************************/
605 /*! \brief SAT implementation for SCSI REQUEST SENSE to ATAPI device.
606  *
607  *  SAT implementation for SCSI REQUEST SENSE.
608  *
609  *  \param   smRoot:           Pointer to TISA initiator driver/port instance.
610  *  \param   smIORequest:      Pointer to TISA I/O request context for this I/O.
611  *  \param   smDeviceHandle:   Pointer to TISA device handle for this I/O.
612  *  \param   smScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
613  *  \param   smSatIOContext_t:   Pointer to the SAT IO Context
614  *
615  *  \return If command is started successfully
616  *    - \e smIOSuccess: 	  I/O request successfully initiated.
617  *    - \e smIOBusy:        No resources available, try again later.
618  *    - \e smIOIONoDevice:  Invalid device handle.
619  *    - \e smIOError:       Other errors.
620  */
621 /*****************************************************************************/
622 osGLOBAL bit32
623 smsatRequestSenseForATAPI(
624         smRoot_t                  *smRoot,
625         smIORequest_t             *smIORequest,
626         smDeviceHandle_t          *smDeviceHandle,
627         smScsiInitiatorRequest_t  *smScsiRequest,
628         smSatIOContext_t            *satIOContext
629         );
630 
631 osGLOBAL void
632 smsatRequestSenseForATAPICB(
633         agsaRoot_t        *agRoot,
634         agsaIORequest_t   *agIORequest,
635         bit32             agIOStatus,
636         agsaFisHeader_t   *agFirstDword,
637         bit32             agIOInfoLen,
638         void              *agParam,
639         void              *ioContext
640         );
641 
642 /*****************************************************************************/
643 /*! \brief SAT implementation for smsatDeviceReset.
644  *
645  *  This function creates DEVICE RESET fis and sends the request to LL layer
646  *
647  *  \param   smRoot:           Pointer to TISA initiator driver/port instance.
648  *  \param   smIORequest:      Pointer to TISA I/O request context for this I/O.
649  *  \param   smDeviceHandle:   Pointer to TISA device handle for this I/O.
650  *  \param   smScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
651  *  \param   smSatIOContext_t:   Pointer to the SAT IO Context
652  *
653  *  \return If command is started successfully
654  *    - \e smIOSuccess: 	  I/O request successfully initiated.
655  *    - \e smIOBusy:        No resources available, try again later.
656  *    - \e smIONoDevice:  Invalid device handle.
657  *    - \e smIOError:       Other errors.
658  */
659 /*****************************************************************************/
660 osGLOBAL bit32
661 smsatDeviceReset(
662         smRoot_t                  *smRoot,
663         smIORequest_t             *smIORequest,
664         smDeviceHandle_t          *smDeviceHandle,
665         smScsiInitiatorRequest_t  *smScsiRequest,
666         smSatIOContext_t            *satIOContext
667         );
668 
669 osGLOBAL void
670 smsatDeviceResetCB(
671          agsaRoot_t        *agRoot,
672          agsaIORequest_t   *agIORequest,
673          bit32             agIOStatus,
674          agsaFisHeader_t   *agFirstDword,
675          bit32             agIOInfoLen,
676          void              *agParam,
677          void              *ioContext
678          );
679 
680 
681 osGLOBAL void
682 smsatTranslateATAPIErrorsToSCSIErrors(
683         bit8   bCommand,
684         bit8   bATAStatus,
685         bit8   bATAError,
686         bit8   *pSenseKey,
687         bit16  *pSenseCodeInfo
688         );
689 
690 GLOBAL void
691 smsatTranslateATAErrorsToSCSIErrors(
692     bit8   bATAStatus,
693     bit8   bATAError,
694     bit8   *pSenseKey,
695     bit16  *pSenseCodeInfo
696     );
697 
698 /*****************************************************************************/
699 
700 osGLOBAL bit32
701 smsatRead6(
702            smRoot_t                  *smRoot,
703            smIORequest_t             *smIORequest,
704            smDeviceHandle_t          *smDeviceHandle,
705            smScsiInitiatorRequest_t  *smScsiRequest,
706            smSatIOContext_t            *satIOContext
707 	  );
708 
709 osGLOBAL FORCEINLINE bit32
710 smsatRead10(
711             smRoot_t                  *smRoot,
712             smIORequest_t             *smIORequest,
713             smDeviceHandle_t          *smDeviceHandle,
714             smScsiInitiatorRequest_t  *smScsiRequest,
715             smSatIOContext_t            *satIOContext
716 	   );
717 
718 osGLOBAL bit32
719 smsatRead12(
720             smRoot_t                  *smRoot,
721             smIORequest_t             *smIORequest,
722             smDeviceHandle_t          *smDeviceHandle,
723             smScsiInitiatorRequest_t  *smScsiRequest,
724             smSatIOContext_t            *satIOContext
725 	   );
726 
727 osGLOBAL bit32
728 smsatRead16(
729             smRoot_t                  *smRoot,
730             smIORequest_t             *smIORequest,
731             smDeviceHandle_t          *smDeviceHandle,
732             smScsiInitiatorRequest_t  *smScsiRequest,
733             smSatIOContext_t            *satIOContext
734 	   );
735 
736 osGLOBAL bit32
737 smsatWrite6(
738             smRoot_t                  *smRoot,
739             smIORequest_t             *smIORequest,
740             smDeviceHandle_t          *smDeviceHandle,
741             smScsiInitiatorRequest_t  *smScsiRequest,
742             smSatIOContext_t            *satIOContext
743 	   );
744 
745 osGLOBAL FORCEINLINE bit32
746 smsatWrite10(
747              smRoot_t                  *smRoot,
748              smIORequest_t             *smIORequest,
749              smDeviceHandle_t          *smDeviceHandle,
750              smScsiInitiatorRequest_t  *smScsiRequest,
751              smSatIOContext_t            *satIOContext
752             );
753 
754 osGLOBAL bit32
755 smsatWrite12(
756              smRoot_t                  *smRoot,
757              smIORequest_t             *smIORequest,
758              smDeviceHandle_t          *smDeviceHandle,
759              smScsiInitiatorRequest_t  *smScsiRequest,
760              smSatIOContext_t            *satIOContext
761             );
762 
763 osGLOBAL bit32
764 smsatWrite16(
765              smRoot_t                  *smRoot,
766              smIORequest_t             *smIORequest,
767              smDeviceHandle_t          *smDeviceHandle,
768              smScsiInitiatorRequest_t  *smScsiRequest,
769              smSatIOContext_t            *satIOContext
770             );
771 
772 osGLOBAL bit32
773 smsatVerify10(
774               smRoot_t                  *smRoot,
775               smIORequest_t             *smIORequest,
776               smDeviceHandle_t          *smDeviceHandle,
777               smScsiInitiatorRequest_t  *smScsiRequest,
778               smSatIOContext_t            *satIOContext
779              );
780 
781 osGLOBAL bit32
782 smsatVerify12(
783               smRoot_t                  *smRoot,
784               smIORequest_t             *smIORequest,
785               smDeviceHandle_t          *smDeviceHandle,
786               smScsiInitiatorRequest_t  *smScsiRequest,
787               smSatIOContext_t            *satIOContext
788              );
789 
790 osGLOBAL bit32
791 smsatVerify16(
792               smRoot_t                  *smRoot,
793               smIORequest_t             *smIORequest,
794               smDeviceHandle_t          *smDeviceHandle,
795               smScsiInitiatorRequest_t  *smScsiRequest,
796               smSatIOContext_t            *satIOContext
797              );
798 
799 osGLOBAL bit32
800 smsatTestUnitReady(
801                    smRoot_t                  *smRoot,
802                    smIORequest_t             *smIORequest,
803                    smDeviceHandle_t          *smDeviceHandle,
804                    smScsiInitiatorRequest_t  *smScsiRequest,
805                    smSatIOContext_t            *satIOContext
806                   );
807 
808 osGLOBAL bit32
809 smsatInquiry(
810              smRoot_t                  *smRoot,
811              smIORequest_t             *smIORequest,
812              smDeviceHandle_t          *smDeviceHandle,
813              smScsiInitiatorRequest_t  *smScsiRequest,
814              smSatIOContext_t            *satIOContext
815             );
816 
817 osGLOBAL bit32
818 smsatRequestSense(
819                   smRoot_t                  *smRoot,
820                   smIORequest_t             *smIORequest,
821                   smDeviceHandle_t          *smDeviceHandle,
822                   smScsiInitiatorRequest_t  *smScsiRequest,
823                   smSatIOContext_t            *satIOContext
824                  );
825 
826 osGLOBAL bit32
827 smsatModeSense6(
828                 smRoot_t                  *smRoot,
829                 smIORequest_t             *smIORequest,
830                 smDeviceHandle_t          *smDeviceHandle,
831                 smScsiInitiatorRequest_t  *smScsiRequest,
832                 smSatIOContext_t            *satIOContext
833                );
834 
835 osGLOBAL bit32
836 smsatModeSense10(
837                   smRoot_t                  *smRoot,
838                   smIORequest_t             *smIORequest,
839                   smDeviceHandle_t          *smDeviceHandle,
840                   smScsiInitiatorRequest_t  *smScsiRequest,
841                   smSatIOContext_t            *satIOContext
842                  );
843 
844 osGLOBAL bit32
845 smsatReadCapacity10(
846                     smRoot_t                  *smRoot,
847                     smIORequest_t             *smIORequest,
848                     smDeviceHandle_t          *smDeviceHandle,
849                     smScsiInitiatorRequest_t  *smScsiRequest,
850                     smSatIOContext_t            *satIOContext
851                    );
852 
853 osGLOBAL bit32
854 smsatReadCapacity16(
855                     smRoot_t                  *smRoot,
856                     smIORequest_t             *smIORequest,
857                     smDeviceHandle_t          *smDeviceHandle,
858                     smScsiInitiatorRequest_t  *smScsiRequest,
859                     smSatIOContext_t            *satIOContext
860                    );
861 
862 osGLOBAL bit32
863 smsatReportLun(
864                smRoot_t                  *smRoot,
865                smIORequest_t             *smIORequest,
866                smDeviceHandle_t          *smDeviceHandle,
867                smScsiInitiatorRequest_t  *smScsiRequest,
868                smSatIOContext_t            *satIOContext
869               );
870 
871 osGLOBAL bit32
872 smsatFormatUnit(
873                 smRoot_t                  *smRoot,
874                 smIORequest_t             *smIORequest,
875                 smDeviceHandle_t          *smDeviceHandle,
876                 smScsiInitiatorRequest_t  *smScsiRequest,
877                 smSatIOContext_t            *satIOContext
878                );
879 
880 osGLOBAL bit32
881 smsatSendDiagnostic(
882                     smRoot_t                  *smRoot,
883                     smIORequest_t             *smIORequest,
884                     smDeviceHandle_t          *smDeviceHandle,
885                     smScsiInitiatorRequest_t  *smScsiRequest,
886                     smSatIOContext_t            *satIOContext
887                    );
888 
889 osGLOBAL bit32
890 smsatStartStopUnit(
891                    smRoot_t                  *smRoot,
892                    smIORequest_t             *smIORequest,
893                    smDeviceHandle_t          *smDeviceHandle,
894                    smScsiInitiatorRequest_t  *smScsiRequest,
895                    smSatIOContext_t            *satIOContext
896                   );
897 
898 osGLOBAL bit32
899 smsatWriteSame10(
900                   smRoot_t                  *smRoot,
901                   smIORequest_t             *smIORequest,
902                   smDeviceHandle_t          *smDeviceHandle,
903                   smScsiInitiatorRequest_t  *smScsiRequest,
904                   smSatIOContext_t            *satIOContext
905                  );
906 
907 osGLOBAL bit32
908 smsatWriteSame16(
909                   smRoot_t                  *smRoot,
910                   smIORequest_t             *smIORequest,
911                   smDeviceHandle_t          *smDeviceHandle,
912                   smScsiInitiatorRequest_t  *smScsiRequest,
913                   smSatIOContext_t            *satIOContext
914                  );
915 
916 osGLOBAL bit32
917 smsatLogSense(
918               smRoot_t                  *smRoot,
919               smIORequest_t             *smIORequest,
920               smDeviceHandle_t          *smDeviceHandle,
921               smScsiInitiatorRequest_t  *smScsiRequest,
922               smSatIOContext_t            *satIOContext
923              );
924 
925 osGLOBAL bit32
926 smsatModeSelect6(
927                  smRoot_t                  *smRoot,
928                  smIORequest_t             *smIORequest,
929                  smDeviceHandle_t          *smDeviceHandle,
930                  smScsiInitiatorRequest_t  *smScsiRequest,
931                  smSatIOContext_t            *satIOContext
932                 );
933 
934 
935 osGLOBAL bit32
936 smsatModeSelect10(
937                   smRoot_t                  *smRoot,
938                   smIORequest_t             *smIORequest,
939                   smDeviceHandle_t          *smDeviceHandle,
940                   smScsiInitiatorRequest_t  *smScsiRequest,
941                   smSatIOContext_t            *satIOContext
942                  );
943 
944 osGLOBAL bit32
945 smsatSynchronizeCache10(
946                         smRoot_t                  *smRoot,
947                         smIORequest_t             *smIORequest,
948                         smDeviceHandle_t          *smDeviceHandle,
949                         smScsiInitiatorRequest_t  *smScsiRequest,
950                         smSatIOContext_t            *satIOContext
951                        );
952 
953 osGLOBAL bit32
954 smsatSynchronizeCache16(
955                         smRoot_t                  *smRoot,
956                         smIORequest_t             *smIORequest,
957                         smDeviceHandle_t          *smDeviceHandle,
958                         smScsiInitiatorRequest_t  *smScsiRequest,
959                         smSatIOContext_t            *satIOContext
960                        );
961 
962 osGLOBAL bit32
963 smsatWriteAndVerify10(
964                       smRoot_t                  *smRoot,
965                       smIORequest_t             *smIORequest,
966                       smDeviceHandle_t          *smDeviceHandle,
967                       smScsiInitiatorRequest_t  *smScsiRequest,
968                       smSatIOContext_t            *satIOContext
969                      );
970 
971 osGLOBAL bit32
972 smsatWriteAndVerify12(
973                       smRoot_t                  *smRoot,
974                       smIORequest_t             *smIORequest,
975                       smDeviceHandle_t          *smDeviceHandle,
976                       smScsiInitiatorRequest_t  *smScsiRequest,
977                       smSatIOContext_t            *satIOContext
978                      );
979 
980 osGLOBAL bit32
981 smsatWriteAndVerify16(
982                       smRoot_t                  *smRoot,
983                       smIORequest_t             *smIORequest,
984                       smDeviceHandle_t          *smDeviceHandle,
985                       smScsiInitiatorRequest_t  *smScsiRequest,
986                       smSatIOContext_t            *satIOContext
987                      );
988 
989 osGLOBAL bit32
990 smsatReadMediaSerialNumber(
991                            smRoot_t                  *smRoot,
992                            smIORequest_t             *smIORequest,
993                            smDeviceHandle_t          *smDeviceHandle,
994                            smScsiInitiatorRequest_t  *smScsiRequest,
995                            smSatIOContext_t            *satIOContext
996                           );
997 
998 osGLOBAL bit32
999 smsatReadBuffer(
1000                 smRoot_t                  *smRoot,
1001                 smIORequest_t             *smIORequest,
1002                 smDeviceHandle_t          *smDeviceHandle,
1003                 smScsiInitiatorRequest_t  *smScsiRequest,
1004                 smSatIOContext_t            *satIOContext
1005                );
1006 
1007 osGLOBAL bit32
1008 smsatWriteBuffer(
1009                  smRoot_t                  *smRoot,
1010                  smIORequest_t             *smIORequest,
1011                  smDeviceHandle_t          *smDeviceHandle,
1012                  smScsiInitiatorRequest_t  *smScsiRequest,
1013                  smSatIOContext_t            *satIOContext
1014                 );
1015 
1016 osGLOBAL bit32
1017 smsatReassignBlocks(
1018                     smRoot_t                  *smRoot,
1019                     smIORequest_t             *smIORequest,
1020                     smDeviceHandle_t          *smDeviceHandle,
1021                     smScsiInitiatorRequest_t  *smScsiRequest,
1022                     smSatIOContext_t            *satIOContext
1023                    );
1024 
1025 osGLOBAL bit32
1026 smsatPassthrough(
1027                     smRoot_t                  *smRoot,
1028                     smIORequest_t             *smIORequest,
1029                     smDeviceHandle_t          *smDeviceHandle,
1030                     smScsiInitiatorRequest_t  *smScsiRequest,
1031                     smSatIOContext_t            *satIOContext
1032                    );
1033 
1034 osGLOBAL FORCEINLINE bit32
1035 smsataLLIOStart(
1036                 smRoot_t                  *smRoot,
1037                 smIORequest_t             *smIORequest,
1038                 smDeviceHandle_t          *smDeviceHandle,
1039                 smScsiInitiatorRequest_t  *smScsiRequest,
1040                 smSatIOContext_t            *satIOContext
1041                );
1042 osGLOBAL bit32
1043 smsatTestUnitReady_1(
1044                      smRoot_t                  *smRoot,
1045                      smIORequest_t             *smIORequest,
1046                      smDeviceHandle_t          *smDeviceHandle,
1047                      smScsiInitiatorRequest_t  *smScsiRequest,
1048                      smSatIOContext_t            *satIOContext
1049                     );
1050 osGLOBAL bit32
1051 smsatStartIDDev(
1052                 smRoot_t                  *smRoot,
1053                 smIORequest_t             *smIORequest,
1054                 smDeviceHandle_t          *smDeviceHandle,
1055                 smScsiInitiatorRequest_t  *smScsiRequest,
1056                 smSatIOContext_t            *satIOContext
1057                );
1058 
1059 osGLOBAL bit32
1060 smsatSendIDDev(
1061                 smRoot_t                  *smRoot,
1062                 smIORequest_t             *smIORequest,
1063                 smDeviceHandle_t          *smDeviceHandle,
1064                 smScsiInitiatorRequest_t  *smScsiRequest,
1065                 smSatIOContext_t            *satIOContext
1066                );
1067 
1068 osGLOBAL bit32
1069 smsatRequestSense_1(
1070                     smRoot_t                  *smRoot,
1071                     smIORequest_t             *smIORequest,
1072                     smDeviceHandle_t          *smDeviceHandle,
1073                     smScsiInitiatorRequest_t  *smScsiRequest,
1074                     smSatIOContext_t            *satIOContext
1075                    );
1076 
1077 osGLOBAL bit32
1078 smsatSMARTEnable(
1079                  smRoot_t                  *smRoot,
1080                  smIORequest_t             *smIORequest,
1081                  smDeviceHandle_t          *smDeviceHandle,
1082                  smScsiInitiatorRequest_t  *smScsiRequest,
1083                  smSatIOContext_t            *satIOContext
1084                );
1085 
1086 osGLOBAL bit32
1087 smsatLogSense_2(
1088                 smRoot_t                  *smRoot,
1089                 smIORequest_t             *smIORequest,
1090                 smDeviceHandle_t          *smDeviceHandle,
1091                 smScsiInitiatorRequest_t  *smScsiRequest,
1092                 smSatIOContext_t            *satIOContext
1093                );
1094 
1095 osGLOBAL bit32
1096 smsatLogSense_3(
1097                 smRoot_t                  *smRoot,
1098                 smIORequest_t             *smIORequest,
1099                 smDeviceHandle_t          *smDeviceHandle,
1100                 smScsiInitiatorRequest_t  *smScsiRequest,
1101                 smSatIOContext_t            *satIOContext
1102                );
1103 
1104 osGLOBAL bit32
1105 smsatRead_1(
1106             smRoot_t                  *smRoot,
1107             smIORequest_t             *smIORequest,
1108             smDeviceHandle_t          *smDeviceHandle,
1109             smScsiInitiatorRequest_t  *smScsiRequest,
1110             smSatIOContext_t            *satIOContext
1111           );
1112 
1113 osGLOBAL bit32
1114 smsatWrite_1(
1115              smRoot_t                  *smRoot,
1116              smIORequest_t             *smIORequest,
1117              smDeviceHandle_t          *smDeviceHandle,
1118              smScsiInitiatorRequest_t  *smScsiRequest,
1119              smSatIOContext_t            *satIOContext
1120            );
1121 
1122 osGLOBAL bit32
1123 smsatNonChainedWriteNVerify_Verify(
1124                                    smRoot_t                  *smRoot,
1125                                    smIORequest_t             *smIORequest,
1126                                    smDeviceHandle_t          *smDeviceHandle,
1127                                    smScsiInitiatorRequest_t  *smScsiRequest,
1128                                    smSatIOContext_t            *satIOContext
1129                                   );
1130 
1131 osGLOBAL bit32
1132 smsatChainedWriteNVerify_Start_Verify(
1133                                       smRoot_t                  *smRoot,
1134                                       smIORequest_t             *smIORequest,
1135                                       smDeviceHandle_t          *smDeviceHandle,
1136                                       smScsiInitiatorRequest_t  *smScsiRequest,
1137                                       smSatIOContext_t            *satIOContext
1138                                      );
1139 
1140 osGLOBAL bit32
1141 smsatChainedWriteNVerify_Write(
1142                                smRoot_t                  *smRoot,
1143                                smIORequest_t             *smIORequest,
1144                                smDeviceHandle_t          *smDeviceHandle,
1145                                smScsiInitiatorRequest_t  *smScsiRequest,
1146                                smSatIOContext_t            *satIOContext
1147                               );
1148 
1149 osGLOBAL bit32
1150 smsatChainedWriteNVerify_Verify(
1151                                 smRoot_t                  *smRoot,
1152                                 smIORequest_t             *smIORequest,
1153                                 smDeviceHandle_t          *smDeviceHandle,
1154                                 smScsiInitiatorRequest_t  *smScsiRequest,
1155                                 smSatIOContext_t            *satIOContext
1156                                );
1157 osGLOBAL bit32
1158 smsatChainedVerify(
1159                     smRoot_t                  *smRoot,
1160                     smIORequest_t             *smIORequest,
1161                     smDeviceHandle_t          *smDeviceHandle,
1162                     smScsiInitiatorRequest_t  *smScsiRequest,
1163                     smSatIOContext_t            *satIOContext
1164 		   );
1165 
1166 osGLOBAL bit32
1167 smsatWriteSame10_1(
1168                     smRoot_t                  *smRoot,
1169                     smIORequest_t             *smIORequest,
1170                     smDeviceHandle_t          *smDeviceHandle,
1171                     smScsiInitiatorRequest_t  *smScsiRequest,
1172                     smSatIOContext_t            *satIOContext,
1173                     bit32                     lba
1174                   );
1175 
1176 osGLOBAL bit32
1177 smsatWriteSame10_2(
1178                     smRoot_t                  *smRoot,
1179                     smIORequest_t             *smIORequest,
1180                     smDeviceHandle_t          *smDeviceHandle,
1181                     smScsiInitiatorRequest_t  *smScsiRequest,
1182                     smSatIOContext_t            *satIOContext,
1183                     bit32                     lba
1184                   );
1185 
1186 osGLOBAL bit32
1187 smsatWriteSame10_3(
1188                     smRoot_t                  *smRoot,
1189                     smIORequest_t             *smIORequest,
1190                     smDeviceHandle_t          *smDeviceHandle,
1191                     smScsiInitiatorRequest_t  *smScsiRequest,
1192                     smSatIOContext_t            *satIOContext,
1193                     bit32                     lba
1194                   );
1195 
1196 osGLOBAL bit32
1197 smsatStartStopUnit_1(
1198                      smRoot_t                  *smRoot,
1199                      smIORequest_t             *smIORequest,
1200                      smDeviceHandle_t          *smDeviceHandle,
1201                      smScsiInitiatorRequest_t  *smScsiRequest,
1202                      smSatIOContext_t            *satIOContext
1203 		    );
1204 
1205 osGLOBAL bit32
1206 smsatSendDiagnostic_1(
1207                       smRoot_t                  *smRoot,
1208                       smIORequest_t             *smIORequest,
1209                       smDeviceHandle_t          *smDeviceHandle,
1210                       smScsiInitiatorRequest_t  *smScsiRequest,
1211                       smSatIOContext_t            *satIOContext
1212 		     );
1213 
1214 osGLOBAL bit32
1215 smsatSendDiagnostic_2(
1216                       smRoot_t                  *smRoot,
1217                       smIORequest_t             *smIORequest,
1218                       smDeviceHandle_t          *smDeviceHandle,
1219                       smScsiInitiatorRequest_t  *smScsiRequest,
1220                       smSatIOContext_t            *satIOContext
1221 		     );
1222 
1223 osGLOBAL bit32
1224 smsatModeSelect6n10_1(
1225                       smRoot_t                  *smRoot,
1226                       smIORequest_t             *smIORequest,
1227                       smDeviceHandle_t          *smDeviceHandle,
1228                       smScsiInitiatorRequest_t  *smScsiRequest,
1229                       smSatIOContext_t            *satIOContext
1230 		     );
1231 
1232 osGLOBAL bit32
1233 smsatLogSense_1(
1234                 smRoot_t                  *smRoot,
1235                 smIORequest_t             *smIORequest,
1236                 smDeviceHandle_t          *smDeviceHandle,
1237                 smScsiInitiatorRequest_t  *smScsiRequest,
1238                 smSatIOContext_t            *satIOContext
1239                );
1240 
1241 osGLOBAL bit32
1242 smsatReassignBlocks_2(
1243                       smRoot_t                  *smRoot,
1244                       smIORequest_t             *smIORequest,
1245                       smDeviceHandle_t          *smDeviceHandle,
1246                       smScsiInitiatorRequest_t  *smScsiRequest,
1247                       smSatIOContext_t            *satIOContext,
1248                       bit8                      *LBA
1249                      );
1250 
1251 osGLOBAL bit32
1252 smsatReassignBlocks_1(
1253                       smRoot_t                  *smRoot,
1254                       smIORequest_t             *smIORequest,
1255                       smDeviceHandle_t          *smDeviceHandle,
1256                       smScsiInitiatorRequest_t  *smScsiRequest,
1257                       smSatIOContext_t            *satIOContext,
1258                       smSatIOContext_t            *satOrgIOContext
1259                      );
1260 
1261 osGLOBAL bit32
1262 smsatSendReadLogExt(
1263                      smRoot_t                  *smRoot,
1264                      smIORequest_t             *smIORequest,
1265                      smDeviceHandle_t          *smDeviceHandle,
1266                      smScsiInitiatorRequest_t  *smScsiRequest,
1267                      smSatIOContext_t            *satIOContext
1268 		   );
1269 
1270 osGLOBAL bit32
1271 smsatCheckPowerMode(
1272                      smRoot_t                  *smRoot,
1273                      smIORequest_t             *smIORequest,
1274                      smDeviceHandle_t          *smDeviceHandle,
1275                      smScsiInitiatorRequest_t  *smScsiRequest,
1276                      smSatIOContext_t            *satIOContext
1277 		   );
1278 
1279 osGLOBAL bit32
1280 smsatResetDevice(
1281                   smRoot_t                  *smRoot,
1282                   smIORequest_t             *smIORequest,
1283                   smDeviceHandle_t          *smDeviceHandle,
1284                   smScsiInitiatorRequest_t  *smScsiRequest,
1285                   smSatIOContext_t            *satIOContext
1286                 );
1287 
1288 osGLOBAL bit32
1289 smsatDeResetDevice(
1290                     smRoot_t                  *smRoot,
1291                     smIORequest_t             *smIORequest,
1292                     smDeviceHandle_t          *smDeviceHandle,
1293                     smScsiInitiatorRequest_t  *smScsiRequest,
1294                     smSatIOContext_t            *satIOContext
1295                    );
1296 /******************************** beginning of completion ******************************************************/
1297 osGLOBAL FORCEINLINE void
1298 smllSATACompleted(
1299                   agsaRoot_t        *agRoot,
1300                   agsaIORequest_t   *agIORequest,
1301                   bit32             agIOStatus,
1302                   void              *agFirstDword,
1303                   bit32             agIOInfoLen,
1304                   void              *agParam
1305                  );
1306 
1307 
1308 osGLOBAL FORCEINLINE void
1309 smsatNonChainedDataIOCB(
1310                         agsaRoot_t        *agRoot,
1311                         agsaIORequest_t   *agIORequest,
1312                         bit32             agIOStatus,
1313                         agsaFisHeader_t   *agFirstDword,
1314                         bit32             agIOInfoLen,
1315                         void              *agParam,
1316                         void              *ioContext
1317                        );
1318 
1319 osGLOBAL FORCEINLINE void
1320 smsatChainedDataIOCB(
1321                      agsaRoot_t        *agRoot,
1322                      agsaIORequest_t   *agIORequest,
1323                      bit32             agIOStatus,
1324                      agsaFisHeader_t   *agFirstDword,
1325                      bit32             agIOInfoLen,
1326                      void              *agParam,
1327                      void              *ioContext
1328                     );
1329 
1330 osGLOBAL void
1331 smsatNonChainedVerifyCB(
1332                         agsaRoot_t        *agRoot,
1333                         agsaIORequest_t   *agIORequest,
1334                         bit32             agIOStatus,
1335                         agsaFisHeader_t   *agFirstDword,
1336                         bit32             agIOInfoLen,
1337                         agsaFrameHandle_t agFrameHandle,
1338                         void              *ioContext
1339                        );
1340 
1341 osGLOBAL void
1342 smsatChainedVerifyCB(
1343                      agsaRoot_t        *agRoot,
1344                      agsaIORequest_t   *agIORequest,
1345                      bit32             agIOStatus,
1346                      agsaFisHeader_t   *agFirstDword,
1347                      bit32             agIOInfoLen,
1348                      agsaFrameHandle_t agFrameHandle,
1349                      void              *ioContext
1350                     );
1351 
1352 osGLOBAL void
1353 smsatTestUnitReadyCB(
1354                      agsaRoot_t        *agRoot,
1355                      agsaIORequest_t   *agIORequest,
1356                      bit32             agIOStatus,
1357                      agsaFisHeader_t   *agFirstDword,
1358                      bit32             agIOInfoLen,
1359                      agsaFrameHandle_t agFrameHandle,
1360                      void              *ioContext
1361                     );
1362 osGLOBAL void
1363 smsatRequestSenseCB(
1364                     agsaRoot_t        *agRoot,
1365                     agsaIORequest_t   *agIORequest,
1366                     bit32             agIOStatus,
1367                     agsaFisHeader_t   *agFirstDword,
1368                     bit32             agIOInfoLen,
1369                     void              *agParam,
1370                     void              *ioContext
1371                    );
1372 
1373 osGLOBAL void
1374 smsatSendDiagnosticCB(
1375                        agsaRoot_t        *agRoot,
1376                        agsaIORequest_t   *agIORequest,
1377                        bit32             agIOStatus,
1378                        agsaFisHeader_t   *agFirstDword,
1379                        bit32             agIOInfoLen,
1380                        agsaFrameHandle_t agFrameHandle,
1381                        void              *ioContext
1382                      );
1383 
1384 osGLOBAL void
1385 smsatStartStopUnitCB(
1386                      agsaRoot_t        *agRoot,
1387                      agsaIORequest_t   *agIORequest,
1388                      bit32             agIOStatus,
1389                      agsaFisHeader_t   *agFirstDword,
1390                      bit32             agIOInfoLen,
1391                      agsaFrameHandle_t agFrameHandle,
1392                      void              *ioContext
1393                     );
1394 
1395 
1396 osGLOBAL void
1397 smsatWriteSame10CB(
1398                    agsaRoot_t        *agRoot,
1399                    agsaIORequest_t   *agIORequest,
1400                    bit32             agIOStatus,
1401                    agsaFisHeader_t   *agFirstDword,
1402                    bit32             agIOInfoLen,
1403                    agsaFrameHandle_t agFrameHandle,
1404                    void              *ioContext
1405                   );
1406 
1407 
1408 osGLOBAL void
1409 smsatLogSenseCB(
1410                 agsaRoot_t        *agRoot,
1411                 agsaIORequest_t   *agIORequest,
1412                 bit32             agIOStatus,
1413                 agsaFisHeader_t   *agFirstDword,
1414                 bit32             agIOInfoLen,
1415                 void              *agParam,
1416                 void              *ioCotext
1417                );
1418 
1419 osGLOBAL void
1420 smsatSMARTEnableCB(
1421                    agsaRoot_t        *agRoot,
1422                    agsaIORequest_t   *agIORequest,
1423                    bit32             agIOStatus,
1424                    agsaFisHeader_t   *agFirstDword,
1425                    bit32             agIOInfoLen,
1426                    agsaFrameHandle_t agFrameHandle,
1427                    void              *ioContext
1428                   );
1429 
1430 osGLOBAL void
1431 smsatModeSelect6n10CB(
1432                       agsaRoot_t        *agRoot,
1433                       agsaIORequest_t   *agIORequest,
1434                       bit32             agIOStatus,
1435                       agsaFisHeader_t   *agFirstDword,
1436                       bit32             agIOInfoLen,
1437                       agsaFrameHandle_t agFrameHandle,
1438                       void              *ioContext
1439                      );
1440 
1441 osGLOBAL void
1442 smsatSynchronizeCache10n16CB(
1443                              agsaRoot_t        *agRoot,
1444                              agsaIORequest_t   *agIORequest,
1445                              bit32             agIOStatus,
1446                              agsaFisHeader_t   *agFirstDword,
1447                              bit32             agIOInfoLen,
1448                              agsaFrameHandle_t agFrameHandle,
1449                              void              *ioContext
1450                             );
1451 
1452 osGLOBAL void
1453 smsatNonChainedWriteNVerifyCB(
1454                               agsaRoot_t        *agRoot,
1455                               agsaIORequest_t   *agIORequest,
1456                               bit32             agIOStatus,
1457                               agsaFisHeader_t   *agFirstDword,
1458                               bit32             agIOInfoLen,
1459                               void              *agParam,
1460                               void              *ioContext
1461                              );
1462 
1463 osGLOBAL void
1464 smsatChainedWriteNVerifyCB(
1465                            agsaRoot_t        *agRoot,
1466                            agsaIORequest_t   *agIORequest,
1467                            bit32             agIOStatus,
1468                            agsaFisHeader_t   *agFirstDword,
1469                            bit32             agIOInfoLen,
1470                            void              *agParam,
1471                            void              *ioContext
1472                           );
1473 
1474 osGLOBAL void
1475 smsatReadMediaSerialNumberCB(
1476                              agsaRoot_t        *agRoot,
1477                              agsaIORequest_t   *agIORequest,
1478                              bit32             agIOStatus,
1479                              agsaFisHeader_t   *agFirstDword,
1480                              bit32             agIOInfoLen,
1481                              agsaFrameHandle_t agFrameHandle,
1482                              void              *ioContext
1483                             );
1484 
1485 osGLOBAL void
1486 smsatReadBufferCB(
1487                   agsaRoot_t        *agRoot,
1488                   agsaIORequest_t   *agIORequest,
1489                   bit32             agIOStatus,
1490                   agsaFisHeader_t   *agFirstDword,
1491                   bit32             agIOInfoLen,
1492                   agsaFrameHandle_t agFrameHandle,
1493                   void              *ioContext
1494                  );
1495 
1496 osGLOBAL void
1497 smsatWriteBufferCB(
1498                    agsaRoot_t        *agRoot,
1499                    agsaIORequest_t   *agIORequest,
1500                    bit32             agIOStatus,
1501                    agsaFisHeader_t   *agFirstDword,
1502                    bit32             agIOInfoLen,
1503                    agsaFrameHandle_t agFrameHandle,
1504                    void              *ioContext
1505                   );
1506 
1507 osGLOBAL void
1508 smsatReassignBlocksCB(
1509                       agsaRoot_t        *agRoot,
1510                       agsaIORequest_t   *agIORequest,
1511                       bit32             agIOStatus,
1512                       agsaFisHeader_t   *agFirstDword,
1513                       bit32             agIOInfoLen,
1514                       agsaFrameHandle_t agFrameHandle,
1515                       void              *ioContext
1516                      );
1517 
1518 osGLOBAL void
1519 smsatProcessAbnormalCompletion(
1520                                agsaRoot_t        *agRoot,
1521                                agsaIORequest_t   *agIORequest,
1522                                bit32             agIOStatus,
1523                                agsaFisHeader_t   *agFirstDword,
1524                                bit32             agIOInfoLen,
1525                                void              *agParam,
1526                                smSatIOContext_t    *satIOContext
1527                               );
1528 
1529 osGLOBAL void
1530 smsatDelayedProcessAbnormalCompletion(
1531                                       agsaRoot_t        *agRoot,
1532                                       agsaIORequest_t   *agIORequest,
1533                                       bit32             agIOStatus,
1534                                       agsaFisHeader_t   *agFirstDword,
1535                                       bit32             agIOInfoLen,
1536                                       void              *agParam,
1537                                       smSatIOContext_t    *satIOContext
1538                                      );
1539 
1540 osGLOBAL void
1541 smsatIOCompleted(
1542                  smRoot_t           *smRoot,
1543                  smIORequest_t      *smIORequest,
1544                  agsaFisHeader_t    *agFirstDword,
1545                  bit32              respFisLen,
1546                  agsaFrameHandle_t  agFrameHandle,
1547                  smSatIOContext_t     *satIOContext,
1548                  bit32              interruptContext
1549 		);
1550 
1551 osGLOBAL void
1552 smsatEncryptionHandler(
1553                        smRoot_t                *smRoot,
1554                        agsaIORequest_t         *agIORequest,
1555                        bit32                   agIOStatus,
1556                        bit32                   agIOInfoLen,
1557                        void                    *agParam,
1558                        bit32                   agOtherInfo,
1559                        bit32                   interruptContext
1560                       );
1561 
1562 osGLOBAL void
1563 smsatDifHandler(
1564                 smRoot_t                *smRoot,
1565                 agsaIORequest_t         *agIORequest,
1566                 bit32                   agIOStatus,
1567                 bit32                   agIOInfoLen,
1568                 void                    *agParam,
1569                 bit32                   agOtherInfo,
1570                 bit32                   interruptContext
1571                );
1572 
1573 osGLOBAL void
1574 smsatProcessAbort(
1575                   smRoot_t           *smRoot,
1576                   smIORequest_t      *smIORequest,
1577                   smSatIOContext_t     *satIOContext
1578                  );
1579 
1580 osGLOBAL void
1581 smsatNonDataIOCB(
1582                   agsaRoot_t        *agRoot,
1583                   agsaIORequest_t   *agIORequest,
1584                   bit32             agIOStatus,
1585                   agsaFisHeader_t   *agFirstDword,
1586                   bit32             agIOInfoLen,
1587                   void              *agParam,
1588                   void              *ioContext
1589                  );
1590 
1591 osGLOBAL void
1592 smsatInquiryCB(
1593                agsaRoot_t        *agRoot,
1594                agsaIORequest_t   *agIORequest,
1595                bit32             agIOStatus,
1596                agsaFisHeader_t   *agFirstDword,
1597                bit32             agIOInfoLen,
1598                void              *agParam,
1599                void              *ioContext
1600               );
1601 
1602 
1603 osGLOBAL void
1604 smsatInquiryIntCB(
1605                    smRoot_t                  *smRoot,
1606                    smIORequest_t             *smIORequest,
1607                    smDeviceHandle_t          *smDeviceHandle,
1608                    smScsiInitiatorRequest_t  *smScsiRequest,
1609                    smSatIOContext_t            *satIOContext
1610                   );
1611 
1612 osGLOBAL void
1613 smsatVerify10CB(
1614                 agsaRoot_t        *agRoot,
1615                 agsaIORequest_t   *agIORequest,
1616                 bit32             agIOStatus,
1617                 agsaFisHeader_t   *agFirstDword,
1618                 bit32             agIOInfoLen,
1619                 void              *agParam,
1620                 void              *ioContext
1621                );
1622 
1623 osGLOBAL void
1624 smsatReadLogExtCB(
1625                    agsaRoot_t        *agRoot,
1626                    agsaIORequest_t   *agIORequest,
1627                    bit32             agIOStatus,
1628                    agsaFisHeader_t   *agFirstDword,
1629                    bit32             agIOInfoLen,
1630                    void              *agParam,
1631                    void              *ioContext
1632                  );
1633 
1634 
1635 osGLOBAL void
1636 smsatIDStartCB(
1637                 agsaRoot_t        *agRoot,
1638                 agsaIORequest_t   *agIORequest,
1639                 bit32             agIOStatus,
1640                 agsaFisHeader_t   *agFirstDword,
1641                 bit32             agIOInfoLen,
1642                 void              *agParam,
1643                 void              *ioContext
1644                );
1645 
1646 osGLOBAL void
1647 smSMPCompleted(
1648                 agsaRoot_t            *agRoot,
1649                 agsaIORequest_t       *agIORequest,
1650                 bit32                 agIOStatus,
1651                 bit32                 agIOInfoLen,
1652                 agsaFrameHandle_t     agFrameHandle
1653               );
1654 
1655 osGLOBAL void
1656 smSMPCompletedCB(
1657                   agsaRoot_t            *agRoot,
1658                   agsaIORequest_t       *agIORequest,
1659                   bit32                 agIOStatus,
1660                   bit32                 agIOInfoLen,
1661                   agsaFrameHandle_t     agFrameHandle
1662                 );
1663 
1664 osGLOBAL void
1665 smPhyControlRespRcvd(
1666                       smRoot_t              *smRoot,
1667                       agsaRoot_t            *agRoot,
1668                       agsaIORequest_t       *agIORequest,
1669                       smDeviceData_t        *oneDeviceData,
1670                       smSMPFrameHeader_t    *frameHeader,
1671                       agsaFrameHandle_t     frameHandle,
1672                       smIORequest_t         *CurrentTaskTag
1673                      );
1674 
1675 osGLOBAL void
1676 smsatCheckPowerModeCB(
1677                       agsaRoot_t        *agRoot,
1678                       agsaIORequest_t   *agIORequest,
1679                       bit32             agIOStatus,
1680                       agsaFisHeader_t   *agFirstDword,
1681                       bit32             agIOInfoLen,
1682                       agsaFrameHandle_t agFrameHandle,
1683                       void              *ioContext
1684                      );
1685 
1686 osGLOBAL void
1687 smsatCheckPowerModePassCB(
1688                       agsaRoot_t        *agRoot,
1689                       agsaIORequest_t   *agIORequest,
1690                       bit32             agIOStatus,
1691                       agsaFisHeader_t   *agFirstDword,
1692                       bit32             agIOInfoLen,
1693                       agsaFrameHandle_t agFrameHandle,
1694                       void              *ioContext
1695                      );
1696 
1697 osGLOBAL void
1698 smsatIDDataPassCB(
1699                   agsaRoot_t        *agRoot,
1700                   agsaIORequest_t   *agIORequest,
1701                   bit32             agIOStatus,
1702                   agsaFisHeader_t   *agFirstDword,
1703                   bit32             agIOInfoLen,
1704                   agsaFrameHandle_t agFrameHandle,
1705                   void              *ioContext
1706                  );
1707 
1708 osGLOBAL void
1709 smsatResetDeviceCB(
1710                     agsaRoot_t        *agRoot,
1711                     agsaIORequest_t   *agIORequest,
1712                     bit32             agIOStatus,
1713                     agsaFisHeader_t   *agFirstDword,
1714                     bit32             agIOInfoLen,
1715                     agsaFrameHandle_t agFrameHandle,
1716                     void              *ioContext
1717                   );
1718 
1719 osGLOBAL void
1720 smsatDeResetDeviceCB(
1721                       agsaRoot_t        *agRoot,
1722                       agsaIORequest_t   *agIORequest,
1723                       bit32             agIOStatus,
1724                       agsaFisHeader_t   *agFirstDword,
1725                       bit32             agIOInfoLen,
1726                       agsaFrameHandle_t agFrameHandle,
1727                       void              *ioContext
1728                     );
1729 osGLOBAL void
1730 smaSATAAbortCB(
1731                 agsaRoot_t        *agRoot,
1732                 agsaIORequest_t   *agIORequest,
1733                 bit32             flag,
1734                 bit32             status
1735 	      );
1736 
1737 osGLOBAL void
1738 smLocalPhyControlCB(
1739                      agsaRoot_t     *agRoot,
1740                      agsaContext_t  *agContext,
1741                      bit32          phyId,
1742                      bit32          phyOperation,
1743                      bit32          status,
1744                      void           *parm
1745                     );
1746 /******************************** end of completion ***********************************************************/
1747 
1748 /******************************** start of utils    ***********************************************************/
1749 osGLOBAL bit32 smsatComputeCDB10LBA(smSatIOContext_t            *satIOContext);
1750 osGLOBAL bit32 smsatComputeCDB10TL(smSatIOContext_t            *satIOContext);
1751 osGLOBAL bit32 smsatComputeCDB12LBA(smSatIOContext_t            *satIOContext);
1752 osGLOBAL bit32 smsatComputeCDB12TL(smSatIOContext_t            *satIOContext);
1753 osGLOBAL bit32 smsatComputeCDB16LBA(smSatIOContext_t            *satIOContext);
1754 osGLOBAL bit32 smsatComputeCDB16TL(smSatIOContext_t            *satIOContext);
1755 osGLOBAL FORCEINLINE bit32 smsatComputeLoopNum(bit32 a, bit32 b);
1756 osGLOBAL FORCEINLINE bit32 smsatCheckLimit(bit8 *lba, bit8 *tl, int flag, smDeviceData_t *pSatDevData);
1757 
1758 osGLOBAL void
1759 smsatSplitSGL(
1760             smRoot_t                  *smRoot,
1761             smIORequest_t             *smIORequest,
1762             smDeviceHandle_t          *smDeviceHandle,
1763             smScsiInitiatorRequest_t  *smScsiRequest,
1764             smSatIOContext_t            *satIOContext,
1765             bit32                     split,
1766             bit32                     tl,
1767             bit32                     flag
1768 	   );
1769 
1770 osGLOBAL void
1771 smsatPrintSgl(
1772             smRoot_t                  *smRoot,
1773             agsaEsgl_t                *agEsgl,
1774             bit32                     idx
1775             );
1776 /******************************** end   of utils    ***********************************************************/
1777 
1778 
1779 osGLOBAL void
1780 smsatPassthroughCB(
1781                 agsaRoot_t        *agRoot,
1782                 agsaIORequest_t   *agIORequest,
1783                 bit32             agIOStatus,
1784                 agsaFisHeader_t   *agFirstDword,
1785                 bit32             agIOInfoLen,
1786                 void              *agParam,
1787                 void              *ioContext
1788                );
1789 
1790 
1791 #endif                          /* __SMPROTO_H__ */
1792 
1793