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