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