]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - sys/dev/pms/RefTisa/sat/src/smproto.h
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / sys / dev / pms / RefTisa / sat / src / smproto.h
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