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*****************************************************************************/
53void  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                           );
62void  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
72void  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
81void itdsatEncryptionHandler (
82                       agsaRoot_t              *agRoot,
83                       agsaIORequest_t         *agIORequest,
84                       bit32                   agIOStatus,
85                       bit32                   agIOInfoLen,
86                       void                    *agParam,
87                       bit32                   agOtherInfo
88                       );
89
90osGLOBAL void
91itdsatDifHandler(
92                 agsaRoot_t              *agRoot,
93                 agsaIORequest_t         *agIORequest,
94                 bit32                   agIOStatus,
95                 bit32                   agIOInfoLen,
96                 void                    *agParam,
97                 bit32                   agOtherInfo
98                );
99
100void  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
120void 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
142void 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/*****************************************************************************/
167GLOBAL bit32  satPacket(
168                   tiRoot_t                  *tiRoot,
169                   tiIORequest_t             *tiIORequest,
170                   tiDeviceHandle_t          *tiDeviceHandle,
171                   tiScsiInitiatorRequest_t *tiScsiRequest,
172                   satIOContext_t            *satIOContext);
173
174void 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/*****************************************************************************/
201GLOBAL bit32  satDeviceReset(
202                            tiRoot_t                  *tiRoot,
203                            tiIORequest_t             *tiIORequest,
204                            tiDeviceHandle_t          *tiDeviceHandle,
205                            tiScsiInitiatorRequest_t  *tiScsiRequest,
206                            satIOContext_t            *satIOContext
207                            );
208
209void 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/*****************************************************************************/
237GLOBAL bit32  satExecuteDeviceDiagnostic(
238                            tiRoot_t                  *tiRoot,
239                            tiIORequest_t             *tiIORequest,
240                            tiDeviceHandle_t          *tiDeviceHandle,
241                            tiScsiInitiatorRequest_t  *tiScsiRequest,
242                            satIOContext_t            *satIOContext
243                            );
244
245void 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/*****************************************************************************/
273GLOBAL 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/*****************************************************************************/
318GLOBAL 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/*****************************************************************************/
353GLOBAL 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/*****************************************************************************/
378GLOBAL 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/*****************************************************************************/
404GLOBAL 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/*****************************************************************************/
428GLOBAL 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/*****************************************************************************/
453GLOBAL 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/*****************************************************************************/
478GLOBAL 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/*****************************************************************************/
503GLOBAL bit32  satWrite10(
504                   tiRoot_t                  *tiRoot,
505                   tiIORequest_t             *tiIORequest,
506                   tiDeviceHandle_t          *tiDeviceHandle,
507                   tiScsiInitiatorRequest_t *tiScsiRequest,
508                   satIOContext_t            *satIOContext);
509GLOBAL 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/*****************************************************************************/
535GLOBAL 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/*****************************************************************************/
561GLOBAL 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/*****************************************************************************/
587GLOBAL 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/*****************************************************************************/
612GLOBAL bit32  satReadCapacity16(
613                   tiRoot_t                  *tiRoot,
614                   tiIORequest_t             *tiIORequest,
615                   tiDeviceHandle_t          *tiDeviceHandle,
616                   tiScsiInitiatorRequest_t *tiScsiRequest,
617                   satIOContext_t            *satIOContext);
618
619
620GLOBAL 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/*****************************************************************************/
645GLOBAL 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/*****************************************************************************/
670GLOBAL 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/*****************************************************************************/
695GLOBAL 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/*****************************************************************************/
720GLOBAL 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/*****************************************************************************/
746GLOBAL 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/*****************************************************************************/
771GLOBAL 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/*****************************************************************************/
796GLOBAL 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/*****************************************************************************/
821GLOBAL 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/*****************************************************************************/
847GLOBAL bit32  satRead_1(
848                         tiRoot_t                  *tiRoot,
849                         tiIORequest_t             *tiIORequest,
850                         tiDeviceHandle_t          *tiDeviceHandle,
851                         tiScsiInitiatorRequest_t *tiScsiRequest,
852                         satIOContext_t            *satIOContext);
853GLOBAL 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/*****************************************************************************/
878GLOBAL bit32  satWriteSame10(
879                   tiRoot_t                  *tiRoot,
880                   tiIORequest_t             *tiIORequest,
881                   tiDeviceHandle_t          *tiDeviceHandle,
882                   tiScsiInitiatorRequest_t *tiScsiRequest,
883                   satIOContext_t            *satIOContext);
884
885GLOBAL 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                   );
893GLOBAL 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                   );
901GLOBAL 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/*****************************************************************************/
927GLOBAL 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/*****************************************************************************/
956GLOBAL 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/*****************************************************************************/
984GLOBAL 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/*****************************************************************************/
1009GLOBAL 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/*****************************************************************************/
1034GLOBAL 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/*****************************************************************************/
1059GLOBAL 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/*****************************************************************************/
1085GLOBAL 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/*****************************************************************************/
1110GLOBAL bit32  satModeSelect6(
1111                   tiRoot_t                  *tiRoot,
1112                   tiIORequest_t             *tiIORequest,
1113                   tiDeviceHandle_t          *tiDeviceHandle,
1114                   tiScsiInitiatorRequest_t *tiScsiRequest,
1115                   satIOContext_t            *satIOContext);
1116GLOBAL 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/*****************************************************************************/
1141GLOBAL 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/*****************************************************************************/
1166GLOBAL 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/*****************************************************************************/
1191GLOBAL 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/*****************************************************************************/
1216GLOBAL 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/*****************************************************************************/
1243GLOBAL 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/*****************************************************************************/
1269GLOBAL bit32  satWriteAndVerify12(
1270                   tiRoot_t                  *tiRoot,
1271                   tiIORequest_t             *tiIORequest,
1272                   tiDeviceHandle_t          *tiDeviceHandle,
1273                   tiScsiInitiatorRequest_t *tiScsiRequest,
1274                   satIOContext_t            *satIOContext);
1275
1276GLOBAL bit32  satNonChainedWriteNVerify_Verify(
1277                   tiRoot_t                  *tiRoot,
1278                   tiIORequest_t             *tiIORequest,
1279                   tiDeviceHandle_t          *tiDeviceHandle,
1280                   tiScsiInitiatorRequest_t *tiScsiRequest,
1281                   satIOContext_t            *satIOContext);
1282
1283GLOBAL bit32  satChainedWriteNVerify_Write(
1284                   tiRoot_t                  *tiRoot,
1285                   tiIORequest_t             *tiIORequest,
1286                   tiDeviceHandle_t          *tiDeviceHandle,
1287                   tiScsiInitiatorRequest_t *tiScsiRequest,
1288                   satIOContext_t            *satIOContext);
1289
1290GLOBAL bit32  satChainedWriteNVerify_Verify(
1291                   tiRoot_t                  *tiRoot,
1292                   tiIORequest_t             *tiIORequest,
1293                   tiDeviceHandle_t          *tiDeviceHandle,
1294                   tiScsiInitiatorRequest_t *tiScsiRequest,
1295                   satIOContext_t            *satIOContext);
1296
1297GLOBAL 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/*****************************************************************************/
1323GLOBAL bit32  satWriteAndVerify16(
1324                   tiRoot_t                  *tiRoot,
1325                   tiIORequest_t             *tiIORequest,
1326                   tiDeviceHandle_t          *tiDeviceHandle,
1327                   tiScsiInitiatorRequest_t *tiScsiRequest,
1328                   satIOContext_t            *satIOContext);
1329
1330GLOBAL 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/*****************************************************************************/
1355GLOBAL 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/*****************************************************************************/
1380GLOBAL 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/*****************************************************************************/
1406GLOBAL 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/*****************************************************************************/
1432GLOBAL bit32  satVerify10(
1433                   tiRoot_t                  *tiRoot,
1434                   tiIORequest_t             *tiIORequest,
1435                   tiDeviceHandle_t          *tiDeviceHandle,
1436                   tiScsiInitiatorRequest_t *tiScsiRequest,
1437                   satIOContext_t            *satIOContext);
1438
1439GLOBAL 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/*****************************************************************************/
1464GLOBAL 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/*****************************************************************************/
1488GLOBAL 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/*****************************************************************************/
1513GLOBAL 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/*****************************************************************************/
1531GLOBAL 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/*****************************************************************************/
1549GLOBAL 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/*****************************************************************************/
1566GLOBAL 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/*****************************************************************************/
1583GLOBAL 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/*****************************************************************************/
1599GLOBAL 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
1626GLOBAL 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*****************************************************************************/
1653osGLOBAL 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
1678void 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                           );
1687void 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
1697void 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
1707void 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*****************************************************************************/
1734void 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*****************************************************************************/
1760void 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*****************************************************************************/
1786void 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                   );
1795void 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                         );
1804void 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
1814void 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*****************************************************************************/
1842void 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                     );
1851void 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                        );
1860void 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*****************************************************************************/
1886void 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*****************************************************************************/
1912void 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*****************************************************************************/
1938void 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*****************************************************************************/
1964void 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
1974void 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
1984void 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 *****************************************************************************/
2014osGLOBAL 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
2022osGLOBAL bit32 satTmWarmReset(
2023                            tiRoot_t                  *tiRoot,
2024                            tiIORequest_t             *tiIORequest,
2025                            tiDeviceHandle_t          *tiDeviceHandle,
2026                            tiScsiInitiatorRequest_t *tiScsiRequest,
2027                            satIOContext_t            *satIOContext);
2028
2029osGLOBAL 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 *****************************************************************************/
2057osGLOBAL 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
2082osGLOBAL void osSatResetCB(
2083                tiRoot_t          *tiRoot,
2084                tiDeviceHandle_t  *tiDeviceHandle,
2085                bit32             resetStatus,
2086                void              *respFis);
2087
2088osGLOBAL void
2089ossaSATADeviceResetCB(
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 *****************************************************************************/
2111osGLOBAL 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*****************************************************************************/
2138osGLOBAL void
2139tdssRemoveSATAFromSharedcontext(
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
2162GLOBAL 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/*****************************************************************************/
2188GLOBAL 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/*****************************************************************************/
2213GLOBAL 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/*****************************************************************************/
2239GLOBAL 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*****************************************************************************/
2263void 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/*****************************************************************************/
2291GLOBAL 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*****************************************************************************/
2315void 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/*****************************************************************************/
2343GLOBAL 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*****************************************************************************/
2367void 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/*****************************************************************************/
2395GLOBAL 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*****************************************************************************/
2419void 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/*****************************************************************************/
2448GLOBAL 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/*****************************************************************************/
2476GLOBAL 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/*****************************************************************************/
2501GLOBAL 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
2528GLOBAL bit32 sataLLIOAbort (
2529                tiRoot_t        *tiRoot,
2530                tiIORequest_t   *taskTag );
2531
2532
2533
2534void 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
2544void satInquiryIntCB(
2545                   tiRoot_t                  *tiRoot,
2546                   tiIORequest_t             *tiIORequest,
2547                   tiDeviceHandle_t          *tiDeviceHandle,
2548                   tiScsiInitiatorRequest_t *tiScsiRequest,
2549                   satIOContext_t            *satIOContext
2550                   );
2551
2552GLOBAL bit32  satSendIDDev(
2553                           tiRoot_t                  *tiRoot,
2554                           tiIORequest_t             *tiIORequest,
2555                           tiDeviceHandle_t          *tiDeviceHandle,
2556                           tiScsiInitiatorRequest_t *tiScsiRequest,
2557                           satIOContext_t            *satIOContext);
2558
2559
2560GLOBAL bit32  satStartIDDev(
2561                            tiRoot_t                  *tiRoot,
2562                            tiIORequest_t             *tiIORequest,
2563                            tiDeviceHandle_t          *tiDeviceHandle,
2564                            tiScsiInitiatorRequest_t *tiScsiRequest,
2565                            satIOContext_t            *satIOContext
2566                            );
2567
2568void satSetDevInfo(
2569                   satDeviceData_t           *satDevData,
2570                   agsaSATAIdentifyData_t    *SATAIdData
2571                   );
2572
2573GLOBAL bit32  satAddSATAStartIDDev(
2574                                   tiRoot_t                  *tiRoot,
2575                                   tiIORequest_t             *tiIORequest,
2576                                   tiDeviceHandle_t          *tiDeviceHandle,
2577                                   tiScsiInitiatorRequest_t *tiScsiRequest,
2578                                   satIOContext_t            *satIOContext
2579                                  );
2580
2581GLOBAL bit32  satAddSATASendIDDev(
2582                                  tiRoot_t                  *tiRoot,
2583                                  tiIORequest_t             *tiIORequest,
2584                                  tiDeviceHandle_t          *tiDeviceHandle,
2585                                  tiScsiInitiatorRequest_t *tiScsiRequest,
2586                                  satIOContext_t            *satIOContext
2587                                 );
2588
2589void 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
2599void satAddSATAIDDevCBReset(
2600                   agsaRoot_t        *agRoot,
2601                   tdsaDeviceData_t  *oneDeviceData,
2602                   satIOContext_t    *satIOContext,
2603                   tdIORequestBody_t *tdIORequestBody
2604                   );
2605
2606void satAddSATAIDDevCBCleanup(
2607                   agsaRoot_t        *agRoot,
2608                   tdsaDeviceData_t  *oneDeviceData,
2609                   satIOContext_t    *satIOContext,
2610                   tdIORequestBody_t *tdIORequestBody
2611                   );
2612
2613GLOBAL bit32 tdsaDiscoveryIntStartIDDev(
2614                                   tiRoot_t                  *tiRoot,
2615                                   tiIORequest_t             *tiIORequest,
2616                                   tiDeviceHandle_t          *tiDeviceHandle,
2617                                   tiScsiInitiatorRequest_t *tiScsiRequest,
2618                                   satIOContext_t            *satIOContext
2619                                  );
2620
2621GLOBAL bit32 tdsaDiscoverySendIDDev(
2622                                   tiRoot_t                  *tiRoot,
2623                                   tiIORequest_t             *tiIORequest,
2624                                   tiDeviceHandle_t          *tiDeviceHandle,
2625                                   tiScsiInitiatorRequest_t *tiScsiRequest,
2626                                   satIOContext_t            *satIOContext
2627                                  );
2628
2629void 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
2644bit32 satComputeCDB10LBA(satIOContext_t            *satIOContext);
2645bit32 satComputeCDB10TL(satIOContext_t            *satIOContext);
2646bit32 satComputeCDB12LBA(satIOContext_t            *satIOContext);
2647bit32 satComputeCDB12TL(satIOContext_t            *satIOContext);
2648bit32 satComputeCDB16LBA(satIOContext_t            *satIOContext);
2649bit32 satComputeCDB16TL(satIOContext_t            *satIOContext);
2650bit32 satComputeLoopNum(bit32 a,
2651                        bit32 b);
2652bit32 satAddNComparebit64(bit8 *a, bit8 *b);
2653bit32 satAddNComparebit32(bit8 *a, bit8 *b);
2654bit32 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*****************************************************************************/
2668GLOBAL void
2669satBitSet(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*****************************************************************************/
2683GLOBAL void
2684satBitClear(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*****************************************************************************/
2699GLOBAL agBOOLEAN
2700satBitTest(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/*******************************************************************************/
2713GLOBAL 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/*******************************************************************************/
2729GLOBAL bit32 satTagRelease(
2730                              tiRoot_t          *tiRoot,
2731                              satDeviceData_t   *pSatDevData,
2732                              bit8              tag
2733                              );
2734
2735GLOBAL void
2736satDecrementPendingIO(
2737                      tiRoot_t                *tiRoot,
2738                      tdsaContext_t           *tdsaAllShared,
2739                      satIOContext_t          *satIOContext
2740                      );
2741
2742GLOBAL bit32  satStartResetDevice(
2743                            tiRoot_t                  *tiRoot,
2744                            tiIORequest_t             *tiIORequest,
2745                            tiDeviceHandle_t          *tiDeviceHandle,
2746                            tiScsiInitiatorRequest_t *tiScsiRequest,
2747                            satIOContext_t            *satIOContext
2748                            );
2749
2750GLOBAL bit32  satResetDevice(
2751                            tiRoot_t                  *tiRoot,
2752                            tiIORequest_t             *tiIORequest,
2753                            tiDeviceHandle_t          *tiDeviceHandle,
2754                            tiScsiInitiatorRequest_t *tiScsiRequest,
2755                            satIOContext_t            *satIOContext
2756                            );
2757
2758GLOBAL 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
2768osGLOBAL 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
2778GLOBAL bit32  satStartDeResetDevice(
2779                            tiRoot_t                  *tiRoot,
2780                            tiIORequest_t             *tiIORequest,
2781                            tiDeviceHandle_t          *tiDeviceHandle,
2782                            tiScsiInitiatorRequest_t *tiScsiRequest,
2783                            satIOContext_t            *satIOContext
2784                            );
2785
2786GLOBAL 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
2795GLOBAL 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
2806GLOBAL bit32  satStartCheckPowerMode(
2807                            tiRoot_t                  *tiRoot,
2808                            tiIORequest_t             *tiIORequest,
2809                            tiDeviceHandle_t          *tiDeviceHandle,
2810                            tiScsiInitiatorRequest_t *tiScsiRequest,
2811                            satIOContext_t            *satIOContext
2812                            );
2813
2814GLOBAL bit32  satCheckPowerMode(
2815                            tiRoot_t                  *tiRoot,
2816                            tiIORequest_t             *tiIORequest,
2817                            tiDeviceHandle_t          *tiDeviceHandle,
2818                            tiScsiInitiatorRequest_t *tiScsiRequest,
2819                            satIOContext_t            *satIOContext
2820                            );
2821
2822GLOBAL 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
2832GLOBAL void satAbort(agsaRoot_t        *agRoot,
2833                     satIOContext_t    *satIOContext
2834                     );
2835
2836GLOBAL void satTranslateATAPIErrorsToSCSIErrors(
2837                   bit8   bCommand,
2838                   bit8   bATAStatus,
2839                   bit8   bATAError,
2840                   bit8   *pSenseKey,
2841                   bit16  *pSenseCodeInfo
2842                   );
2843
2844osGLOBAL void
2845satSATADeviceReset(tiRoot_t            *tiRoot,
2846                  tdsaDeviceData_t    *oneDeviceData,
2847                  bit32               flag);
2848
2849#ifdef REMOVED
2850osGLOBAL void
2851satSATADeviceReset(                                                                                                     tiRoot_t            *tiRoot,
2852                   tdsaDeviceData_t    *oneDeviceData,
2853                   bit32               flag
2854                   );
2855#endif
2856#endif  /*__SATPROTO_H__ */
2857