xref: /freebsd/sys/dev/pms/RefTisa/tisa/sassata/sata/host/satproto.h (revision f126890ac5386406dadf7c4cfa9566cbb56537c5)
1 /*******************************************************************************
2 *Copyright (c) 2014 PMC-Sierra, Inc.  All rights reserved.
3 *
4 *Redistribution and use in source and binary forms, with or without modification, are permitted provided
5 *that the following conditions are met:
6 *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
7 *following disclaimer.
8 *2. Redistributions in binary form must reproduce the above copyright notice,
9 *this list of conditions and the following disclaimer in the documentation and/or other materials provided
10 *with the distribution.
11 *
12 *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED
13 *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
14 *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
15 *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
16 *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
17 *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
18 *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
19 *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
20 *
21 *
22 ********************************************************************************/
23 /*******************************************************************************/
24 /** \file
25  *
26  *
27  * The file contaning function protoptype used by SAT layer.
28  *
29  */
30 
31 #ifndef  __SATPROTO_H__
32 #define __SATPROTO_H__
33 
34 
35 /*****************************************************************************
36 *! \brief  itdsatProcessAbnormalCompletion
37 *
38 *   This routine is called to complete error case for SATA request previously
39 *   issued to the LL Layer in saSATAStart()
40 *
41 *  \param  agRoot:       Handles for this instance of SAS/SATA hardware
42 *  \param  agIORequest:  Pointer to the LL I/O request context for this I/O.
43 *  \param  agIOStatus:   Status of completed I/O.
44 *  \param  agSATAParm1:  Additional info based on status.
45 *  \param  agIOInfoLen:  Length in bytes of overrun/underrun residual or FIS
46 *                        length.
47 *  \param  satIOContext: Pointer to satIOContext_t.
48 *
49 *  \return: none
50 *
51 *****************************************************************************/
52 void  itdsatProcessAbnormalCompletion(
53                            agsaRoot_t        *agRoot,
54                            agsaIORequest_t   *agIORequest,
55                            bit32             agIOStatus,
56                            agsaFisHeader_t   *agFirstDword,
57                            bit32             agIOInfoLen,
58                            agsaFrameHandle_t agFrameHandle,
59                            satIOContext_t    *satIOContext
60                            );
61 void  itdsatDelayedProcessAbnormalCompletion(
62                                              agsaRoot_t        *agRoot,
63                                              agsaIORequest_t   *agIORequest,
64                                              bit32             agIOStatus,
65                                              agsaFisHeader_t   *agFirstDword,
66                                              bit32             agIOInfoLen,
67                                              agsaFrameHandle_t agFrameHandle,
68                                              satIOContext_t    *satIOContext
69                                              );
70 
71 void  itdsatErrorSATAEventHandle(
72                                              agsaRoot_t        *agRoot,
73                                              agsaIORequest_t   *agIORequest,
74                                              agsaPortContext_t *agPortContext,
75                                              agsaDevHandle_t   *agDevHandle,
76                                              bit32             event,
77                                              satIOContext_t    *ioContext
78                                              );
79 
80 void itdsatEncryptionHandler (
81                        agsaRoot_t              *agRoot,
82                        agsaIORequest_t         *agIORequest,
83                        bit32                   agIOStatus,
84                        bit32                   agIOInfoLen,
85                        void                    *agParam,
86                        bit32                   agOtherInfo
87                        );
88 
89 osGLOBAL void
90 itdsatDifHandler(
91                  agsaRoot_t              *agRoot,
92                  agsaIORequest_t         *agIORequest,
93                  bit32                   agIOStatus,
94                  bit32                   agIOInfoLen,
95                  void                    *agParam,
96                  bit32                   agOtherInfo
97                 );
98 
99 void  satProcessAbort(
100                       tiRoot_t          *tiRoot,
101                       tiIORequest_t     *tiIORequest,
102                       satIOContext_t    *satIOContext
103                       );
104 /*****************************************************************************/
105 /*! \brief Setup up the SCSI Sense response.
106  *
107  *  This function is used to setup up the Sense Data payload for
108  *     CHECK CONDITION status.
109  *
110  *  \param pSense:      Pointer to the scsiRspSense_t sense data structure.
111  *  \param SnsKey:      SCSI Sense Key.
112  *  \param SnsInfo:     SCSI Sense Info.
113  *  \param SnsCode:     SCSI Sense Code.
114  *
115  *  \return None
116  */
117 /*****************************************************************************/
118 
119 void satSetSensePayload( scsiRspSense_t   *pSense,
120                          bit8             SnsKey,
121                          bit32            SnsInfo,
122                          bit16            SnsCode,
123                          satIOContext_t   *satIOContext);
124 
125 
126 /*****************************************************************************/
127 /*! \brief Setup up the SCSI Sense response.
128  *
129  *  This function is used to setup up the Sense Data payload for
130  *     CHECK CONDITION status.
131  *
132  *  \param pSense:      Pointer to the scsiRspSense_t sense data structure.
133  *  \param SnsKey:      SCSI Sense Key.
134  *  \param SnsInfo:     SCSI Sense Info.
135  *  \param SnsCode:     SCSI Sense Code.
136  *
137  *  \return None
138  */
139 /*****************************************************************************/
140 
141 void satSetDeferredSensePayload( scsiRspSense_t   *pSense,
142                                  bit8             SnsKey,
143                                  bit32            SnsInfo,
144                                  bit16            SnsCode,
145                                  satIOContext_t   *satIOContext
146                                  );
147 
148 /*****************************************************************************/
149 /*! \brief SAT implementation for ATAPI Packet Command.
150  *
151  *  SAT implementation for ATAPI Packet and send FIS request to LL layer.
152  *
153  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
154  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
155  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
156  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
157  *  \param   satIOContext_t:   Pointer to the SAT IO Context
158  *
159  *  \return If command is started successfully
160  *    - \e tiSuccess:     I/O request successfully initiated.
161  *    - \e tiBusy:        No resources available, try again later.
162  *    - \e tiIONoDevice:  Invalid device handle.
163  *    - \e tiError:       Other errors.
164  */
165 /*****************************************************************************/
166 GLOBAL bit32  satPacket(
167                    tiRoot_t                  *tiRoot,
168                    tiIORequest_t             *tiIORequest,
169                    tiDeviceHandle_t          *tiDeviceHandle,
170                    tiScsiInitiatorRequest_t *tiScsiRequest,
171                    satIOContext_t            *satIOContext);
172 
173 void satPacketCB(
174                  agsaRoot_t        *agRoot,
175                  agsaIORequest_t   *agIORequest,
176                  bit32             agIOStatus,
177                  agsaFisHeader_t   *agFirstDword,
178                  bit32             agIOInfoLen,
179                  void              *agParam,
180                  void              *ioContext
181                  );
182 /*****************************************************************************/
183 /*! \brief SAT implementation for satDeviceReset.
184  *
185  *  This function creates DEVICE RESET fis and sends the request to LL layer
186  *
187  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
188  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
189  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
190  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
191  *  \param   satIOContext_t:   Pointer to the SAT IO Context
192  *
193  *  \return If command is started successfully
194  *    - \e tiSuccess:     I/O request successfully initiated.
195  *    - \e tiBusy:        No resources available, try again later.
196  *    - \e tiIONoDevice:  Invalid device handle.
197  *    - \e tiError:       Other errors.
198  */
199 /*****************************************************************************/
200 GLOBAL bit32  satDeviceReset(
201                             tiRoot_t                  *tiRoot,
202                             tiIORequest_t             *tiIORequest,
203                             tiDeviceHandle_t          *tiDeviceHandle,
204                             tiScsiInitiatorRequest_t  *tiScsiRequest,
205                             satIOContext_t            *satIOContext
206                             );
207 
208 void satDeviceResetCB(
209                  agsaRoot_t        *agRoot,
210                  agsaIORequest_t   *agIORequest,
211                  bit32             agIOStatus,
212                  agsaFisHeader_t   *agFirstDword,
213                  bit32             agIOInfoLen,
214                  void              *agParam,
215                  void              *ioContext
216                  );
217 
218 /*****************************************************************************/
219 /*! \brief SAT implementation for satExecuteDeviceDiagnostic.
220  *
221  *  This function creates Execute Device Diagnostic fis and sends the request to LL layer
222  *
223  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
224  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
225  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
226  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
227  *  \param   satIOContext_t:   Pointer to the SAT IO Context
228  *
229  *  \return If command is started successfully
230  *    - \e tiSuccess:     I/O request successfully initiated.
231  *    - \e tiBusy:        No resources available, try again later.
232  *    - \e tiIONoDevice:  Invalid device handle.
233  *    - \e tiError:       Other errors.
234  */
235 /*****************************************************************************/
236 GLOBAL bit32  satExecuteDeviceDiagnostic(
237                             tiRoot_t                  *tiRoot,
238                             tiIORequest_t             *tiIORequest,
239                             tiDeviceHandle_t          *tiDeviceHandle,
240                             tiScsiInitiatorRequest_t  *tiScsiRequest,
241                             satIOContext_t            *satIOContext
242                             );
243 
244 void satExecuteDeviceDiagnosticCB(
245                  agsaRoot_t        *agRoot,
246                  agsaIORequest_t   *agIORequest,
247                  bit32             agIOStatus,
248                  agsaFisHeader_t   *agFirstDword,
249                  bit32             agIOInfoLen,
250                  void              *agParam,
251                  void              *ioContext
252                  );
253 
254 /*****************************************************************************/
255 /*! \brief SAT implementation for satSetFeatures.
256  *
257  *  This function creates SetFeatures fis and sends the request to LL layer
258  *
259  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
260  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
261  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
262  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
263  *  \param   satIOContext_t:   Pointer to the SAT IO Context
264  *
265  *  \return If command is started successfully
266  *    - \e tiSuccess:     I/O request successfully initiated.
267  *    - \e tiBusy:        No resources available, try again later.
268  *    - \e tiIONoDevice:  Invalid device handle.
269  *    - \e tiError:       Other errors.
270  */
271 /*****************************************************************************/
272 GLOBAL bit32  satSetFeatures(
273                             tiRoot_t                  *tiRoot,
274                             tiIORequest_t             *tiIORequest,
275                             tiDeviceHandle_t          *tiDeviceHandle,
276                             tiScsiInitiatorRequest_t  *tiScsiRequest,
277                             satIOContext_t            *satIOContext,
278                             bit8                      bTransferMode
279                             );
280  void satSetFeaturesPIOCB(
281                   agsaRoot_t        *agRoot,
282                   agsaIORequest_t   *agIORequest,
283                   bit32             agIOStatus,
284                   agsaFisHeader_t   *agFirstDword,
285                   bit32             agIOInfoLen,
286                   void              *agParam,
287                   void              *ioContext
288                   );
289 
290  void satSetFeaturesCB(
291                   agsaRoot_t        *agRoot,
292                   agsaIORequest_t   *agIORequest,
293                   bit32             agIOStatus,
294                   agsaFisHeader_t   *agFirstDword,
295                   bit32             agIOInfoLen,
296                   void              *agParam,
297                   void              *ioContext
298                   );
299 /*****************************************************************************/
300 /*! \brief SAT implementation for SCSI REQUEST SENSE to ATAPI device.
301  *
302  *  SAT implementation for SCSI REQUEST SENSE.
303  *
304  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
305  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
306  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
307  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
308  *  \param   satIOContext_t:   Pointer to the SAT IO Context
309  *
310  *  \return If command is started successfully
311  *    - \e tiSuccess:     I/O request successfully initiated.
312  *    - \e tiBusy:        No resources available, try again later.
313  *    - \e tiIONoDevice:  Invalid device handle.
314  *    - \e tiError:       Other errors.
315  */
316 /*****************************************************************************/
317 GLOBAL bit32  satRequestSenseForATAPI(
318                    tiRoot_t                  *tiRoot,
319                    tiIORequest_t             *tiIORequest,
320                    tiDeviceHandle_t          *tiDeviceHandle,
321                    tiScsiInitiatorRequest_t  *tiScsiRequest,
322                    satIOContext_t            *satIOContext);
323 
324  void satRequestSenseForATAPICB(
325                   agsaRoot_t        *agRoot,
326                   agsaIORequest_t   *agIORequest,
327                   bit32             agIOStatus,
328                   agsaFisHeader_t   *agFirstDword,
329                   bit32             agIOInfoLen,
330                   void              *agParam,
331                   void              *ioContext
332                   );
333 
334 /*****************************************************************************/
335 /*! \brief SAT implementation for SCSI READ12.
336  *
337  *  SAT implementation for SCSI READ12 and send FIS request to LL layer.
338  *
339  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
340  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
341  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
342  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
343  *  \param   satIOContext_t:   Pointer to the SAT IO Context
344  *
345  *  \return If command is started successfully
346  *    - \e tiSuccess:     I/O request successfully initiated.
347  *    - \e tiBusy:        No resources available, try again later.
348  *    - \e tiIONoDevice:  Invalid device handle.
349  *    - \e tiError:       Other errors.
350  */
351 /*****************************************************************************/
352 GLOBAL bit32  satRead12(
353                    tiRoot_t                  *tiRoot,
354                    tiIORequest_t             *tiIORequest,
355                    tiDeviceHandle_t          *tiDeviceHandle,
356                    tiScsiInitiatorRequest_t *tiScsiRequest,
357                    satIOContext_t            *satIOContext);
358 
359 /*****************************************************************************/
360 /*! \brief SAT implementation for SCSI READ10.
361  *
362  *  SAT implementation for SCSI READ10 and send FIS request to LL layer.
363  *
364  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
365  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
366  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
367  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
368  *  \param   satIOContext_t:   Pointer to the SAT IO Context
369  *
370  *  \return If command is started successfully
371  *    - \e tiSuccess:     I/O request successfully initiated.
372  *    - \e tiBusy:        No resources available, try again later.
373  *    - \e tiIONoDevice:  Invalid device handle.
374  *    - \e tiError:       Other errors.
375  */
376 /*****************************************************************************/
377 GLOBAL bit32  satRead10(
378                    tiRoot_t                  *tiRoot,
379                    tiIORequest_t             *tiIORequest,
380                    tiDeviceHandle_t          *tiDeviceHandle,
381                    tiScsiInitiatorRequest_t *tiScsiRequest,
382                    satIOContext_t            *satIOContext);
383 
384 
385 /*****************************************************************************/
386 /*! \brief SAT implementation for SCSI READ16.
387  *
388  *  SAT implementation for SCSI READ16 and send FIS request to LL layer.
389  *
390  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
391  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
392  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
393  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
394  *  \param   satIOContext_t:   Pointer to the SAT IO Context
395  *
396  *  \return If command is started successfully
397  *    - \e tiSuccess:     I/O request successfully initiated.
398  *    - \e tiBusy:        No resources available, try again later.
399  *    - \e tiIONoDevice:  Invalid device handle.
400  *    - \e tiError:       Other errors.
401  */
402 /*****************************************************************************/
403 GLOBAL bit32  satRead16(
404                    tiRoot_t                  *tiRoot,
405                    tiIORequest_t             *tiIORequest,
406                    tiDeviceHandle_t          *tiDeviceHandle,
407                    tiScsiInitiatorRequest_t *tiScsiRequest,
408                    satIOContext_t            *satIOContext);
409 /*****************************************************************************/
410 /*! \brief SAT implementation for SCSI READ6.
411  *
412  *  SAT implementation for SCSI READ6 and send FIS request to LL layer.
413  *
414  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
415  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
416  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
417  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
418  *  \param   satIOContext_t:   Pointer to the SAT IO Context
419  *
420  *  \return If command is started successfully
421  *    - \e tiSuccess:     I/O request successfully initiated.
422  *    - \e tiBusy:        No resources available, try again later.
423  *    - \e tiIONoDevice:  Invalid device handle.
424  *    - \e tiError:       Other errors.
425  */
426 /*****************************************************************************/
427 GLOBAL bit32  satRead6(
428                    tiRoot_t                  *tiRoot,
429                    tiIORequest_t             *tiIORequest,
430                    tiDeviceHandle_t          *tiDeviceHandle,
431                    tiScsiInitiatorRequest_t *tiScsiRequest,
432                    satIOContext_t            *satIOContext);
433 
434 /*****************************************************************************/
435 /*! \brief SAT implementation for SCSI WRITE16.
436  *
437  *  SAT implementation for SCSI WRITE16 and send FIS request to LL layer.
438  *
439  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
440  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
441  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
442  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
443  *  \param   satIOContext_t:   Pointer to the SAT IO Context
444  *
445  *  \return If command is started successfully
446  *    - \e tiSuccess:     I/O request successfully initiated.
447  *    - \e tiBusy:        No resources available, try again later.
448  *    - \e tiIONoDevice:  Invalid device handle.
449  *    - \e tiError:       Other errors.
450  */
451 /*****************************************************************************/
452 GLOBAL bit32  satWrite16(
453                    tiRoot_t                  *tiRoot,
454                    tiIORequest_t             *tiIORequest,
455                    tiDeviceHandle_t          *tiDeviceHandle,
456                    tiScsiInitiatorRequest_t *tiScsiRequest,
457                    satIOContext_t            *satIOContext);
458 
459 /*****************************************************************************/
460 /*! \brief SAT implementation for SCSI WRITE12.
461  *
462  *  SAT implementation for SCSI WRITE12 and send FIS request to LL layer.
463  *
464  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
465  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
466  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
467  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
468  *  \param   satIOContext_t:   Pointer to the SAT IO Context
469  *
470  *  \return If command is started successfully
471  *    - \e tiSuccess:     I/O request successfully initiated.
472  *    - \e tiBusy:        No resources available, try again later.
473  *    - \e tiIONoDevice:  Invalid device handle.
474  *    - \e tiError:       Other errors.
475  */
476 /*****************************************************************************/
477 GLOBAL bit32  satWrite12(
478                    tiRoot_t                  *tiRoot,
479                    tiIORequest_t             *tiIORequest,
480                    tiDeviceHandle_t          *tiDeviceHandle,
481                    tiScsiInitiatorRequest_t *tiScsiRequest,
482                    satIOContext_t            *satIOContext);
483 
484 /*****************************************************************************/
485 /*! \brief SAT implementation for SCSI WRITE10.
486  *
487  *  SAT implementation for SCSI WRITE10 and send FIS request to LL layer.
488  *
489  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
490  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
491  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
492  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
493  *  \param   satIOContext_t:   Pointer to the SAT IO Context
494  *
495  *  \return If command is started successfully
496  *    - \e tiSuccess:     I/O request successfully initiated.
497  *    - \e tiBusy:        No resources available, try again later.
498  *    - \e tiIONoDevice:  Invalid device handle.
499  *    - \e tiError:       Other errors.
500  */
501 /*****************************************************************************/
502 GLOBAL bit32  satWrite10(
503                    tiRoot_t                  *tiRoot,
504                    tiIORequest_t             *tiIORequest,
505                    tiDeviceHandle_t          *tiDeviceHandle,
506                    tiScsiInitiatorRequest_t *tiScsiRequest,
507                    satIOContext_t            *satIOContext);
508 GLOBAL bit32  satWrite_1(
509                    tiRoot_t                  *tiRoot,
510                    tiIORequest_t             *tiIORequest,
511                    tiDeviceHandle_t          *tiDeviceHandle,
512                    tiScsiInitiatorRequest_t *tiScsiRequest,
513                    satIOContext_t            *satIOContext);
514 
515 
516 /*****************************************************************************/
517 /*! \brief SAT implementation for SCSI WRITE6.
518  *
519  *  SAT implementation for SCSI WRITE6 and send FIS request to LL layer.
520  *
521  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
522  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
523  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
524  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
525  *  \param   satIOContext_t:   Pointer to the SAT IO Context
526  *
527  *  \return If command is started successfully
528  *    - \e tiSuccess:     I/O request successfully initiated.
529  *    - \e tiBusy:        No resources available, try again later.
530  *    - \e tiIONoDevice:  Invalid device handle.
531  *    - \e tiError:       Other errors.
532  */
533 /*****************************************************************************/
534 GLOBAL bit32  satWrite6(
535                    tiRoot_t                  *tiRoot,
536                    tiIORequest_t             *tiIORequest,
537                    tiDeviceHandle_t          *tiDeviceHandle,
538                    tiScsiInitiatorRequest_t *tiScsiRequest,
539                    satIOContext_t            *satIOContext);
540 
541 
542 /*****************************************************************************/
543 /*! \brief SAT implementation for SCSI satReportLun.
544  *
545  *  SAT implementation for SCSI satReportLun. Only LUN0 is reported.
546  *
547  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
548  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
549  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
550  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
551  *  \param   satIOContext_t:   Pointer to the SAT IO Context
552  *
553  *  \return If command is started successfully
554  *    - \e tiSuccess:     I/O request successfully initiated.
555  *    - \e tiBusy:        No resources available, try again later.
556  *    - \e tiIONoDevice:  Invalid device handle.
557  *    - \e tiError:       Other errors.
558  */
559 /*****************************************************************************/
560 GLOBAL bit32  satReportLun(
561                    tiRoot_t                  *tiRoot,
562                    tiIORequest_t             *tiIORequest,
563                    tiDeviceHandle_t          *tiDeviceHandle,
564                    tiScsiInitiatorRequest_t *tiScsiRequest,
565                    satIOContext_t            *satIOContext);
566 
567 
568 /*****************************************************************************/
569 /*! \brief SAT implementation for SCSI satReadCapacity10.
570  *
571  *  SAT implementation for SCSI satReadCapacity10.
572  *
573  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
574  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
575  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
576  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
577  *  \param   satIOContext_t:   Pointer to the SAT IO Context
578  *
579  *  \return If command is started successfully
580  *    - \e tiSuccess:     I/O request successfully initiated.
581  *    - \e tiBusy:        No resources available, try again later.
582  *    - \e tiIONoDevice:  Invalid device handle.
583  *    - \e tiError:       Other errors.
584  */
585 /*****************************************************************************/
586 GLOBAL bit32  satReadCapacity10(
587                    tiRoot_t                  *tiRoot,
588                    tiIORequest_t             *tiIORequest,
589                    tiDeviceHandle_t          *tiDeviceHandle,
590                    tiScsiInitiatorRequest_t *tiScsiRequest,
591                    satIOContext_t            *satIOContext);
592 
593 /*****************************************************************************/
594 /*! \brief SAT implementation for SCSI satReadCapacity16.
595  *
596  *  SAT implementation for SCSI satReadCapacity16.
597  *
598  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
599  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
600  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
601  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
602  *  \param   satIOContext_t:   Pointer to the SAT IO Context
603  *
604  *  \return If command is started successfully
605  *    - \e tiSuccess:     I/O request successfully initiated.
606  *    - \e tiBusy:        No resources available, try again later.
607  *    - \e tiIONoDevice:  Invalid device handle.
608  *    - \e tiError:       Other errors.
609  */
610 /*****************************************************************************/
611 GLOBAL bit32  satReadCapacity16(
612                    tiRoot_t                  *tiRoot,
613                    tiIORequest_t             *tiIORequest,
614                    tiDeviceHandle_t          *tiDeviceHandle,
615                    tiScsiInitiatorRequest_t *tiScsiRequest,
616                    satIOContext_t            *satIOContext);
617 
618 
619 GLOBAL bit32  satInquiry(
620                    tiRoot_t                  *tiRoot,
621                    tiIORequest_t             *tiIORequest,
622                    tiDeviceHandle_t          *tiDeviceHandle,
623                    tiScsiInitiatorRequest_t *tiScsiRequest,
624                    satIOContext_t            *satIOContext);
625 
626 /*****************************************************************************/
627 /*! \brief SAT implementation for SCSI REQUEST SENSE.
628  *
629  *  SAT implementation for SCSI REQUEST SENSE.
630  *
631  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
632  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
633  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
634  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
635  *  \param   satIOContext_t:   Pointer to the SAT IO Context
636  *
637  *  \return If command is started successfully
638  *    - \e tiSuccess:     I/O request successfully initiated.
639  *    - \e tiBusy:        No resources available, try again later.
640  *    - \e tiIONoDevice:  Invalid device handle.
641  *    - \e tiError:       Other errors.
642  */
643 /*****************************************************************************/
644 GLOBAL bit32  satRequestSense(
645                    tiRoot_t                  *tiRoot,
646                    tiIORequest_t             *tiIORequest,
647                    tiDeviceHandle_t          *tiDeviceHandle,
648                    tiScsiInitiatorRequest_t *tiScsiRequest,
649                    satIOContext_t            *satIOContext);
650 /*****************************************************************************/
651 /*! \brief SAT implementation for SCSI REQUEST SENSE.
652  *
653  *  SAT implementation for SCSI REQUEST SENSE.
654  *  Sub function of satRequestSense
655  *
656  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
657  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
658  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
659  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
660  *  \param   satIOContext_t:   Pointer to the SAT IO Context
661  *
662  *  \return If command is started successfully
663  *    - \e tiSuccess:     I/O request successfully initiated.
664  *    - \e tiBusy:        No resources available, try again later.
665  *    - \e tiIONoDevice:  Invalid device handle.
666  *    - \e tiError:       Other errors.
667  */
668 /*****************************************************************************/
669 GLOBAL bit32  satRequestSense_1(
670                    tiRoot_t                  *tiRoot,
671                    tiIORequest_t             *tiIORequest,
672                    tiDeviceHandle_t          *tiDeviceHandle,
673                    tiScsiInitiatorRequest_t *tiScsiRequest,
674                    satIOContext_t            *satIOContext);
675 
676 /*****************************************************************************/
677 /*! \brief SAT implementation for SCSI satFormatUnit.
678  *
679  *  SAT implementation for SCSI satFormatUnit.
680  *
681  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
682  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
683  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
684  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
685  *  \param   satIOContext_t:   Pointer to the SAT IO Context
686  *
687  *  \return If command is started successfully
688  *    - \e tiSuccess:     I/O request successfully initiated.
689  *    - \e tiBusy:        No resources available, try again later.
690  *    - \e tiIONoDevice:  Invalid device handle.
691  *    - \e tiError:       Other errors.
692  */
693 /*****************************************************************************/
694 GLOBAL bit32  satFormatUnit(
695                    tiRoot_t                  *tiRoot,
696                    tiIORequest_t             *tiIORequest,
697                    tiDeviceHandle_t          *tiDeviceHandle,
698                    tiScsiInitiatorRequest_t *tiScsiRequest,
699                    satIOContext_t            *satIOContext);
700 
701 /*****************************************************************************/
702 /*! \brief SAT implementation for SCSI satSendDiagnostic.
703  *
704  *  SAT implementation for SCSI satSendDiagnostic.
705  *
706  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
707  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
708  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
709  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
710  *  \param   satIOContext_t:   Pointer to the SAT IO Context
711  *
712  *  \return If command is started successfully
713  *    - \e tiSuccess:     I/O request successfully initiated.
714  *    - \e tiBusy:        No resources available, try again later.
715  *    - \e tiIONoDevice:  Invalid device handle.
716  *    - \e tiError:       Other errors.
717  */
718 /*****************************************************************************/
719 GLOBAL bit32  satSendDiagnostic(
720                    tiRoot_t                  *tiRoot,
721                    tiIORequest_t             *tiIORequest,
722                    tiDeviceHandle_t          *tiDeviceHandle,
723                    tiScsiInitiatorRequest_t *tiScsiRequest,
724                    satIOContext_t            *satIOContext);
725 
726 /*****************************************************************************/
727 /*! \brief SAT implementation for SCSI satSendDiagnostic_1.
728  *
729  *  SAT implementation for SCSI satSendDiagnostic_1.
730  *  Sub function of satSendDiagnostic.
731  *
732  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
733  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
734  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
735  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
736  *  \param   satIOContext_t:   Pointer to the SAT IO Context
737  *
738  *  \return If command is started successfully
739  *    - \e tiSuccess:     I/O request successfully initiated.
740  *    - \e tiBusy:        No resources available, try again later.
741  *    - \e tiIONoDevice:  Invalid device handle.
742  *    - \e tiError:       Other errors.
743  */
744 /*****************************************************************************/
745 GLOBAL bit32  satSendDiagnostic_1(
746                    tiRoot_t                  *tiRoot,
747                    tiIORequest_t             *tiIORequest,
748                    tiDeviceHandle_t          *tiDeviceHandle,
749                    tiScsiInitiatorRequest_t *tiScsiRequest,
750                    satIOContext_t            *satIOContext);
751 /*****************************************************************************/
752 /*! \brief SAT implementation for SCSI satSendDiagnostic_2.
753  *
754  *  SAT implementation for SCSI satSendDiagnostic_2.
755  *  Sub function of satSendDiagnostic.
756  *
757  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
758  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
759  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
760  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
761  *  \param   satIOContext_t:   Pointer to the SAT IO Context
762  *
763  *  \return If command is started successfully
764  *    - \e tiSuccess:     I/O request successfully initiated.
765  *    - \e tiBusy:        No resources available, try again later.
766  *    - \e tiIONoDevice:  Invalid device handle.
767  *    - \e tiError:       Other errors.
768  */
769 /*****************************************************************************/
770 GLOBAL bit32  satSendDiagnostic_2(
771                    tiRoot_t                  *tiRoot,
772                    tiIORequest_t             *tiIORequest,
773                    tiDeviceHandle_t          *tiDeviceHandle,
774                    tiScsiInitiatorRequest_t *tiScsiRequest,
775                    satIOContext_t            *satIOContext);
776 
777 /*****************************************************************************/
778 /*! \brief SAT implementation for SCSI satStartStopUnit.
779  *
780  *  SAT implementation for SCSI satStartStopUnit.
781  *
782  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
783  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
784  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
785  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
786  *  \param   satIOContext_t:   Pointer to the SAT IO Context
787  *
788  *  \return If command is started successfully
789  *    - \e tiSuccess:     I/O request successfully initiated.
790  *    - \e tiBusy:        No resources available, try again later.
791  *    - \e tiIONoDevice:  Invalid device handle.
792  *    - \e tiError:       Other errors.
793  */
794 /*****************************************************************************/
795 GLOBAL bit32  satStartStopUnit(
796                    tiRoot_t                  *tiRoot,
797                    tiIORequest_t             *tiIORequest,
798                    tiDeviceHandle_t          *tiDeviceHandle,
799                    tiScsiInitiatorRequest_t *tiScsiRequest,
800                    satIOContext_t            *satIOContext);
801 /*****************************************************************************/
802 /*! \brief SAT implementation for SCSI satStartStopUnit_1.
803  *
804  *  SAT implementation for SCSI satStartStopUnit_1.
805  *  Sub function of satStartStopUnit
806  *
807  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
808  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
809  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
810  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
811  *  \param   satIOContext_t:   Pointer to the SAT IO Context
812  *
813  *  \return If command is started successfully
814  *    - \e tiSuccess:     I/O request successfully initiated.
815  *    - \e tiBusy:        No resources available, try again later.
816  *    - \e tiIONoDevice:  Invalid device handle.
817  *    - \e tiError:       Other errors.
818  */
819 /*****************************************************************************/
820 GLOBAL bit32  satStartStopUnit_1(
821                    tiRoot_t                  *tiRoot,
822                    tiIORequest_t             *tiIORequest,
823                    tiDeviceHandle_t          *tiDeviceHandle,
824                    tiScsiInitiatorRequest_t *tiScsiRequest,
825                    satIOContext_t            *satIOContext);
826 
827 /*****************************************************************************/
828 /*! \brief SAT implementation for SCSI satRead10_1.
829  *
830  *  SAT implementation for SCSI satRead10_1
831  *  Sub function of satRead10
832  *
833  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
834  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
835  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
836  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
837  *  \param   satIOContext_t:   Pointer to the SAT IO Context
838  *
839  *  \return If command is started successfully
840  *    - \e tiSuccess:     I/O request successfully initiated.
841  *    - \e tiBusy:        No resources available, try again later.
842  *    - \e tiIONoDevice:  Invalid device handle.
843  *    - \e tiError:       Other errors.
844  */
845 /*****************************************************************************/
846 GLOBAL bit32  satRead_1(
847                          tiRoot_t                  *tiRoot,
848                          tiIORequest_t             *tiIORequest,
849                          tiDeviceHandle_t          *tiDeviceHandle,
850                          tiScsiInitiatorRequest_t *tiScsiRequest,
851                          satIOContext_t            *satIOContext);
852 GLOBAL bit32  satRead10_2(
853                          tiRoot_t                  *tiRoot,
854                          tiIORequest_t             *tiIORequest,
855                          tiDeviceHandle_t          *tiDeviceHandle,
856                          tiScsiInitiatorRequest_t *tiScsiRequest,
857                          satIOContext_t            *satIOContext);
858 
859 /*****************************************************************************/
860 /*! \brief SAT implementation for SCSI satWriteSame10.
861  *
862  *  SAT implementation for SCSI satWriteSame10.
863  *
864  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
865  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
866  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
867  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
868  *  \param   satIOContext_t:   Pointer to the SAT IO Context
869  *
870  *  \return If command is started successfully
871  *    - \e tiSuccess:     I/O request successfully initiated.
872  *    - \e tiBusy:        No resources available, try again later.
873  *    - \e tiIONoDevice:  Invalid device handle.
874  *    - \e tiError:       Other errors.
875  */
876 /*****************************************************************************/
877 GLOBAL bit32  satWriteSame10(
878                    tiRoot_t                  *tiRoot,
879                    tiIORequest_t             *tiIORequest,
880                    tiDeviceHandle_t          *tiDeviceHandle,
881                    tiScsiInitiatorRequest_t *tiScsiRequest,
882                    satIOContext_t            *satIOContext);
883 
884 GLOBAL bit32  satWriteSame10_1(
885                    tiRoot_t                  *tiRoot,
886                    tiIORequest_t             *tiIORequest,
887                    tiDeviceHandle_t          *tiDeviceHandle,
888                    tiScsiInitiatorRequest_t *tiScsiRequest,
889                    satIOContext_t            *satIOContext,
890                    bit32                     lba
891                    );
892 GLOBAL bit32  satWriteSame10_2(
893                    tiRoot_t                  *tiRoot,
894                    tiIORequest_t             *tiIORequest,
895                    tiDeviceHandle_t          *tiDeviceHandle,
896                    tiScsiInitiatorRequest_t *tiScsiRequest,
897                    satIOContext_t            *satIOContext,
898                    bit32                     lba
899                    );
900 GLOBAL bit32  satWriteSame10_3(
901                    tiRoot_t                  *tiRoot,
902                    tiIORequest_t             *tiIORequest,
903                    tiDeviceHandle_t          *tiDeviceHandle,
904                    tiScsiInitiatorRequest_t *tiScsiRequest,
905                    satIOContext_t            *satIOContext,
906                    bit32                     lba
907                    );
908 /*****************************************************************************/
909 /*! \brief SAT implementation for SCSI satWriteSame16.
910  *
911  *  SAT implementation for SCSI satWriteSame16.
912  *
913  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
914  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
915  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
916  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
917  *  \param   satIOContext_t:   Pointer to the SAT IO Context
918  *
919  *  \return If command is started successfully
920  *    - \e tiSuccess:     I/O request successfully initiated.
921  *    - \e tiBusy:        No resources available, try again later.
922  *    - \e tiIONoDevice:  Invalid device handle.
923  *    - \e tiError:       Other errors.
924  */
925 /*****************************************************************************/
926 GLOBAL bit32  satWriteSame16(
927                    tiRoot_t                  *tiRoot,
928                    tiIORequest_t             *tiIORequest,
929                    tiDeviceHandle_t          *tiDeviceHandle,
930                    tiScsiInitiatorRequest_t *tiScsiRequest,
931                    satIOContext_t            *satIOContext);
932 
933 /*****************************************************************************/
934 /*! \brief SAT implementation for SCSI satLogSenseAllocate.
935  *
936  *  Part of SAT implementation for SCSI satLogSense.
937  *
938  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
939  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
940  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
941  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
942  *  \param   satIOContext_t:   Pointer to the SAT IO Context
943  *  \param   payloadSize:      size of payload to be allocated.
944  *  \param   flag:             flag value
945  *
946  *  \return If command is started successfully
947  *    - \e tiSuccess:     I/O request successfully initiated.
948  *    - \e tiBusy:        No resources available, try again later.
949  *    - \e tiIONoDevice:  Invalid device handle.
950  *    - \e tiError:       Other errors.
951  *  \note
952  *    - flag values: LOG_SENSE_0, LOG_SENSE_1, LOG_SENSE_2
953  */
954 /*****************************************************************************/
955 GLOBAL bit32  satLogSenseAllocate(
956                    tiRoot_t                  *tiRoot,
957                    tiIORequest_t             *tiIORequest,
958                    tiDeviceHandle_t          *tiDeviceHandle,
959                    tiScsiInitiatorRequest_t *tiScsiRequest,
960                    satIOContext_t            *satIOContext,
961                    bit32                      payloadSize,
962                    bit32                      flag
963                    );
964 
965 /*****************************************************************************/
966 /*! \brief SAT implementation for SCSI satSMARTEnable.
967  *
968  *  Part of SAT implementation for SCSI satLogSense.
969  *
970  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
971  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
972  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
973  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
974  *  \param   satIOContext_t:   Pointer to the SAT IO Context
975  *
976  *  \return If command is started successfully
977  *    - \e tiSuccess:     I/O request successfully initiated.
978  *    - \e tiBusy:        No resources available, try again later.
979  *    - \e tiIONoDevice:  Invalid device handle.
980  *    - \e tiError:       Other errors.
981  */
982 /*****************************************************************************/
983 GLOBAL bit32  satSMARTEnable(
984                    tiRoot_t                  *tiRoot,
985                    tiIORequest_t             *tiIORequest,
986                    tiDeviceHandle_t          *tiDeviceHandle,
987                    tiScsiInitiatorRequest_t *tiScsiRequest,
988                    satIOContext_t            *satIOContext);
989 
990 /*****************************************************************************/
991 /*! \brief SAT implementation for SCSI satLogSense_1.
992  *
993  *  Part of SAT implementation for SCSI satLogSense.
994  *
995  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
996  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
997  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
998  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
999  *  \param   satIOContext_t:   Pointer to the SAT IO Context
1000  *
1001  *  \return If command is started successfully
1002  *    - \e tiSuccess:     I/O request successfully initiated.
1003  *    - \e tiBusy:        No resources available, try again later.
1004  *    - \e tiIONoDevice:  Invalid device handle.
1005  *    - \e tiError:       Other errors.
1006  */
1007 /*****************************************************************************/
1008 GLOBAL bit32  satLogSense_1(
1009                    tiRoot_t                  *tiRoot,
1010                    tiIORequest_t             *tiIORequest,
1011                    tiDeviceHandle_t          *tiDeviceHandle,
1012                    tiScsiInitiatorRequest_t *tiScsiRequest,
1013                    satIOContext_t            *satIOContext);
1014 
1015 /*****************************************************************************/
1016 /*! \brief SAT implementation for SCSI satLogSense_2.
1017  *
1018  *  Part of SAT implementation for SCSI satLogSense.
1019  *
1020  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
1021  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
1022  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1023  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
1024  *  \param   satIOContext_t:   Pointer to the SAT IO Context
1025  *
1026  *  \return If command is started successfully
1027  *    - \e tiSuccess:     I/O request successfully initiated.
1028  *    - \e tiBusy:        No resources available, try again later.
1029  *    - \e tiIONoDevice:  Invalid device handle.
1030  *    - \e tiError:       Other errors.
1031  */
1032 /*****************************************************************************/
1033 GLOBAL bit32  satLogSense_2(
1034                    tiRoot_t                  *tiRoot,
1035                    tiIORequest_t             *tiIORequest,
1036                    tiDeviceHandle_t          *tiDeviceHandle,
1037                    tiScsiInitiatorRequest_t *tiScsiRequest,
1038                    satIOContext_t            *satIOContext);
1039 
1040 /*****************************************************************************/
1041 /*! \brief SAT implementation for SCSI satLogSense_3.
1042  *
1043  *  Part of SAT implementation for SCSI satLogSense.
1044  *
1045  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
1046  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
1047  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1048  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
1049  *  \param   satIOContext_t:   Pointer to the SAT IO Context
1050  *
1051  *  \return If command is started successfully
1052  *    - \e tiSuccess:     I/O request successfully initiated.
1053  *    - \e tiBusy:        No resources available, try again later.
1054  *    - \e tiIONoDevice:  Invalid device handle.
1055  *    - \e tiError:       Other errors.
1056  */
1057 /*****************************************************************************/
1058 GLOBAL bit32  satLogSense_3(
1059                    tiRoot_t                  *tiRoot,
1060                    tiIORequest_t             *tiIORequest,
1061                    tiDeviceHandle_t          *tiDeviceHandle,
1062                    tiScsiInitiatorRequest_t *tiScsiRequest,
1063                    satIOContext_t            *satIOContext);
1064 
1065 
1066 /*****************************************************************************/
1067 /*! \brief SAT implementation for SCSI satLogSense.
1068  *
1069  *  SAT implementation for SCSI satLogSense.
1070  *
1071  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
1072  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
1073  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1074  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
1075  *  \param   satIOContext_t:   Pointer to the SAT IO Context
1076  *
1077  *  \return If command is started successfully
1078  *    - \e tiSuccess:     I/O request successfully initiated.
1079  *    - \e tiBusy:        No resources available, try again later.
1080  *    - \e tiIONoDevice:  Invalid device handle.
1081  *    - \e tiError:       Other errors.
1082  */
1083 /*****************************************************************************/
1084 GLOBAL bit32  satLogSense(
1085                    tiRoot_t                  *tiRoot,
1086                    tiIORequest_t             *tiIORequest,
1087                    tiDeviceHandle_t          *tiDeviceHandle,
1088                    tiScsiInitiatorRequest_t *tiScsiRequest,
1089                    satIOContext_t            *satIOContext);
1090 
1091 /*****************************************************************************/
1092 /*! \brief SAT implementation for SCSI satModeSelect6.
1093  *
1094  *  SAT implementation for SCSI satModeSelect6.
1095  *
1096  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
1097  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
1098  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1099  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
1100  *  \param   satIOContext_t:   Pointer to the SAT IO Context
1101  *
1102  *  \return If command is started successfully
1103  *    - \e tiSuccess:     I/O request successfully initiated.
1104  *    - \e tiBusy:        No resources available, try again later.
1105  *    - \e tiIONoDevice:  Invalid device handle.
1106  *    - \e tiError:       Other errors.
1107  */
1108 /*****************************************************************************/
1109 GLOBAL bit32  satModeSelect6(
1110                    tiRoot_t                  *tiRoot,
1111                    tiIORequest_t             *tiIORequest,
1112                    tiDeviceHandle_t          *tiDeviceHandle,
1113                    tiScsiInitiatorRequest_t *tiScsiRequest,
1114                    satIOContext_t            *satIOContext);
1115 GLOBAL bit32  satModeSelect6n10_1(
1116                    tiRoot_t                  *tiRoot,
1117                    tiIORequest_t             *tiIORequest,
1118                    tiDeviceHandle_t          *tiDeviceHandle,
1119                    tiScsiInitiatorRequest_t *tiScsiRequest,
1120                    satIOContext_t            *satIOContext);
1121 
1122 /*****************************************************************************/
1123 /*! \brief SAT implementation for SCSI satModeSelect10.
1124  *
1125  *  SAT implementation for SCSI satModeSelect10.
1126  *
1127  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
1128  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
1129  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1130  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
1131  *  \param   satIOContext_t:   Pointer to the SAT IO Context
1132  *
1133  *  \return If command is started successfully
1134  *    - \e tiSuccess:     I/O request successfully initiated.
1135  *    - \e tiBusy:        No resources available, try again later.
1136  *    - \e tiIONoDevice:  Invalid device handle.
1137  *    - \e tiError:       Other errors.
1138  */
1139 /*****************************************************************************/
1140 GLOBAL bit32  satModeSelect10(
1141                    tiRoot_t                  *tiRoot,
1142                    tiIORequest_t             *tiIORequest,
1143                    tiDeviceHandle_t          *tiDeviceHandle,
1144                    tiScsiInitiatorRequest_t *tiScsiRequest,
1145                    satIOContext_t            *satIOContext);
1146 
1147 /*****************************************************************************/
1148 /*! \brief SAT implementation for SCSI satSynchronizeCache10.
1149  *
1150  *  SAT implementation for SCSI satSynchronizeCache10.
1151  *
1152  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
1153  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
1154  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1155  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
1156  *  \param   satIOContext_t:   Pointer to the SAT IO Context
1157  *
1158  *  \return If command is started successfully
1159  *    - \e tiSuccess:     I/O request successfully initiated.
1160  *    - \e tiBusy:        No resources available, try again later.
1161  *    - \e tiIONoDevice:  Invalid device handle.
1162  *    - \e tiError:       Other errors.
1163  */
1164 /*****************************************************************************/
1165 GLOBAL bit32  satSynchronizeCache10(
1166                    tiRoot_t                  *tiRoot,
1167                    tiIORequest_t             *tiIORequest,
1168                    tiDeviceHandle_t          *tiDeviceHandle,
1169                    tiScsiInitiatorRequest_t *tiScsiRequest,
1170                    satIOContext_t            *satIOContext);
1171 
1172 /*****************************************************************************/
1173 /*! \brief SAT implementation for SCSI satSynchronizeCache16.
1174  *
1175  *  SAT implementation for SCSI satSynchronizeCache16.
1176  *
1177  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
1178  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
1179  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1180  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
1181  *  \param   satIOContext_t:   Pointer to the SAT IO Context
1182  *
1183  *  \return If command is started successfully
1184  *    - \e tiSuccess:     I/O request successfully initiated.
1185  *    - \e tiBusy:        No resources available, try again later.
1186  *    - \e tiIONoDevice:  Invalid device handle.
1187  *    - \e tiError:       Other errors.
1188  */
1189 /*****************************************************************************/
1190 GLOBAL bit32  satSynchronizeCache16(
1191                    tiRoot_t                  *tiRoot,
1192                    tiIORequest_t             *tiIORequest,
1193                    tiDeviceHandle_t          *tiDeviceHandle,
1194                    tiScsiInitiatorRequest_t *tiScsiRequest,
1195                    satIOContext_t            *satIOContext);
1196 
1197 /*****************************************************************************/
1198 /*! \brief SAT implementation for SCSI satWriteAndVerify10.
1199  *
1200  *  SAT implementation for SCSI satWriteAndVerify10.
1201  *
1202  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
1203  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
1204  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1205  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
1206  *  \param   satIOContext_t:   Pointer to the SAT IO Context
1207  *
1208  *  \return If command is started successfully
1209  *    - \e tiSuccess:     I/O request successfully initiated.
1210  *    - \e tiBusy:        No resources available, try again later.
1211  *    - \e tiIONoDevice:  Invalid device handle.
1212  *    - \e tiError:       Other errors.
1213  */
1214 /*****************************************************************************/
1215 GLOBAL bit32  satWriteAndVerify10(
1216                    tiRoot_t                  *tiRoot,
1217                    tiIORequest_t             *tiIORequest,
1218                    tiDeviceHandle_t          *tiDeviceHandle,
1219                    tiScsiInitiatorRequest_t *tiScsiRequest,
1220                    satIOContext_t            *satIOContext);
1221 
1222 #ifdef REMOVED
1223 /*****************************************************************************/
1224 /*! \brief SAT implementation for SCSI satWriteAndVerify10_1.
1225  *
1226  *  SAT implementation for SCSI satWriteAndVerify10_1.
1227  *  Sub function of satWriteAndVerify10
1228  *
1229  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
1230  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
1231  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1232  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
1233  *  \param   satIOContext_t:   Pointer to the SAT IO Context
1234  *
1235  *  \return If command is started successfully
1236  *    - \e tiSuccess:     I/O request successfully initiated.
1237  *    - \e tiBusy:        No resources available, try again later.
1238  *    - \e tiIONoDevice:  Invalid device handle.
1239  *    - \e tiError:       Other errors.
1240  */
1241 /*****************************************************************************/
1242 GLOBAL bit32  satWriteAndVerify10_1(
1243                    tiRoot_t                  *tiRoot,
1244                    tiIORequest_t             *tiIORequest,
1245                    tiDeviceHandle_t          *tiDeviceHandle,
1246                    tiScsiInitiatorRequest_t *tiScsiRequest,
1247                    satIOContext_t            *satIOContext);
1248 #endif
1249 
1250 /*****************************************************************************/
1251 /*! \brief SAT implementation for SCSI satWriteAndVerify12.
1252  *
1253  *  SAT implementation for SCSI satWriteAndVerify12.
1254  *
1255  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
1256  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
1257  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1258  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
1259  *  \param   satIOContext_t:   Pointer to the SAT IO Context
1260  *
1261  *  \return If command is started successfully
1262  *    - \e tiSuccess:     I/O request successfully initiated.
1263  *    - \e tiBusy:        No resources available, try again later.
1264  *    - \e tiIONoDevice:  Invalid device handle.
1265  *    - \e tiError:       Other errors.
1266  */
1267 /*****************************************************************************/
1268 GLOBAL bit32  satWriteAndVerify12(
1269                    tiRoot_t                  *tiRoot,
1270                    tiIORequest_t             *tiIORequest,
1271                    tiDeviceHandle_t          *tiDeviceHandle,
1272                    tiScsiInitiatorRequest_t *tiScsiRequest,
1273                    satIOContext_t            *satIOContext);
1274 
1275 GLOBAL bit32  satNonChainedWriteNVerify_Verify(
1276                    tiRoot_t                  *tiRoot,
1277                    tiIORequest_t             *tiIORequest,
1278                    tiDeviceHandle_t          *tiDeviceHandle,
1279                    tiScsiInitiatorRequest_t *tiScsiRequest,
1280                    satIOContext_t            *satIOContext);
1281 
1282 GLOBAL bit32  satChainedWriteNVerify_Write(
1283                    tiRoot_t                  *tiRoot,
1284                    tiIORequest_t             *tiIORequest,
1285                    tiDeviceHandle_t          *tiDeviceHandle,
1286                    tiScsiInitiatorRequest_t *tiScsiRequest,
1287                    satIOContext_t            *satIOContext);
1288 
1289 GLOBAL bit32  satChainedWriteNVerify_Verify(
1290                    tiRoot_t                  *tiRoot,
1291                    tiIORequest_t             *tiIORequest,
1292                    tiDeviceHandle_t          *tiDeviceHandle,
1293                    tiScsiInitiatorRequest_t *tiScsiRequest,
1294                    satIOContext_t            *satIOContext);
1295 
1296 GLOBAL bit32  satChainedWriteNVerify_Start_Verify(
1297                    tiRoot_t                  *tiRoot,
1298                    tiIORequest_t             *tiIORequest,
1299                    tiDeviceHandle_t          *tiDeviceHandle,
1300                    tiScsiInitiatorRequest_t *tiScsiRequest,
1301                    satIOContext_t            *satIOContext);
1302 
1303 
1304 /*****************************************************************************/
1305 /*! \brief SAT implementation for SCSI satWriteAndVerify16.
1306  *
1307  *  SAT implementation for SCSI satWriteAndVerify16.
1308  *
1309  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
1310  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
1311  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1312  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
1313  *  \param   satIOContext_t:   Pointer to the SAT IO Context
1314  *
1315  *  \return If command is started successfully
1316  *    - \e tiSuccess:     I/O request successfully initiated.
1317  *    - \e tiBusy:        No resources available, try again later.
1318  *    - \e tiIONoDevice:  Invalid device handle.
1319  *    - \e tiError:       Other errors.
1320  */
1321 /*****************************************************************************/
1322 GLOBAL bit32  satWriteAndVerify16(
1323                    tiRoot_t                  *tiRoot,
1324                    tiIORequest_t             *tiIORequest,
1325                    tiDeviceHandle_t          *tiDeviceHandle,
1326                    tiScsiInitiatorRequest_t *tiScsiRequest,
1327                    satIOContext_t            *satIOContext);
1328 
1329 GLOBAL bit32  satChainedVerify16(
1330                    tiRoot_t                  *tiRoot,
1331                    tiIORequest_t             *tiIORequest,
1332                    tiDeviceHandle_t          *tiDeviceHandle,
1333                    tiScsiInitiatorRequest_t *tiScsiRequest,
1334                    satIOContext_t            *satIOContext);
1335 
1336 /*****************************************************************************/
1337 /*! \brief SAT implementation for SCSI TEST UNIT READY.
1338  *
1339  *  SAT implementation for SCSI TUR and send FIS request to LL layer.
1340  *
1341  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
1342  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
1343  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1344  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
1345  *  \param   satIOContext_t:   Pointer to the SAT IO Context
1346  *
1347  *  \return If command is started successfully
1348  *    - \e tiSuccess:     I/O request successfully initiated.
1349  *    - \e tiBusy:        No resources available, try again later.
1350  *    - \e tiIONoDevice:  Invalid device handle.
1351  *    - \e tiError:       Other errors.
1352  */
1353 /*****************************************************************************/
1354 GLOBAL bit32  satTestUnitReady(
1355                    tiRoot_t                  *tiRoot,
1356                    tiIORequest_t             *tiIORequest,
1357                    tiDeviceHandle_t          *tiDeviceHandle,
1358                    tiScsiInitiatorRequest_t *tiScsiRequest,
1359                    satIOContext_t            *satIOContext);
1360 
1361 /*****************************************************************************/
1362 /*! \brief SAT implementation for SCSI MODE SENSE (6).
1363  *
1364  *  SAT implementation for SCSI MODE SENSE (6).
1365  *
1366  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
1367  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
1368  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1369  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
1370  *  \param   satIOContext_t:   Pointer to the SAT IO Context
1371  *
1372  *  \return If command is started successfully
1373  *    - \e tiSuccess:     I/O request successfully initiated.
1374  *    - \e tiBusy:        No resources available, try again later.
1375  *    - \e tiIONoDevice:  Invalid device handle.
1376  *    - \e tiError:       Other errors.
1377  */
1378 /*****************************************************************************/
1379 GLOBAL bit32  satModeSense6(
1380                    tiRoot_t                  *tiRoot,
1381                    tiIORequest_t             *tiIORequest,
1382                    tiDeviceHandle_t          *tiDeviceHandle,
1383                    tiScsiInitiatorRequest_t *tiScsiRequest,
1384                    satIOContext_t            *satIOContext);
1385 
1386 
1387 /*****************************************************************************/
1388 /*! \brief SAT implementation for SCSI MODE SENSE (10).
1389  *
1390  *  SAT implementation for SCSI MODE SENSE (10).
1391  *
1392  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
1393  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
1394  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1395  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
1396  *  \param   satIOContext_t:   Pointer to the SAT IO Context
1397  *
1398  *  \return If command is started successfully
1399  *    - \e tiSuccess:     I/O request successfully initiated.
1400  *    - \e tiBusy:        No resources available, try again later.
1401  *    - \e tiIONoDevice:  Invalid device handle.
1402  *    - \e tiError:       Other errors.
1403  */
1404 /*****************************************************************************/
1405 GLOBAL bit32  satModeSense10(
1406                    tiRoot_t                  *tiRoot,
1407                    tiIORequest_t             *tiIORequest,
1408                    tiDeviceHandle_t          *tiDeviceHandle,
1409                    tiScsiInitiatorRequest_t *tiScsiRequest,
1410                    satIOContext_t            *satIOContext);
1411 
1412 
1413 /*****************************************************************************/
1414 /*! \brief SAT implementation for SCSI VERIFY (10).
1415  *
1416  *  SAT implementation for SCSI VERIFY (10).
1417  *
1418  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
1419  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
1420  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1421  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
1422  *  \param   satIOContext_t:   Pointer to the SAT IO Context
1423  *
1424  *  \return If command is started successfully
1425  *    - \e tiSuccess:     I/O request successfully initiated.
1426  *    - \e tiBusy:        No resources available, try again later.
1427  *    - \e tiIONoDevice:  Invalid device handle.
1428  *    - \e tiError:       Other errors.
1429  */
1430 /*****************************************************************************/
1431 GLOBAL bit32  satVerify10(
1432                    tiRoot_t                  *tiRoot,
1433                    tiIORequest_t             *tiIORequest,
1434                    tiDeviceHandle_t          *tiDeviceHandle,
1435                    tiScsiInitiatorRequest_t *tiScsiRequest,
1436                    satIOContext_t            *satIOContext);
1437 
1438 GLOBAL bit32  satChainedVerify(
1439                    tiRoot_t                  *tiRoot,
1440                    tiIORequest_t             *tiIORequest,
1441                    tiDeviceHandle_t          *tiDeviceHandle,
1442                    tiScsiInitiatorRequest_t *tiScsiRequest,
1443                    satIOContext_t            *satIOContext);
1444 
1445 /*****************************************************************************/
1446 /*! \brief SAT implementation for SCSI VERIFY (12).
1447  *
1448  *  SAT implementation for SCSI VERIFY (12).
1449  *
1450  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
1451  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
1452  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1453  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
1454  *  \param   satIOContext_t:   Pointer to the SAT IO Context
1455  *
1456  *  \return If command is started successfully
1457  *    - \e tiSuccess:     I/O request successfully initiated.
1458  *    - \e tiBusy:        No resources available, try again later.
1459  *    - \e tiIONoDevice:  Invalid device handle.
1460  *    - \e tiError:       Other errors.
1461  */
1462 /*****************************************************************************/
1463 GLOBAL bit32  satVerify12(
1464                    tiRoot_t                  *tiRoot,
1465                    tiIORequest_t             *tiIORequest,
1466                    tiDeviceHandle_t          *tiDeviceHandle,
1467                    tiScsiInitiatorRequest_t *tiScsiRequest,
1468                    satIOContext_t            *satIOContext);
1469 /*****************************************************************************/
1470 /*! \brief SAT implementation for SCSI VERIFY (16).
1471  *
1472  *  SAT implementation for SCSI VERIFY (16).
1473  *
1474  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
1475  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
1476  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1477  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
1478  *  \param   satIOContext_t:   Pointer to the SAT IO Context
1479  *
1480  *  \return If command is started successfully
1481  *    - \e tiSuccess:     I/O request successfully initiated.
1482  *    - \e tiBusy:        No resources available, try again later.
1483  *    - \e tiIONoDevice:  Invalid device handle.
1484  *    - \e tiError:       Other errors.
1485  */
1486 /*****************************************************************************/
1487 GLOBAL bit32  satVerify16(
1488                    tiRoot_t                  *tiRoot,
1489                    tiIORequest_t             *tiIORequest,
1490                    tiDeviceHandle_t          *tiDeviceHandle,
1491                    tiScsiInitiatorRequest_t *tiScsiRequest,
1492                    satIOContext_t            *satIOContext);
1493 /*****************************************************************************/
1494 /*! \brief SAT implementation for SCSI satTestUnitReady_1.
1495  *
1496  *  SAT implementation for SCSI satTestUnitReady_1
1497  *  Sub function of satTestUnitReady
1498  *
1499  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
1500  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
1501  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1502  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
1503  *  \param   satIOContext_t:   Pointer to the SAT IO Context
1504  *
1505  *  \return If command is started successfully
1506  *    - \e tiSuccess:     I/O request successfully initiated.
1507  *    - \e tiBusy:        No resources available, try again later.
1508  *    - \e tiIONoDevice:  Invalid device handle.
1509  *    - \e tiError:       Other errors.
1510  */
1511 /*****************************************************************************/
1512 GLOBAL bit32  satTestUnitReady_1(
1513                          tiRoot_t                  *tiRoot,
1514                          tiIORequest_t             *tiIORequest,
1515                          tiDeviceHandle_t          *tiDeviceHandle,
1516                          tiScsiInitiatorRequest_t *tiScsiRequest,
1517                          satIOContext_t            *satIOContext);
1518 
1519 /*****************************************************************************/
1520 /*! \brief SAT implementation for SCSI STANDARD INQUIRY.
1521  *
1522  *  SAT implementation for SCSI STANDARD INQUIRY.
1523  *
1524  *  \param   pInquiry:         Pointer to Inquiry Data buffer.
1525  *  \param   pSATAIdData:      Pointer to ATA IDENTIFY DEVICE data.
1526  *
1527  *  \return None.
1528  */
1529 /*****************************************************************************/
1530 GLOBAL void  satInquiryStandard(
1531                     bit8                    *pInquiry,
1532                     agsaSATAIdentifyData_t  *pSATAIdData,
1533                     tiIniScsiCmnd_t         *scsiCmnd
1534                     );
1535 
1536 
1537 /*****************************************************************************/
1538 /*! \brief SAT implementation for SCSI INQUIRY page 0.
1539  *
1540  *  SAT implementation for SCSI INQUIRY page 0.
1541  *
1542  *  \param   pInquiry:         Pointer to Inquiry Data buffer.
1543  *  \param   pSATAIdData:      Pointer to ATA IDENTIFY DEVICE data.
1544  *
1545  *  \return None.
1546  */
1547 /*****************************************************************************/
1548 GLOBAL void  satInquiryPage0(
1549                     bit8                    *pInquiry,
1550                     agsaSATAIdentifyData_t  *pSATAIdData);
1551 
1552 
1553 /*****************************************************************************/
1554 /*! \brief SAT implementation for SCSI INQUIRY page 83.
1555  *
1556  *  SAT implementation for SCSI INQUIRY page 83.
1557  *
1558  *  \param   pInquiry:         Pointer to Inquiry Data buffer.
1559  *  \param   pSATAIdData:      Pointer to ATA IDENTIFY DEVICE data.
1560  *  \param   pSatDevData       Pointer to internal device data structure
1561  *
1562  *  \return None.
1563  */
1564 /*****************************************************************************/
1565 GLOBAL void  satInquiryPage83(
1566                     bit8                    *pInquiry,
1567                     agsaSATAIdentifyData_t  *pSATAIdData,
1568                     satDeviceData_t         *pSatDevData);
1569 
1570 /*****************************************************************************/
1571 /*! \brief SAT implementation for SCSI INQUIRY page 89.
1572  *
1573  *  SAT implementation for SCSI INQUIRY page 89.
1574  *
1575  *  \param   pInquiry:         Pointer to Inquiry Data buffer.
1576  *  \param   pSATAIdData:      Pointer to ATA IDENTIFY DEVICE data.
1577  *  \param   pSatDevData       Pointer to internal device data structure
1578  *
1579  *  \return None.
1580  */
1581 /*****************************************************************************/
1582 GLOBAL void  satInquiryPage89(
1583                     bit8                    *pInquiry,
1584                     agsaSATAIdentifyData_t  *pSATAIdData,
1585                     satDeviceData_t         *pSatDevData);
1586 
1587 /*****************************************************************************/
1588 /*! \brief SAT implementation for SCSI INQUIRY page 80.
1589  *
1590  *  SAT implementation for SCSI INQUIRY page 80.
1591  *
1592  *  \param   pInquiry:         Pointer to Inquiry Data buffer.
1593  *  \param   pSATAIdData:      Pointer to ATA IDENTIFY DEVICE data.
1594  *
1595  *  \return None.
1596  */
1597 /*****************************************************************************/
1598 GLOBAL void  satInquiryPage80(
1599                     bit8                    *pInquiry,
1600                     agsaSATAIdentifyData_t  *pSATAIdData);
1601 
1602 
1603 /*****************************************************************************
1604  *! \brief  sataLLIOStart
1605  *
1606  *   This routine is called to initiate a new SATA request to LL layer.
1607  *   This function implements/encapsulates HW and LL API dependency.
1608  *
1609  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
1610  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
1611  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
1612  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
1613  *  \param   satIOContext_t:   Pointer to the SAT IO Context
1614  *
1615  *  \return:
1616  *
1617  *  tiSuccess:     I/O request successfully initiated.
1618  *  tiBusy:        No resources available, try again later.
1619  *  tiIONoDevice:  Invalid device handle.
1620  *  tiError:       Other errors that prevent the I/O request to be started.
1621  *
1622  *
1623  *****************************************************************************/
1624 
1625 GLOBAL bit32  sataLLIOStart (
1626                    tiRoot_t                  *tiRoot,
1627                    tiIORequest_t             *tiIORequest,
1628                    tiDeviceHandle_t          *tiDeviceHandle,
1629                    tiScsiInitiatorRequest_t *tiScsiRequest,
1630                    satIOContext_t            *satIOContext
1631                   );
1632 
1633 /*****************************************************************************
1634 *! \brief itdsataIOPrepareSGL
1635 *
1636 *  This function is called to prepare and translate the TISA SGL information
1637 *  to the SAS/SATA LL layer specific SGL.
1638 *
1639 *  \param    tiRoot:         Pointer to initiator driver/port instance.
1640 *  \param    IORequestBody:  TD layer request body for the I/O.
1641 *  \param    tiSgl1:         First TISA SGL info.
1642 *  \param    sglVirtualAddr: The virtual address of the first element in
1643 *                            tiSgl1 when tiSgl1 is used with the type tiSglList.
1644 *
1645 *  \return:
1646 *
1647 *  tiSuccess:     SGL initialized successfully.
1648 *  tiError:       Failed to initialize SGL.
1649 *
1650 *
1651 *****************************************************************************/
1652 osGLOBAL bit32 itdsataIOPrepareSGL(
1653                   tiRoot_t                 *tiRoot,
1654                   tdIORequestBody_t        *tdIORequestBody,
1655                   tiSgl_t                  *tiSgl1,
1656                   void                     *sglVirtualAddr
1657                   );
1658 
1659 /*****************************************************************************
1660 *! \brief  satNonChainedDataIOCB
1661 *
1662 *   This routine is a callback function called from ossaSATACompleted().
1663 *   This CB routine deals with normal non-chained data I/O SATA request.
1664 *
1665 *  \param   agRoot:       Handles for this instance of SAS/SATA hardware
1666 *  \param   agIORequest:  Pointer to the LL I/O request context for this I/O.
1667 *  \param   agIOStatus:   Status of completed I/O.
1668 *  \param   agSATAParm1:  Additional info based on status.
1669 *  \param   agIOInfoLen:  Length in bytes of overrun/underrun residual or FIS
1670 *                         length.
1671 *  \param   ioContext:    Pointer to satIOContext_t.
1672 *
1673 *  \return: none
1674 *
1675 *****************************************************************************/
1676 
1677 void satNonChainedDataIOCB(
1678                            agsaRoot_t        *agRoot,
1679                            agsaIORequest_t   *agIORequest,
1680                            bit32             agIOStatus,
1681                            agsaFisHeader_t   *agFirstDword,
1682                            bit32             agIOInfoLen,
1683                            agsaFrameHandle_t agFrameHandle,
1684                            void              *ioContext
1685                            );
1686 void satChainedDataIOCB(
1687                         agsaRoot_t        *agRoot,
1688                         agsaIORequest_t   *agIORequest,
1689                         bit32             agIOStatus,
1690                         agsaFisHeader_t   *agFirstDword,
1691                         bit32             agIOInfoLen,
1692                         agsaFrameHandle_t agFrameHandle,
1693                         void              *ioContext
1694                         );
1695 
1696 void satNonChainedWriteNVerifyCB(
1697                         agsaRoot_t        *agRoot,
1698                         agsaIORequest_t   *agIORequest,
1699                         bit32             agIOStatus,
1700                         agsaFisHeader_t   *agFirstDword,
1701                         bit32             agIOInfoLen,
1702                         agsaFrameHandle_t agFrameHandle,
1703                         void              *ioContext
1704                         );
1705 
1706 void satChainedWriteNVerifyCB(
1707                         agsaRoot_t        *agRoot,
1708                         agsaIORequest_t   *agIORequest,
1709                         bit32             agIOStatus,
1710                         agsaFisHeader_t   *agFirstDword,
1711                         bit32             agIOInfoLen,
1712                         agsaFrameHandle_t agFrameHandle,
1713                         void              *ioContext
1714                         );
1715 
1716 /*****************************************************************************
1717 *! \brief  satNonDataIOCB
1718 *
1719 *   This routine is a callback function called from ossaSATACompleted().
1720 *   This CB routine deals with non-data I/O SATA request.
1721 *
1722 *  \param   agRoot:       Handles for this instance of SAS/SATA hardware
1723 *  \param   agIORequest:  Pointer to the LL I/O request context for this I/O.
1724 *  \param   agIOStatus:   Status of completed I/O.
1725 *  \param   agSATAParm1:  Additional info based on status.
1726 *  \param   agIOInfoLen:  Length in bytes of overrun/underrun residual or FIS
1727 *                         length.
1728 *  \param   ioContext:    Pointer to satIOContext_t.
1729 *
1730 *  \return: none
1731 *
1732 *****************************************************************************/
1733 void satNonDataIOCB(
1734                     agsaRoot_t        *agRoot,
1735                     agsaIORequest_t   *agIORequest,
1736                     bit32             agIOStatus,
1737                     agsaFisHeader_t   *agFirstDword,
1738                     bit32             agIOInfoLen,
1739                     agsaFrameHandle_t agFrameHandle,
1740                     void              *ioContext
1741                     );
1742 
1743 /*****************************************************************************
1744 *! \brief  satSMARTEnableCB
1745 *
1746 *   This routine is a callback function for satSMARTEnable()
1747 *
1748 *  \param   agRoot:       Handles for this instance of SAS/SATA hardware
1749 *  \param   agIORequest:  Pointer to the LL I/O request context for this I/O.
1750 *  \param   agIOStatus:   Status of completed I/O.
1751 *  \param   agSATAParm1:  Additional info based on status.
1752 *  \param   agIOInfoLen:  Length in bytes of overrun/underrun residual or FIS
1753 *                         length.
1754 *  \param   ioContext:    Pointer to satIOContext_t.
1755 *
1756 *  \return: none
1757 *
1758 *****************************************************************************/
1759 void satSMARTEnableCB(
1760                       agsaRoot_t        *agRoot,
1761                       agsaIORequest_t   *agIORequest,
1762                       bit32             agIOStatus,
1763                       agsaFisHeader_t   *agFirstDword,
1764                       bit32             agIOInfoLen,
1765                       agsaFrameHandle_t agFrameHandle,
1766                       void              *ioContext
1767                       ) ;
1768 
1769 /*****************************************************************************
1770 *! \brief  satLogSenseCB
1771 *
1772 *   This routine is a callback function for satLogSense()
1773 *
1774 *  \param   agRoot:       Handles for this instance of SAS/SATA hardware
1775 *  \param   agIORequest:  Pointer to the LL I/O request context for this I/O.
1776 *  \param   agIOStatus:   Status of completed I/O.
1777 *  \param   agSATAParm1:  Additional info based on status.
1778 *  \param   agIOInfoLen:  Length in bytes of overrun/underrun residual or FIS
1779 *                         length.
1780 *  \param   ioContext:    Pointer to satIOContext_t.
1781 *
1782 *  \return: none
1783 *
1784 *****************************************************************************/
1785 void satLogSenseCB(
1786                    agsaRoot_t        *agRoot,
1787                    agsaIORequest_t   *agIORequest,
1788                    bit32             agIOStatus,
1789                    agsaFisHeader_t   *agFirstDword,
1790                    bit32             agIOInfoLen,
1791                    agsaFrameHandle_t agFrameHandle,
1792                    void              *ioCotext
1793                    );
1794 void satModeSelect6n10CB(
1795                          agsaRoot_t        *agRoot,
1796                          agsaIORequest_t   *agIORequest,
1797                          bit32             agIOStatus,
1798                          agsaFisHeader_t   *agFirstDword,
1799                          bit32             agIOInfoLen,
1800                          agsaFrameHandle_t agFrameHandle,
1801                          void              *ioContext
1802                          );
1803 void satSynchronizeCache10n16CB(
1804                                 agsaRoot_t        *agRoot,
1805                                 agsaIORequest_t   *agIORequest,
1806                                 bit32             agIOStatus,
1807                                 agsaFisHeader_t   *agFirstDword,
1808                                 bit32             agIOInfoLen,
1809                                 agsaFrameHandle_t agFrameHandle,
1810                                 void              *ioContext
1811                                 );
1812 #ifdef REMOVED
1813 void satWriteAndVerify10CB(
1814                            agsaRoot_t        *agRoot,
1815                            agsaIORequest_t   *agIORequest,
1816                            bit32             agIOStatus,
1817                            agsaFisHeader_t   *agFirstDword,
1818                            bit32             agIOInfoLen,
1819                            agsaFrameHandle_t agFrameHandle,
1820                            void              *ioContext
1821                            );
1822 #endif
1823 
1824 /*****************************************************************************
1825 *! \brief  satReadLogExtCB
1826 *
1827 *   This routine is a callback function called from ossaSATACompleted().
1828 *   This CB routine deals READ LOG EXT completion.
1829 *
1830 *  \param   agRoot:       Handles for this instance of SAS/SATA hardware
1831 *  \param   agIORequest:  Pointer to the LL I/O request context for this I/O.
1832 *  \param   agIOStatus:   Status of completed I/O.
1833 *  \param   agSATAParm1:  Additional info based on status.
1834 *  \param   agIOInfoLen:  Length in bytes of overrun/underrun residual or FIS
1835 *                         length.
1836 *  \param   ioContext:    Pointer to satIOContext_t.
1837 *
1838 *  \return: none
1839 *
1840 *****************************************************************************/
1841 void satReadLogExtCB(
1842                      agsaRoot_t        *agRoot,
1843                      agsaIORequest_t   *agIORequest,
1844                      bit32             agIOStatus,
1845                      agsaFisHeader_t   *agFirstDword,
1846                      bit32             agIOInfoLen,
1847                      agsaFrameHandle_t agFrameHandle,
1848                      void              *ioContext
1849                      );
1850 void satTestUnitReadyCB(
1851                         agsaRoot_t        *agRoot,
1852                         agsaIORequest_t   *agIORequest,
1853                         bit32             agIOStatus,
1854                         agsaFisHeader_t   *agFirstDword,
1855                         bit32             agIOInfoLen,
1856                         agsaFrameHandle_t agFrameHandle,
1857                         void              *ioContext
1858                         );
1859 void satWriteSame10CB(
1860                       agsaRoot_t        *agRoot,
1861                       agsaIORequest_t   *agIORequest,
1862                       bit32             agIOStatus,
1863                       agsaFisHeader_t   *agFirstDword,
1864                       bit32             agIOInfoLen,
1865                       agsaFrameHandle_t agFrameHandle,
1866                       void              *ioContext
1867                       );
1868 /*****************************************************************************
1869 *! \brief  satSendDiagnosticCB
1870 *
1871 *   This routine is a callback function called from ossaSATACompleted().
1872 *   This CB routine deals with Send Diagnostic completion.
1873 *
1874 *  \param   agRoot:       Handles for this instance of SAS/SATA hardware
1875 *  \param   agIORequest:  Pointer to the LL I/O request context for this I/O.
1876 *  \param   agIOStatus:   Status of completed I/O.
1877 *  \param   agSATAParm1:  Additional info based on status.
1878 *  \param   agIOInfoLen:  Length in bytes of overrun/underrun residual or FIS
1879 *                         length.
1880 *  \param   ioContext:    Pointer to satIOContext_t.
1881 *
1882 *  \return: none
1883 *
1884 *****************************************************************************/
1885 void satSendDiagnosticCB(
1886                          agsaRoot_t        *agRoot,
1887                          agsaIORequest_t   *agIORequest,
1888                          bit32             agIOStatus,
1889                          agsaFisHeader_t   *agFirstDword,
1890                          bit32             agIOInfoLen,
1891                          agsaFrameHandle_t agFrameHandle,
1892                          void              *ioContext
1893                          );
1894 /*****************************************************************************
1895 *! \brief  satRequestSenseCB
1896 *
1897 *   This routine is a callback function called from ossaSATACompleted().
1898 *   This CB routine deals with Request Sense completion.
1899 *
1900 *  \param   agRoot:       Handles for this instance of SAS/SATA hardware
1901 *  \param   agIORequest:  Pointer to the LL I/O request context for this I/O.
1902 *  \param   agIOStatus:   Status of completed I/O.
1903 *  \param   agSATAParm1:  Additional info based on status.
1904 *  \param   agIOInfoLen:  Length in bytes of overrun/underrun residual or FIS
1905 *                         length.
1906 *  \param   ioContext:    Pointer to satIOContext_t.
1907 *
1908 *  \return: none
1909 *
1910 *****************************************************************************/
1911 void satRequestSenseCB(
1912                         agsaRoot_t        *agRoot,
1913                         agsaIORequest_t   *agIORequest,
1914                         bit32             agIOStatus,
1915                         agsaFisHeader_t   *agFirstDword,
1916                         bit32             agIOInfoLen,
1917                         agsaFrameHandle_t agFrameHandle,
1918                         void              *ioContext
1919                         );
1920 /*****************************************************************************
1921 *! \brief  satStartStopUnitCB
1922 *
1923 *   This routine is a callback function called from ossaSATACompleted().
1924 *   This CB routine deals with Send Diagnostic completion.
1925 *
1926 *  \param   agRoot:       Handles for this instance of SAS/SATA hardware
1927 *  \param   agIORequest:  Pointer to the LL I/O request context for this I/O.
1928 *  \param   agIOStatus:   Status of completed I/O.
1929 *  \param   agSATAParm1:  Additional info based on status.
1930 *  \param   agIOInfoLen:  Length in bytes of overrun/underrun residual or FIS
1931 *                         length.
1932 *  \param   ioContext:    Pointer to satIOContext_t.
1933 *
1934 *  \return: none
1935 *
1936 *****************************************************************************/
1937 void satStartStopUnitCB(
1938                         agsaRoot_t        *agRoot,
1939                         agsaIORequest_t   *agIORequest,
1940                         bit32             agIOStatus,
1941                         agsaFisHeader_t   *agFirstDword,
1942                         bit32             agIOInfoLen,
1943                         agsaFrameHandle_t agFrameHandle,
1944                         void              *ioContext
1945                         );
1946 /*****************************************************************************
1947 *! \brief  satVerify10CB
1948 *
1949 *   This routine is a callback function called from ossaSATACompleted().
1950 *   This CB routine deals with Verify(10) completion.
1951 *
1952 *  \param   agRoot:       Handles for this instance of SAS/SATA hardware
1953 *  \param   agIORequest:  Pointer to the LL I/O request context for this I/O.
1954 *  \param   agIOStatus:   Status of completed I/O.
1955 *  \param   agSATAParm1:  Additional info based on status.
1956 *  \param   agIOInfoLen:  Length in bytes of overrun/underrun residual or FIS
1957 *                         length.
1958 *  \param   ioContext:    Pointer to satIOContext_t.
1959 *
1960 *  \return: none
1961 *
1962 *****************************************************************************/
1963 void satVerify10CB(
1964                    agsaRoot_t        *agRoot,
1965                    agsaIORequest_t   *agIORequest,
1966                    bit32             agIOStatus,
1967                    agsaFisHeader_t   *agFirstDword,
1968                    bit32             agIOInfoLen,
1969                    agsaFrameHandle_t agFrameHandle,
1970                    void              *ioContex
1971                    );
1972 
1973 void satNonChainedVerifyCB(
1974                            agsaRoot_t        *agRoot,
1975                            agsaIORequest_t   *agIORequest,
1976                            bit32             agIOStatus,
1977                            agsaFisHeader_t   *agFirstDword,
1978                            bit32             agIOInfoLen,
1979                            agsaFrameHandle_t agFrameHandle,
1980                            void              *ioContext
1981                            );
1982 
1983 void satChainedVerifyCB(
1984                            agsaRoot_t        *agRoot,
1985                            agsaIORequest_t   *agIORequest,
1986                            bit32             agIOStatus,
1987                            agsaFisHeader_t   *agFirstDword,
1988                            bit32             agIOInfoLen,
1989                            agsaFrameHandle_t agFrameHandle,
1990                            void              *ioContext
1991                            );
1992 
1993 /*****************************************************************************
1994  *! \brief  satTmResetLUN
1995  *
1996  *   This routine is called to initiate a TM RESET LUN request to SATL.
1997  *   This routine is independent of HW/LL API.
1998  *
1999  *  \param  tiRoot:           Pointer to TISA initiator driver/port instance.
2000  *  \param  tiDeviceHandle:   Pointer to TISA device handle for this I/O.
2001  *  \param  lun:              Pointer to LUN.
2002  *  \param  currentTaskTag:   Pointer to tag/context for this TM request.
2003  *
2004  *  \return:
2005  *
2006  *  \e tiSuccess:     I/O request successfully initiated.
2007  *  \e tiBusy:        No resources available, try again later.
2008  *  \e tiIONoDevice:  Invalid device handle.
2009  *  \e tiError:       Other errors that prevent the I/O request to be started.
2010  *
2011  *
2012  *****************************************************************************/
2013 osGLOBAL bit32 satTmResetLUN(
2014                             tiRoot_t                  *tiRoot,
2015                             tiIORequest_t             *tiIORequest,
2016                             tiDeviceHandle_t          *tiDeviceHandle,
2017                             tiScsiInitiatorRequest_t *tiScsiRequest,
2018                             satIOContext_t            *satIOContext,
2019                             tiLUN_t                   *lun);
2020 
2021 osGLOBAL bit32 satTmWarmReset(
2022                             tiRoot_t                  *tiRoot,
2023                             tiIORequest_t             *tiIORequest,
2024                             tiDeviceHandle_t          *tiDeviceHandle,
2025                             tiScsiInitiatorRequest_t *tiScsiRequest,
2026                             satIOContext_t            *satIOContext);
2027 
2028 osGLOBAL bit32 satTDInternalTmReset(
2029                             tiRoot_t                  *tiRoot,
2030                             tiIORequest_t             *tiIORequest,
2031                             tiDeviceHandle_t          *tiDeviceHandle,
2032                             tiScsiInitiatorRequest_t *tiScsiRequest,
2033                             satIOContext_t            *satIOContext);
2034 
2035 /*****************************************************************************
2036  *! \brief  satTmAbortTask
2037  *
2038  *   This routine is called to initiate a TM ABORT TASK request to SATL.
2039  *   This routine is independent of HW/LL API.
2040  *
2041  *  \param  tiRoot:           Pointer to TISA initiator driver/port instance.
2042  *  \param  tiDeviceHandle:   Pointer to TISA device handle for this I/O.
2043  *  \param  taskTag:          Pointer to the associated task where the TM
2044  *                            command is to be applied.
2045  *  \param  currentTaskTag:   Pointer to tag/context for this TM request.
2046  *
2047  *  \return:
2048  *
2049  *  \e tiSuccess:     I/O request successfully initiated.
2050  *  \e tiBusy:        No resources available, try again later.
2051  *  \e tiIONoDevice:  Invalid device handle.
2052  *  \e tiError:       Other errors that prevent the I/O request to be started.
2053  *
2054  *
2055  *****************************************************************************/
2056 osGLOBAL bit32 satTmAbortTask(
2057                             tiRoot_t                  *tiRoot,
2058                             tiIORequest_t             *tiIORequest,
2059                             tiDeviceHandle_t          *tiDeviceHandle,
2060                             tiScsiInitiatorRequest_t *tiScsiRequest,
2061                             satIOContext_t            *satIOContext,
2062                             tiIORequest_t             *taskTag);
2063 
2064 /*****************************************************************************
2065  *! \brief  osSatResetCB
2066  *
2067  *   This routine is called to notify the completion of SATA device reset
2068  *   which was initiated previously through the call to sataLLReset().
2069  *   This routine is independent of HW/LL API.
2070  *
2071  *  \param  tiRoot:           Pointer to TISA initiator driver/port instance.
2072  *  \param  tiDeviceHandle:   Pointer to TISA device handle for this I/O.
2073  *  \param  resetStatus:      Reset status either tiSuccess or tiError.
2074  *  \param  respFis:          Pointer to the Register Device-To-Host FIS
2075  *                            received from the device.
2076  *
2077  *  \return: None
2078  *
2079  *****************************************************************************/
2080 
2081 osGLOBAL void osSatResetCB(
2082                 tiRoot_t          *tiRoot,
2083                 tiDeviceHandle_t  *tiDeviceHandle,
2084                 bit32             resetStatus,
2085                 void              *respFis);
2086 
2087 osGLOBAL void
2088 ossaSATADeviceResetCB(
2089                       agsaRoot_t        *agRoot,
2090                       agsaDevHandle_t   *agDevHandle,
2091                       bit32             resetStatus,
2092                       void              *resetparm);
2093 
2094 /*****************************************************************************
2095  *! \brief  osSatIOCompleted
2096  *
2097  *   This routine is a callback for SATA completion that required FIS status
2098  *   translation to SCSI status.
2099  *
2100  *  \param   tiRoot:          Pointer to TISA initiator driver/port instance.
2101  *  \param   tiIORequest:     Pointer to TISA I/O request context for this I/O.
2102  *  \param   respFis:         Pointer to status FIS to read.
2103  *  \param   respFisLen:      Length of response FIS to read.
2104  *  \param   satIOContext:    Pointer to SAT context.
2105  *  \param   interruptContext:      Interrupt context
2106  *
2107  *  \return: None
2108  *
2109  *****************************************************************************/
2110 osGLOBAL void osSatIOCompleted(
2111                           tiRoot_t           *tiRoot,
2112                           tiIORequest_t      *tiIORequest,
2113                           agsaFisHeader_t    *agFirstDword,
2114                           bit32              respFisLen,
2115                           agsaFrameHandle_t agFrameHandle,
2116                           satIOContext_t     *satIOContext,
2117                           bit32              interruptContext);
2118 
2119 
2120 /*****************************************************************************
2121 *! \brief tdssAddSataToSharedcontext
2122 *
2123 *  Purpose:  This function adds a discovered SATA device to a device list of
2124 *            a port context
2125 *
2126 *  \param   tdsaPortContext          Pointer to a port context
2127 *  \param   tdsaDeviceData           Pointer to a device data
2128 *  \param   tsddPortContext_Instance Pointer to the target port context
2129 *  \param   agRoot                   Pointer to the root data structure of
2130 *                                    TD and Lower layer
2131 *  \param   agDevHandle              Pointer to a device handle
2132 *  \param   agSATADeviceInfo         Pointer to SATA device info structure
2133 *
2134 *  \Return: none
2135 *
2136 *****************************************************************************/
2137 osGLOBAL void
2138 tdssRemoveSATAFromSharedcontext(
2139                                tdsaPortContext_t *tdsaPortContext_Ins,
2140                                tdsaDeviceData_t  *tdsaDeviceData_ins,
2141                                agsaRoot_t        *agRoot
2142                                );
2143 
2144 /*****************************************************************************/
2145 /*! \brief  SAT default ATA status and ATA error translation to SCSI.
2146  *
2147  *  SSAT default ATA status and ATA error translation to SCSI.
2148  *
2149  *  \param   tiRoot:        Pointer to TISA initiator driver/port instance.
2150  *  \param   tiIORequest:   Pointer to TISA I/O request context for this I/O.
2151  *  \param   satIOContext:  Pointer to the SAT IO Context
2152  *  \param   pSense:        Pointer to scsiRspSense_t
2153  *  \param   ataStatus:     ATA status register
2154  *  \param   ataError:      ATA error register
2155  *  \param   interruptContext:    Interrupt context
2156  *
2157  *  \return  None
2158  */
2159 /*****************************************************************************/
2160 
2161 GLOBAL void  osSatDefaultTranslation(
2162                    tiRoot_t             *tiRoot,
2163                    tiIORequest_t        *tiIORequest,
2164                    satIOContext_t       *satIOContext,
2165                    scsiRspSense_t       *pSense,
2166                    bit8                 ataStatus,
2167                    bit8                 ataError,
2168                    bit32                interruptContext );
2169 
2170 /*****************************************************************************/
2171 /*! \brief  Allocate resource for SAT intervally generated I/O.
2172  *
2173  *  Allocate resource for SAT intervally generated I/O.
2174  *
2175  *  \param   tiRoot:      Pointer to TISA driver/port instance.
2176  *  \param   satDevData:  Pointer to SAT specific device data.
2177  *  \param   allocLength: Length in byte of the DMA mem to allocate, upto
2178  *                        one page size.
2179  *  \param   satIntIo:    Pointer (output) to context for SAT internally
2180  *                        generated I/O that is allocated by this routine.
2181  *
2182  *  \return If command is started successfully
2183  *    - \e tiSuccess:     Success.
2184  *    - \e tiError:       Failed allocating resource.
2185  */
2186 /*****************************************************************************/
2187 GLOBAL satInternalIo_t *  satAllocIntIoResource(
2188                     tiRoot_t              *tiRoot,
2189                     tiIORequest_t         *tiIORequest,
2190                     satDeviceData_t       *satDevData,
2191                     bit32                 dmaAllocLength,
2192                     satInternalIo_t       *satIntIo);
2193 
2194 /*****************************************************************************/
2195 /*! \brief  Send READ LOG EXT ATA PAGE 10h command to sata drive.
2196  *
2197  *  Send READ LOG EXT ATA command PAGE 10h request to LL layer.
2198  *
2199  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
2200  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
2201  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
2202  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
2203  *  \param   satIOContext_t:   Pointer to the SAT IO Context
2204  *
2205  *  \return If command is started successfully
2206  *    - \e tiSuccess:     I/O request successfully initiated.
2207  *    - \e tiBusy:        No resources available, try again later.
2208  *    - \e tiIONoDevice:  Invalid device handle.
2209  *    - \e tiError:       Other errors.
2210  */
2211 /*****************************************************************************/
2212 GLOBAL bit32  satSendReadLogExt(
2213                    tiRoot_t                  *tiRoot,
2214                    tiIORequest_t             *tiIORequest,
2215                    tiDeviceHandle_t          *tiDeviceHandle,
2216                    tiScsiInitiatorRequest_t *tiScsiRequest,
2217                    satIOContext_t            *satIOContext);
2218 
2219 
2220 /*****************************************************************************/
2221 /*! \brief SAT implementation for SCSI satReadMediaSerialNumber.
2222  *
2223  *  SAT implementation for SCSI Read Media Serial Number.
2224  *
2225  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
2226  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
2227  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
2228  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
2229  *  \param   satIOContext_t:   Pointer to the SAT IO Context
2230  *
2231  *  \return If command is started successfully
2232  *    - \e tiSuccess:     I/O request successfully initiated.
2233  *    - \e tiBusy:        No resources available, try again later.
2234  *    - \e tiIONoDevice:  Invalid device handle.
2235  *    - \e tiError:       Other errors.
2236  */
2237 /*****************************************************************************/
2238 GLOBAL bit32  satReadMediaSerialNumber(
2239                    tiRoot_t                  *tiRoot,
2240                    tiIORequest_t             *tiIORequest,
2241                    tiDeviceHandle_t          *tiDeviceHandle,
2242                    tiScsiInitiatorRequest_t *tiScsiRequest,
2243                    satIOContext_t            *satIOContext);
2244 
2245 /*****************************************************************************
2246 *! \brief  satReadMediaSerialNumberCB
2247 *
2248 *   This routine is a callback function called from ossaSATACompleted().
2249 *   This CB routine deals with Read Media Serial Number completion.
2250 *
2251 *  \param   agRoot:       Handles for this instance of SAS/SATA hardware
2252 *  \param   agIORequest:  Pointer to the LL I/O request context for this I/O.
2253 *  \param   agIOStatus:   Status of completed I/O.
2254 *  \param   agSATAParm1:  Additional info based on status.
2255 *  \param   agIOInfoLen:  Length in bytes of overrun/underrun residual or FIS
2256 *                         length.
2257 *  \param   ioContext:    Pointer to satIOContext_t.
2258 *
2259 *  \return: none
2260 *
2261 *****************************************************************************/
2262 void satReadMediaSerialNumberCB(
2263                         agsaRoot_t        *agRoot,
2264                         agsaIORequest_t   *agIORequest,
2265                         bit32             agIOStatus,
2266                         agsaFisHeader_t   *agFirstDword,
2267                         bit32             agIOInfoLen,
2268                         agsaFrameHandle_t agFrameHandle,
2269                         void              *ioContext
2270                         );
2271 
2272 /*****************************************************************************/
2273 /*! \brief SAT implementation for SCSI satReadBuffer.
2274  *
2275  *  SAT implementation for SCSI Read Buffer.
2276  *
2277  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
2278  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
2279  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
2280  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
2281  *  \param   satIOContext_t:   Pointer to the SAT IO Context
2282  *
2283  *  \return If command is started successfully
2284  *    - \e tiSuccess:     I/O request successfully initiated.
2285  *    - \e tiBusy:        No resources available, try again later.
2286  *    - \e tiIONoDevice:  Invalid device handle.
2287  *    - \e tiError:       Other errors.
2288  */
2289 /*****************************************************************************/
2290 GLOBAL bit32  satReadBuffer(
2291                    tiRoot_t                  *tiRoot,
2292                    tiIORequest_t             *tiIORequest,
2293                    tiDeviceHandle_t          *tiDeviceHandle,
2294                    tiScsiInitiatorRequest_t *tiScsiRequest,
2295                    satIOContext_t            *satIOContext);
2296 
2297 /*****************************************************************************
2298 *! \brief  satReadBufferCB
2299 *
2300 *   This routine is a callback function called from ossaSATACompleted().
2301 *   This CB routine deals with Read Buffer.
2302 *
2303 *  \param   agRoot:       Handles for this instance of SAS/SATA hardware
2304 *  \param   agIORequest:  Pointer to the LL I/O request context for this I/O.
2305 *  \param   agIOStatus:   Status of completed I/O.
2306 *  \param   agSATAParm1:  Additional info based on status.
2307 *  \param   agIOInfoLen:  Length in bytes of overrun/underrun residual or FIS
2308 *                         length.
2309 *  \param   ioContext:    Pointer to satIOContext_t.
2310 *
2311 *  \return: none
2312 *
2313 *****************************************************************************/
2314 void satReadBufferCB(
2315                         agsaRoot_t        *agRoot,
2316                         agsaIORequest_t   *agIORequest,
2317                         bit32             agIOStatus,
2318                         agsaFisHeader_t   *agFirstDword,
2319                         bit32             agIOInfoLen,
2320                         agsaFrameHandle_t agFrameHandle,
2321                         void              *ioContext
2322                         );
2323 
2324 /*****************************************************************************/
2325 /*! \brief SAT implementation for SCSI satWriteBuffer.
2326  *
2327  *  SAT implementation for SCSI Write Buffer.
2328  *
2329  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
2330  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
2331  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
2332  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
2333  *  \param   satIOContext_t:   Pointer to the SAT IO Context
2334  *
2335  *  \return If command is started successfully
2336  *    - \e tiSuccess:     I/O request successfully initiated.
2337  *    - \e tiBusy:        No resources available, try again later.
2338  *    - \e tiIONoDevice:  Invalid device handle.
2339  *    - \e tiError:       Other errors.
2340  */
2341 /*****************************************************************************/
2342 GLOBAL bit32  satWriteBuffer(
2343                    tiRoot_t                  *tiRoot,
2344                    tiIORequest_t             *tiIORequest,
2345                    tiDeviceHandle_t          *tiDeviceHandle,
2346                    tiScsiInitiatorRequest_t *tiScsiRequest,
2347                    satIOContext_t            *satIOContext);
2348 
2349 /*****************************************************************************
2350 *! \brief  satWriteBufferCB
2351 *
2352 *   This routine is a callback function called from ossaSATACompleted().
2353 *   This CB routine deals with Write Buffer.
2354 *
2355 *  \param   agRoot:       Handles for this instance of SAS/SATA hardware
2356 *  \param   agIORequest:  Pointer to the LL I/O request context for this I/O.
2357 *  \param   agIOStatus:   Status of completed I/O.
2358 *  \param   agSATAParm1:  Additional info based on status.
2359 *  \param   agIOInfoLen:  Length in bytes of overrun/underrun residual or FIS
2360 *                         length.
2361 *  \param   ioContext:    Pointer to satIOContext_t.
2362 *
2363 *  \return: none
2364 *
2365 *****************************************************************************/
2366 void satWriteBufferCB(
2367                         agsaRoot_t        *agRoot,
2368                         agsaIORequest_t   *agIORequest,
2369                         bit32             agIOStatus,
2370                         agsaFisHeader_t   *agFirstDword,
2371                         bit32             agIOInfoLen,
2372                         agsaFrameHandle_t agFrameHandle,
2373                         void              *ioContext
2374                         );
2375 
2376 /*****************************************************************************/
2377 /*! \brief SAT implementation for SCSI satReassignBlocks.
2378  *
2379  *  SAT implementation for SCSI Reassign Blocks.
2380  *
2381  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
2382  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
2383  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
2384  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
2385  *  \param   satIOContext_t:   Pointer to the SAT IO Context
2386  *
2387  *  \return If command is started successfully
2388  *    - \e tiSuccess:     I/O request successfully initiated.
2389  *    - \e tiBusy:        No resources available, try again later.
2390  *    - \e tiIONoDevice:  Invalid device handle.
2391  *    - \e tiError:       Other errors.
2392  */
2393 /*****************************************************************************/
2394 GLOBAL bit32  satReassignBlocks(
2395                    tiRoot_t                  *tiRoot,
2396                    tiIORequest_t             *tiIORequest,
2397                    tiDeviceHandle_t          *tiDeviceHandle,
2398                    tiScsiInitiatorRequest_t *tiScsiRequest,
2399                    satIOContext_t            *satIOContext);
2400 
2401 /*****************************************************************************
2402 *! \brief  satReassignBlocksCB
2403 *
2404 *   This routine is a callback function called from ossaSATACompleted().
2405 *   This CB routine deals with Reassign Blocks.
2406 *
2407 *  \param   agRoot:       Handles for this instance of SAS/SATA hardware
2408 *  \param   agIORequest:  Pointer to the LL I/O request context for this I/O.
2409 *  \param   agIOStatus:   Status of completed I/O.
2410 *  \param   agSATAParm1:  Additional info based on status.
2411 *  \param   agIOInfoLen:  Length in bytes of overrun/underrun residual or FIS
2412 *                         length.
2413 *  \param   ioContext:    Pointer to satIOContext_t.
2414 *
2415 *  \return: none
2416 *
2417 *****************************************************************************/
2418 void satReassignBlocksCB(
2419                         agsaRoot_t        *agRoot,
2420                         agsaIORequest_t   *agIORequest,
2421                         bit32             agIOStatus,
2422                         agsaFisHeader_t   *agFirstDword,
2423                         bit32             agIOInfoLen,
2424                         agsaFrameHandle_t agFrameHandle,
2425                         void              *ioContext
2426                         );
2427 
2428 /*****************************************************************************/
2429 /*! \brief SAT implementation for SCSI satReassignBlocks_1.
2430  *
2431  *  SAT implementation for SCSI Reassign Blocks. This is helper function for
2432  *  satReassignBlocks and satReassignBlocksCB. This sends ATA verify command.
2433  *
2434  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
2435  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
2436  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
2437  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
2438  *  \param   satIOContext_t:   Pointer to the SAT IO Context
2439  *
2440  *  \return If command is started successfully
2441  *    - \e tiSuccess:     I/O request successfully initiated.
2442  *    - \e tiBusy:        No resources available, try again later.
2443  *    - \e tiIONoDevice:  Invalid device handle.
2444  *    - \e tiError:       Other errors.
2445  */
2446 /*****************************************************************************/
2447 GLOBAL bit32  satReassignBlocks_1(
2448                    tiRoot_t                  *tiRoot,
2449                    tiIORequest_t             *tiIORequest,
2450                    tiDeviceHandle_t          *tiDeviceHandle,
2451                    tiScsiInitiatorRequest_t *tiScsiRequest,
2452                    satIOContext_t            *satIOContext,
2453                    satIOContext_t            *satOrgIOContext);
2454 
2455 /*****************************************************************************/
2456 /*! \brief SAT implementation for SCSI satReassignBlocks_2.
2457  *
2458  *  SAT implementation for SCSI Reassign Blocks. This is helper function for
2459  *  satReassignBlocks and satReassignBlocksCB. This sends ATA write command.
2460  *
2461  *  \param   tiRoot:           Pointer to TISA initiator driver/port instance.
2462  *  \param   tiIORequest:      Pointer to TISA I/O request context for this I/O.
2463  *  \param   tiDeviceHandle:   Pointer to TISA device handle for this I/O.
2464  *  \param   tiScsiRequest:    Pointer to TISA SCSI I/O request and SGL list.
2465  *  \param   satIOContext_t:   Pointer to the SAT IO Context
2466  *  \param   LBA:              Pointer to the LBA to be processed
2467  *
2468  *  \return If command is started successfully
2469  *    - \e tiSuccess:     I/O request successfully initiated.
2470  *    - \e tiBusy:        No resources available, try again later.
2471  *    - \e tiIONoDevice:  Invalid device handle.
2472  *    - \e tiError:       Other errors.
2473  */
2474 /*****************************************************************************/
2475 GLOBAL bit32  satReassignBlocks_2(
2476                    tiRoot_t                  *tiRoot,
2477                    tiIORequest_t             *tiIORequest,
2478                    tiDeviceHandle_t          *tiDeviceHandle,
2479                    tiScsiInitiatorRequest_t *tiScsiRequest,
2480                    satIOContext_t            *satIOContext,
2481                    bit8                      *LBA
2482                    );
2483 
2484 /*****************************************************************************/
2485 /*! \brief SAT implementation for SCSI satPrepareNewIO.
2486  *
2487  *  This function fills in the fields of internal IO generated by TD layer.
2488  *  This is mostly used in the callback functions.
2489  *
2490  *  \param   satNewIntIo:      Pointer to the internal IO structure.
2491  *  \param   tiOrgIORequest:   Pointer to the original tiIOrequest sent by OS layer
2492  *  \param   satDevData:       Pointer to the device data.
2493  *  \param   scsiCmnd:         Pointer to SCSI command.
2494  *  \param   satOrgIOContext:  Pointer to the original SAT IO Context
2495  *
2496  *  \return
2497  *    - \e Pointer to the new SAT IO Context
2498  */
2499 /*****************************************************************************/
2500 GLOBAL satIOContext_t *satPrepareNewIO(
2501                             satInternalIo_t         *satNewIntIo,
2502                             tiIORequest_t           *tiOrgIORequest,
2503                             satDeviceData_t         *satDevData,
2504                             tiIniScsiCmnd_t         *scsiCmnd,
2505                             satIOContext_t          *satOrgIOContext
2506                             );
2507 
2508 /*****************************************************************************
2509  *! \brief  sataLLIOAbort
2510  *
2511  *   This routine is called to initiate an I/O abort to LL layer.
2512  *   This function implements/encapsulates HW and LL API dependency.
2513  *
2514  *  \param   tiRoot:      Pointer to TISA initiator driver/port instance.
2515  *  \param   taskTag:     Pointer to TISA I/O context to be aborted.
2516  *
2517  *  \return:
2518  *
2519  *  \e tiSuccess:     Abort request was successfully initiated.
2520  *  \e tiBusy:        No resources available, try again later.
2521  *  \e tiError:       Other errors that prevent the abort request from being
2522  *                    started..
2523  *
2524  *
2525  *****************************************************************************/
2526 
2527 GLOBAL bit32 sataLLIOAbort (
2528                 tiRoot_t        *tiRoot,
2529                 tiIORequest_t   *taskTag );
2530 
2531 
2532 
2533 void satInquiryCB(
2534                    agsaRoot_t        *agRoot,
2535                    agsaIORequest_t   *agIORequest,
2536                    bit32             agIOStatus,
2537                    agsaFisHeader_t   *agFirstDword,
2538                    bit32             agIOInfoLen,
2539                    agsaFrameHandle_t agFrameHandle,
2540                    void              *ioContext
2541                    );
2542 
2543 void satInquiryIntCB(
2544                    tiRoot_t                  *tiRoot,
2545                    tiIORequest_t             *tiIORequest,
2546                    tiDeviceHandle_t          *tiDeviceHandle,
2547                    tiScsiInitiatorRequest_t *tiScsiRequest,
2548                    satIOContext_t            *satIOContext
2549                    );
2550 
2551 GLOBAL bit32  satSendIDDev(
2552                            tiRoot_t                  *tiRoot,
2553                            tiIORequest_t             *tiIORequest,
2554                            tiDeviceHandle_t          *tiDeviceHandle,
2555                            tiScsiInitiatorRequest_t *tiScsiRequest,
2556                            satIOContext_t            *satIOContext);
2557 
2558 
2559 GLOBAL bit32  satStartIDDev(
2560                             tiRoot_t                  *tiRoot,
2561                             tiIORequest_t             *tiIORequest,
2562                             tiDeviceHandle_t          *tiDeviceHandle,
2563                             tiScsiInitiatorRequest_t *tiScsiRequest,
2564                             satIOContext_t            *satIOContext
2565                             );
2566 
2567 void satSetDevInfo(
2568                    satDeviceData_t           *satDevData,
2569                    agsaSATAIdentifyData_t    *SATAIdData
2570                    );
2571 
2572 GLOBAL bit32  satAddSATAStartIDDev(
2573                                    tiRoot_t                  *tiRoot,
2574                                    tiIORequest_t             *tiIORequest,
2575                                    tiDeviceHandle_t          *tiDeviceHandle,
2576                                    tiScsiInitiatorRequest_t *tiScsiRequest,
2577                                    satIOContext_t            *satIOContext
2578                                   );
2579 
2580 GLOBAL bit32  satAddSATASendIDDev(
2581                                   tiRoot_t                  *tiRoot,
2582                                   tiIORequest_t             *tiIORequest,
2583                                   tiDeviceHandle_t          *tiDeviceHandle,
2584                                   tiScsiInitiatorRequest_t *tiScsiRequest,
2585                                   satIOContext_t            *satIOContext
2586                                  );
2587 
2588 void satAddSATAIDDevCB(
2589                    agsaRoot_t        *agRoot,
2590                    agsaIORequest_t   *agIORequest,
2591                    bit32             agIOStatus,
2592                    agsaFisHeader_t   *agFirstDword,
2593                    bit32             agIOInfoLen,
2594                    agsaFrameHandle_t agFrameHandle,
2595                    void              *ioContext
2596                    );
2597 
2598 void satAddSATAIDDevCBReset(
2599                    agsaRoot_t        *agRoot,
2600                    tdsaDeviceData_t  *oneDeviceData,
2601                    satIOContext_t    *satIOContext,
2602                    tdIORequestBody_t *tdIORequestBody
2603                    );
2604 
2605 void satAddSATAIDDevCBCleanup(
2606                    agsaRoot_t        *agRoot,
2607                    tdsaDeviceData_t  *oneDeviceData,
2608                    satIOContext_t    *satIOContext,
2609                    tdIORequestBody_t *tdIORequestBody
2610                    );
2611 
2612 GLOBAL bit32 tdsaDiscoveryIntStartIDDev(
2613                                    tiRoot_t                  *tiRoot,
2614                                    tiIORequest_t             *tiIORequest,
2615                                    tiDeviceHandle_t          *tiDeviceHandle,
2616                                    tiScsiInitiatorRequest_t *tiScsiRequest,
2617                                    satIOContext_t            *satIOContext
2618                                   );
2619 
2620 GLOBAL bit32 tdsaDiscoverySendIDDev(
2621                                    tiRoot_t                  *tiRoot,
2622                                    tiIORequest_t             *tiIORequest,
2623                                    tiDeviceHandle_t          *tiDeviceHandle,
2624                                    tiScsiInitiatorRequest_t *tiScsiRequest,
2625                                    satIOContext_t            *satIOContext
2626                                   );
2627 
2628 void tdsaDiscoveryStartIDDevCB(
2629                    agsaRoot_t        *agRoot,
2630                    agsaIORequest_t   *agIORequest,
2631                    bit32             agIOStatus,
2632                    agsaFisHeader_t   *agFirstDword,
2633                    bit32             agIOInfoLen,
2634                    agsaFrameHandle_t agFrameHandle,
2635                    void              *ioContext
2636                    );
2637 
2638 
2639 /*
2640   utility functions
2641  */
2642 
2643 bit32 satComputeCDB10LBA(satIOContext_t            *satIOContext);
2644 bit32 satComputeCDB10TL(satIOContext_t            *satIOContext);
2645 bit32 satComputeCDB12LBA(satIOContext_t            *satIOContext);
2646 bit32 satComputeCDB12TL(satIOContext_t            *satIOContext);
2647 bit32 satComputeCDB16LBA(satIOContext_t            *satIOContext);
2648 bit32 satComputeCDB16TL(satIOContext_t            *satIOContext);
2649 bit32 satComputeLoopNum(bit32 a,
2650                         bit32 b);
2651 bit32 satAddNComparebit64(bit8 *a, bit8 *b);
2652 bit32 satAddNComparebit32(bit8 *a, bit8 *b);
2653 bit32 satCompareLBALimitbit(bit8 *lba);
2654 
2655 /*****************************************************************************
2656 *! \brief
2657 *  Purpose: bitwise set
2658 *
2659 *  Parameters:
2660 *   data        - input output buffer
2661 *   index       - bit to set
2662 *
2663 *  Return:
2664 *   none
2665 *
2666 *****************************************************************************/
2667 GLOBAL void
2668 satBitSet(bit8 *data, bit32 index);
2669 
2670 /*****************************************************************************
2671 *! \brief
2672 *  Purpose: bitwise clear
2673 *
2674 *  Parameters:
2675 *   data        - input output buffer
2676 *   index       - bit to clear
2677 *
2678 *  Return:
2679 *   none
2680 *
2681 *****************************************************************************/
2682 GLOBAL void
2683 satBitClear(bit8 *data, bit32 index);
2684 
2685 /*****************************************************************************
2686 *! \brief
2687 *  Purpose: bitwise test
2688 *
2689 *  Parameters:
2690 *   data        - input output buffer
2691 *   index       - bit to test
2692 *
2693 *  Return:
2694 *   0 - not set
2695 *   1 - set
2696 *
2697 *****************************************************************************/
2698 GLOBAL agBOOLEAN
2699 satBitTest(bit8 *data, bit32 index);
2700 
2701 /******************************************************************************/
2702 /*! \brief allocate an available SATA tag
2703  *
2704  *  allocate an available SATA tag
2705  *
2706  *  \param pSatDevData
2707  *  \param pTag
2708  *
2709  *  \return -Success or fail-
2710  */
2711 /*******************************************************************************/
2712 GLOBAL bit32 satTagAlloc(
2713                            tiRoot_t          *tiRoot,
2714                            satDeviceData_t   *pSatDevData,
2715                            bit8              *pTag
2716                            );
2717 
2718 /******************************************************************************/
2719 /*! \brief release an SATA tag
2720  *
2721  *  release an available SATA tag
2722  *
2723  *  \param pSatDevData
2724  *
2725  *  \return -the tag-
2726  */
2727 /*******************************************************************************/
2728 GLOBAL bit32 satTagRelease(
2729                               tiRoot_t          *tiRoot,
2730                               satDeviceData_t   *pSatDevData,
2731                               bit8              tag
2732                               );
2733 
2734 GLOBAL void
2735 satDecrementPendingIO(
2736                       tiRoot_t                *tiRoot,
2737                       tdsaContext_t           *tdsaAllShared,
2738                       satIOContext_t          *satIOContext
2739                       );
2740 
2741 GLOBAL bit32  satStartResetDevice(
2742                             tiRoot_t                  *tiRoot,
2743                             tiIORequest_t             *tiIORequest,
2744                             tiDeviceHandle_t          *tiDeviceHandle,
2745                             tiScsiInitiatorRequest_t *tiScsiRequest,
2746                             satIOContext_t            *satIOContext
2747                             );
2748 
2749 GLOBAL bit32  satResetDevice(
2750                             tiRoot_t                  *tiRoot,
2751                             tiIORequest_t             *tiIORequest,
2752                             tiDeviceHandle_t          *tiDeviceHandle,
2753                             tiScsiInitiatorRequest_t *tiScsiRequest,
2754                             satIOContext_t            *satIOContext
2755                             );
2756 
2757 GLOBAL void satResetDeviceCB(
2758                    agsaRoot_t        *agRoot,
2759                    agsaIORequest_t   *agIORequest,
2760                    bit32             agIOStatus,
2761                    agsaFisHeader_t   *agFirstDword,
2762                    bit32             agIOInfoLen,
2763                    agsaFrameHandle_t agFrameHandle,
2764                    void              *ioContext
2765                    );
2766 
2767 osGLOBAL bit32 satSubTM(
2768                         tiRoot_t          *tiRoot,
2769                         tiDeviceHandle_t  *tiDeviceHandle,
2770                         bit32             task,
2771                         tiLUN_t           *lun,
2772                         tiIORequest_t     *taskTag,
2773                         tiIORequest_t     *currentTaskTag,
2774                         bit32              NotifyOS
2775                         );
2776 
2777 GLOBAL bit32  satStartDeResetDevice(
2778                             tiRoot_t                  *tiRoot,
2779                             tiIORequest_t             *tiIORequest,
2780                             tiDeviceHandle_t          *tiDeviceHandle,
2781                             tiScsiInitiatorRequest_t *tiScsiRequest,
2782                             satIOContext_t            *satIOContext
2783                             );
2784 
2785 GLOBAL bit32  satDeResetDevice(
2786                             tiRoot_t                  *tiRoot,
2787                             tiIORequest_t             *tiIORequest,
2788                             tiDeviceHandle_t          *tiDeviceHandle,
2789                             tiScsiInitiatorRequest_t *tiScsiRequest,
2790                             satIOContext_t            *satIOContext
2791                             );
2792 
2793 
2794 GLOBAL void satDeResetDeviceCB(
2795                    agsaRoot_t        *agRoot,
2796                    agsaIORequest_t   *agIORequest,
2797                    bit32             agIOStatus,
2798                    agsaFisHeader_t   *agFirstDword,
2799                    bit32             agIOInfoLen,
2800                    agsaFrameHandle_t agFrameHandle,
2801                    void              *ioContext
2802                    );
2803 
2804 
2805 GLOBAL bit32  satStartCheckPowerMode(
2806                             tiRoot_t                  *tiRoot,
2807                             tiIORequest_t             *tiIORequest,
2808                             tiDeviceHandle_t          *tiDeviceHandle,
2809                             tiScsiInitiatorRequest_t *tiScsiRequest,
2810                             satIOContext_t            *satIOContext
2811                             );
2812 
2813 GLOBAL bit32  satCheckPowerMode(
2814                             tiRoot_t                  *tiRoot,
2815                             tiIORequest_t             *tiIORequest,
2816                             tiDeviceHandle_t          *tiDeviceHandle,
2817                             tiScsiInitiatorRequest_t *tiScsiRequest,
2818                             satIOContext_t            *satIOContext
2819                             );
2820 
2821 GLOBAL void satCheckPowerModeCB(
2822                    agsaRoot_t        *agRoot,
2823                    agsaIORequest_t   *agIORequest,
2824                    bit32             agIOStatus,
2825                    agsaFisHeader_t   *agFirstDword,
2826                    bit32             agIOInfoLen,
2827                    agsaFrameHandle_t agFrameHandle,
2828                    void              *ioContext
2829                    );
2830 
2831 GLOBAL void satAbort(agsaRoot_t        *agRoot,
2832                      satIOContext_t    *satIOContext
2833                      );
2834 
2835 GLOBAL void satTranslateATAPIErrorsToSCSIErrors(
2836                    bit8   bCommand,
2837                    bit8   bATAStatus,
2838                    bit8   bATAError,
2839                    bit8   *pSenseKey,
2840                    bit16  *pSenseCodeInfo
2841                    );
2842 
2843 osGLOBAL void
2844 satSATADeviceReset(tiRoot_t            *tiRoot,
2845                   tdsaDeviceData_t    *oneDeviceData,
2846                   bit32               flag);
2847 
2848 #ifdef REMOVED
2849 osGLOBAL void
2850 satSATADeviceReset(                                                                                                     tiRoot_t            *tiRoot,
2851                    tdsaDeviceData_t    *oneDeviceData,
2852                    bit32               flag
2853                    );
2854 #endif
2855 #endif  /*__SATPROTO_H__ */
2856