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 saapi.h 26 * \brief The file defines the declaration of tSDK APIs 27 * 28 * 29 * 30 * 31 */ 32 /******************************************************************************/ 33 34 #ifndef __SSDKAPI_H__ 35 #define __SSDKAPI_H__ 36 37 /******************************************************************************** 38 * SA LL Function Declaration * 39 ********************************************************************************/ 40 41 /*************************************************************************** 42 * Definition of interrupt related functions start * 43 ***************************************************************************/ 44 45 46 GLOBAL bit32 FORCEINLINE saDelayedInterruptHandler( 47 agsaRoot_t *agRoot, 48 bit32 interruptVectorIndex, 49 bit32 count 50 ); 51 52 GLOBAL bit32 FORCEINLINE saInterruptHandler( 53 agsaRoot_t *agRoot, 54 bit32 interruptVectorIndex 55 ); 56 57 GLOBAL void saSystemInterruptsActive( 58 agsaRoot_t *agRoot, 59 agBOOLEAN sysIntsActive 60 ); 61 62 GLOBAL FORCEINLINE void saSystemInterruptsEnable( 63 agsaRoot_t *agRoot, 64 bit32 interruptVectorIndex 65 ); 66 /*************************************************************************** 67 * Definition of interrupt related functions end * 68 ***************************************************************************/ 69 70 71 /*************************************************************************** 72 * Definition of timer related functions start * 73 ***************************************************************************/ 74 GLOBAL void saTimerTick(agsaRoot_t *agRoot); 75 /*************************************************************************** 76 * Definition of timer related functions end * 77 ***************************************************************************/ 78 79 /*************************************************************************** 80 * Definition of initialization related functions start * 81 ***************************************************************************/ 82 GLOBAL void saGetRequirements( 83 agsaRoot_t *agRoot, 84 agsaSwConfig_t *swConfig, 85 agsaMemoryRequirement_t *memoryRequirement, 86 bit32 *usecsPerTick, 87 bit32 *maxNumLocks 88 ); 89 90 GLOBAL bit32 saInitialize( 91 agsaRoot_t *agRoot, 92 agsaMemoryRequirement_t *memoryAllocated, 93 agsaHwConfig_t *hwConfig, 94 agsaSwConfig_t *swConfig, 95 bit32 usecsPerTick 96 ); 97 /*************************************************************************** 98 * Definition of initialization related functions end * 99 ***************************************************************************/ 100 101 /*************************************************************************** 102 * Definition of hardware related functions start * 103 ***************************************************************************/ 104 GLOBAL void saHwReset( 105 agsaRoot_t *agRoot, 106 bit32 resetType, 107 bit32 resetParm 108 ); 109 110 GLOBAL void saHwShutdown(agsaRoot_t *agRoot); 111 112 /*************************************************************************** 113 * Definition of hardware related functions end * 114 ***************************************************************************/ 115 116 /*************************************************************************** 117 * Definition of phy related functions start * 118 ***************************************************************************/ 119 GLOBAL bit32 saPhyStart( 120 agsaRoot_t *agRoot, 121 agsaContext_t *agContext, 122 bit32 queueNum, 123 bit32 phyId, 124 agsaPhyConfig_t *agPhyConfig, 125 agsaSASIdentify_t *agSASIdentify 126 ); 127 128 GLOBAL bit32 saPhyStop( 129 agsaRoot_t *agRoot, 130 agsaContext_t *agContext, 131 bit32 queueNum, 132 bit32 phyId 133 ); 134 135 136 GLOBAL bit32 saLocalPhyControl( 137 agsaRoot_t *agRoot, 138 agsaContext_t *agContext, 139 bit32 queueNum, 140 bit32 phyId, 141 bit32 phyOperation, 142 ossaLocalPhyControlCB_t agCB 143 ); 144 145 GLOBAL bit32 saGetPhyProfile( 146 agsaRoot_t *agRoot, 147 agsaContext_t *agContext, 148 bit32 queueNum, 149 bit32 ppc, 150 bit32 phyID 151 ); 152 153 GLOBAL bit32 saSetPhyProfile ( 154 agsaRoot_t *agRoot, 155 agsaContext_t *agContext, 156 bit32 queueNum, 157 bit32 ppc, 158 bit32 length, 159 void *buffer, 160 bit32 phyID 161 ); 162 163 GLOBAL bit32 saHwEventAck( 164 agsaRoot_t *agRoot, 165 agsaContext_t *agContext, 166 bit32 queueNum, 167 agsaEventSource_t *eventSource, 168 bit32 param0, 169 bit32 param1 170 ); 171 172 173 /*************************************************************************** 174 * Definition of phy related functions end * 175 ***************************************************************************/ 176 177 /*************************************************************************** 178 * Definition of discovery related functions start * 179 ***************************************************************************/ 180 GLOBAL bit32 saDiscover( 181 agsaRoot_t *agRoot, 182 agsaPortContext_t *agPortContext, 183 bit32 type, 184 bit32 option 185 ); 186 /*************************************************************************** 187 * Definition of discovery related functions end * 188 ***************************************************************************/ 189 190 /*************************************************************************** 191 * Definition of frame related functions start * 192 ***************************************************************************/ 193 GLOBAL bit32 saFrameReadBit32( 194 agsaRoot_t *agRoot, 195 agsaFrameHandle_t agFrame, 196 bit32 frameOffset 197 ); 198 199 GLOBAL void saFrameReadBlock( 200 agsaRoot_t *agRoot, 201 agsaFrameHandle_t agFrame, 202 bit32 frameOffset, 203 void *frameBuffer, 204 bit32 frameBufLen 205 ); 206 /*************************************************************************** 207 * Definition of frame related functions end * 208 ***************************************************************************/ 209 210 /*************************************************************************** 211 * Definition of SATA related functions start * 212 ***************************************************************************/ 213 GLOBAL bit32 saSATAStart( 214 agsaRoot_t *agRoot, 215 agsaIORequest_t *agIORequest, 216 bit32 queueNum, 217 agsaDevHandle_t *agDevHandle, 218 bit32 agRequestType, 219 agsaSATAInitiatorRequest_t *agSATAReq, 220 bit8 agTag, 221 ossaSATACompletedCB_t agCB 222 ); 223 224 GLOBAL bit32 saSATAAbort( 225 agsaRoot_t *agRoot, 226 agsaIORequest_t *agIORequest, 227 bit32 queueNum, 228 agsaDevHandle_t *agDevHandle, 229 bit32 flag, 230 void *abortParam, 231 ossaGenericAbortCB_t agCB 232 ); 233 234 /*************************************************************************** 235 * Definition of SATA related functions end * 236 ***************************************************************************/ 237 238 /*************************************************************************** 239 * Definition of SAS related functions start * 240 ***************************************************************************/ 241 242 GLOBAL bit32 saSendSMPIoctl( 243 agsaRoot_t *agRoot, 244 agsaDevHandle_t *agDevHandle, 245 bit32 queueNum, 246 agsaSMPFrame_t *pSMPFrame, 247 ossaSMPCompletedCB_t agCB 248 ); 249 250 GLOBAL bit32 saSMPStart( 251 agsaRoot_t *agRoot, 252 agsaIORequest_t *agIORequest, 253 bit32 queueNum, 254 agsaDevHandle_t *agDevHandle, 255 bit32 agRequestType, 256 agsaSASRequestBody_t *agRequestBody, 257 ossaSMPCompletedCB_t agCB 258 ); 259 260 GLOBAL bit32 saSMPAbort( 261 agsaRoot_t *agRoot, 262 agsaIORequest_t *agIORequest, 263 bit32 queueNum, 264 agsaDevHandle_t *agDevHandle, 265 bit32 flag, 266 void *abortParam, 267 ossaGenericAbortCB_t agCB 268 ); 269 270 GLOBAL bit32 saSSPStart( 271 agsaRoot_t *agRoot, 272 agsaIORequest_t *agIORequest, 273 bit32 queueNum, 274 agsaDevHandle_t *agDevHandle, 275 bit32 agRequestType, 276 agsaSASRequestBody_t *agRequestBody, 277 agsaIORequest_t *agTMRequest, 278 ossaSSPCompletedCB_t agCB 279 ); 280 281 #ifdef FAST_IO_TEST 282 GLOBAL void *saFastSSPPrepare( 283 void *ioHandle, 284 agsaFastCommand_t *fc, 285 ossaSSPCompletedCB_t cb, 286 void *cbArg); 287 288 GLOBAL bit32 saFastSSPSend(void *ioHandle); 289 GLOBAL bit32 saFastSSPCancel(void *ioHandle); 290 #endif 291 292 GLOBAL bit32 saSSPAbort( 293 agsaRoot_t *agRoot, 294 agsaIORequest_t *agIORequest, 295 bit32 queueNum, 296 agsaDevHandle_t *agDevHandle, 297 bit32 flag, 298 void *abortParam, 299 ossaGenericAbortCB_t agCB 300 ); 301 302 GLOBAL void saGetDifErrorDetails( 303 agsaRoot_t *agRoot, 304 agsaIORequest_t *agIORequest, 305 agsaDifDetails_t *difDetails 306 ); 307 308 GLOBAL bit32 saRegisterEventCallback( 309 agsaRoot_t *agRoot, 310 bit32 eventSourceType, 311 ossaGenericCB_t callbackPtr 312 ); 313 314 /*************************************************************************** 315 * Definition of SAS related functions end * 316 ***************************************************************************/ 317 318 /*************************************************************************** 319 * Definition of Device related functions start * 320 ***************************************************************************/ 321 GLOBAL bit32 saRegisterNewDevice( 322 agsaRoot_t *agRoot, 323 agsaContext_t *agContext, 324 bit32 queueNum, 325 agsaDeviceInfo_t *agDeviceInfo, 326 agsaPortContext_t *agPortContext, 327 bit16 hostAssignedDeviceId 328 ); 329 330 GLOBAL bit32 saDeregisterDeviceHandle( 331 agsaRoot_t *agRoot, 332 agsaContext_t *agContext, 333 agsaDevHandle_t *agDevHandle, 334 bit32 queueNum 335 ); 336 337 GLOBAL bit32 saGetDeviceHandles( 338 agsaRoot_t *agRoot, 339 agsaContext_t *agContext, 340 bit32 queueNum, 341 agsaPortContext_t *agPortContext, 342 bit32 flags, 343 agsaDevHandle_t *agDev[], 344 bit32 skipCount, 345 bit32 maxDevs 346 ); 347 348 GLOBAL bit32 saGetDeviceInfo( 349 agsaRoot_t *agRoot, 350 agsaContext_t *agContext, 351 bit32 option, 352 bit32 queueNum, 353 agsaDevHandle_t *agDevHandle 354 ); 355 356 GLOBAL bit32 saGetDeviceState( 357 agsaRoot_t *agRoot, 358 agsaContext_t *agContext, 359 bit32 queueNum, 360 agsaDevHandle_t *agDevHandle 361 ); 362 363 GLOBAL bit32 saSetDeviceInfo( 364 agsaRoot_t *agRoot, 365 agsaContext_t *agContext, 366 bit32 queueNum , 367 agsaDevHandle_t *agDevHandle, 368 bit32 option, 369 bit32 param, 370 ossaSetDeviceInfoCB_t agCB 371 ); 372 373 GLOBAL bit32 saSetDeviceState( 374 agsaRoot_t *agRoot, 375 agsaContext_t *agContext, 376 bit32 queueNum, 377 agsaDevHandle_t *agDevHandle, 378 bit32 newDeviceState 379 ); 380 381 /*************************************************************************** 382 * Definition of Device related functions end * 383 ***************************************************************************/ 384 385 /*************************************************************************** 386 * Definition of Misc related functions start * 387 ***************************************************************************/ 388 GLOBAL bit32 saFwFlashUpdate( 389 agsaRoot_t *agRoot, 390 agsaContext_t *agContext, 391 bit32 queueNum, 392 agsaUpdateFwFlash_t *flashUpdateInfo 393 ); 394 395 GLOBAL bit32 saFlashExtExecute ( 396 agsaRoot_t *agRoot, 397 agsaContext_t *agContext, 398 bit32 queueNum, 399 agsaFlashExtExecute_t *agFlashExtExe 400 ); 401 402 #ifdef SPC_ENABLE_PROFILE 403 GLOBAL bit32 saFwProfile( 404 agsaRoot_t *agRoot, 405 agsaContext_t *agContext, 406 bit32 queueNum, 407 agsaFwProfile_t *fwProfileInfo 408 ); 409 #endif 410 411 GLOBAL bit32 saEchoCommand( 412 agsaRoot_t *agRoot, 413 agsaContext_t *agContext, 414 bit32 queueNum, 415 void *echoPayload 416 ); 417 418 GLOBAL bit32 saGetControllerInfo( 419 agsaRoot_t *agRoot, 420 agsaControllerInfo_t *controllerInfo 421 ); 422 423 GLOBAL bit32 saGetControllerStatus( 424 agsaRoot_t *agRoot, 425 agsaControllerStatus_t *controllerStatus 426 ); 427 428 GLOBAL bit32 saGetControllerEventLogInfo( 429 agsaRoot_t *agRoot, 430 agsaControllerEventLog_t *eventLogInfo 431 ); 432 433 GLOBAL bit32 saGpioEventSetup( 434 agsaRoot_t *agRoot, 435 agsaContext_t *agContext, 436 bit32 queueNum, 437 agsaGpioEventSetupInfo_t *gpioEventSetupInfo 438 ); 439 440 GLOBAL bit32 saGpioPinSetup( 441 agsaRoot_t *agRoot, 442 agsaContext_t *agContext, 443 bit32 queueNum, 444 agsaGpioPinSetupInfo_t *gpioPinSetupInfo 445 ); 446 447 GLOBAL bit32 saGpioRead( 448 agsaRoot_t *agRoot, 449 agsaContext_t *agContext, 450 bit32 queueNum 451 ); 452 453 GLOBAL bit32 saGpioWrite( 454 agsaRoot_t *agRoot, 455 agsaContext_t *agContext, 456 bit32 queueNum, 457 bit32 gpioWriteMask, 458 bit32 gpioWriteValue 459 ); 460 461 GLOBAL bit32 saSASDiagExecute( 462 agsaRoot_t *agRoot, 463 agsaContext_t *agContext, 464 bit32 queueNum, 465 agsaSASDiagExecute_t *diag 466 ); 467 468 GLOBAL bit32 saSASDiagStartEnd( 469 agsaRoot_t *agRoot, 470 agsaContext_t *agContext, 471 bit32 queueNum, 472 bit32 phyId, 473 bit32 operation 474 ); 475 476 GLOBAL bit32 saGetTimeStamp( 477 agsaRoot_t *agRoot, 478 agsaContext_t *agContext, 479 bit32 queueNum 480 ); 481 482 GLOBAL bit32 saPortControl( 483 agsaRoot_t *agRoot, 484 agsaContext_t *agContext, 485 bit32 queueNum, 486 agsaPortContext_t *agPortContext, 487 bit32 portOperation, 488 bit32 param0, 489 bit32 param1 490 ); 491 492 GLOBAL bit32 saGetRegisterDump( 493 agsaRoot_t *agRoot, 494 agsaContext_t *agContext, 495 bit32 queueNum, 496 agsaRegDumpInfo_t *regDumpInfo 497 ); 498 499 GLOBAL bit32 saGetForensicData( 500 agsaRoot_t *agRoot, 501 agsaContext_t *agContext, 502 agsaForensicData_t *forensicData 503 ); 504 505 bit32 saGetIOErrorStats( 506 agsaRoot_t *agRoot, 507 agsaContext_t *agContext, 508 bit32 flag 509 ); 510 511 bit32 saGetIOEventStats( 512 agsaRoot_t *agRoot, 513 agsaContext_t *agContext, 514 bit32 flag 515 ); 516 517 GLOBAL bit32 saGetNVMDCommand( 518 agsaRoot_t *agRoot, 519 agsaContext_t *agContext, 520 bit32 queueNum, 521 agsaNVMDData_t *NVMDInfo 522 ); 523 524 GLOBAL bit32 saSetNVMDCommand( 525 agsaRoot_t *agRoot, 526 agsaContext_t *agContext, 527 bit32 queueNum, 528 agsaNVMDData_t *NVMDInfo 529 ); 530 531 GLOBAL bit32 saReconfigSASParams( 532 agsaRoot_t *agRoot, 533 agsaContext_t *agContext, 534 bit32 queueNum , 535 agsaSASReconfig_t *agSASConfig 536 ); 537 538 GLOBAL bit32 saSgpio( 539 agsaRoot_t *agRoot, 540 agsaContext_t *agContext, 541 bit32 queueNum, 542 agsaSGpioReqResponse_t *pSGpioReq 543 ); 544 545 GLOBAL bit32 saPCIeDiagExecute( 546 agsaRoot_t *agRoot, 547 agsaContext_t *agContext, 548 bit32 queueNum, 549 agsaPCIeDiagExecute_t *diag); 550 551 552 GLOBAL bit32 saEncryptSelftestExecute( 553 agsaRoot_t *agRoot, 554 agsaContext_t *agContext, 555 bit32 queueNum, 556 bit32 type, 557 bit32 length, 558 void *TestDescriptor); 559 560 GLOBAL bit32 saSetOperator( 561 agsaRoot_t *agRoot, 562 agsaContext_t *agContext, 563 bit32 queueNum, 564 bit32 flag, 565 void *cert); 566 567 GLOBAL bit32 saGetOperator( 568 agsaRoot_t *agRoot, 569 agsaContext_t *agContext, 570 bit32 queueNum, 571 bit32 option, 572 bit32 AddrHi, 573 bit32 AddrLo); 574 575 GLOBAL bit32 saOperatorManagement( 576 agsaRoot_t *agRoot, 577 agsaContext_t *agContext, 578 bit32 queueNum, 579 bit32 flag, 580 bit8 role, 581 agsaID_t *id, 582 agsaEncryptKekBlob_t *kblob); 583 584 585 /*************************************************************************** 586 * Definition of Misc. related functions end * 587 ***************************************************************************/ 588 589 GLOBAL bit32 saSetControllerConfig( 590 agsaRoot_t *agRoot, 591 bit32 queueNum, 592 bit32 modePage, 593 bit32 length, 594 void *buffer, 595 agsaContext_t *agContext 596 ); 597 598 599 GLOBAL bit32 saGetControllerConfig( 600 agsaRoot_t *agRoot, 601 bit32 queueNum, 602 bit32 modePage, 603 bit32 flag0, 604 bit32 flag1, 605 agsaContext_t *agContext 606 ); 607 608 GLOBAL bit32 saEncryptDekCacheUpdate( 609 agsaRoot_t *agRoot, 610 agsaContext_t *agContext, 611 bit32 queueNum, 612 bit32 kekIndex, 613 bit32 dekTableSelect, 614 bit32 dekAddrHi, 615 bit32 dekAddrLo, 616 bit32 dekIndex, 617 bit32 dekNumberOfEntries, 618 bit32 dekBlobFormat, 619 bit32 dekTableKeyEntrySize 620 ); 621 622 GLOBAL bit32 saEncryptDekCacheInvalidate( 623 agsaRoot_t *agRoot, 624 agsaContext_t *agContext, 625 bit32 queueNum, 626 bit32 dekTable, 627 bit32 dekIndex 628 ); 629 630 GLOBAL bit32 saEncryptGetMode( 631 agsaRoot_t *agRoot, 632 agsaContext_t *agContext, 633 agsaEncryptInfo_t *encryptInfo 634 ); 635 636 GLOBAL bit32 saEncryptSetMode ( 637 agsaRoot_t *agRoot, 638 agsaContext_t *agContext, 639 bit32 queueNum, 640 agsaEncryptInfo_t *mode 641 ); 642 643 GLOBAL bit32 saEncryptKekInvalidate( 644 agsaRoot_t *agRoot, 645 agsaContext_t *agContext, 646 bit32 queueNum, 647 bit32 kekIndex 648 ); 649 650 GLOBAL bit32 saEncryptKekUpdate( 651 agsaRoot_t *agRoot, 652 agsaContext_t *agContext, 653 bit32 queueNum, 654 bit32 flags, 655 bit32 newKekIndex, 656 bit32 wrapperKekIndex, 657 bit32 blobFormat, 658 agsaEncryptKekBlob_t *encryptKekBlob 659 ); 660 661 #ifdef HIALEAH_ENCRYPTION 662 GLOBAL bit32 saEncryptHilUpdate( 663 agsaRoot_t *agRoot, 664 agsaContext_t *agContext, 665 bit32 queueNum 666 ); 667 #endif /* HIALEAH_ENCRYPTION */ 668 669 GLOBAL bit32 saGetDFEData( 670 agsaRoot_t *agRoot, 671 agsaContext_t *agContext, 672 bit32 queueNum, 673 bit32 interface, 674 bit32 laneNumber, 675 bit32 interations, 676 agsaSgl_t *agSgl); 677 678 679 GLOBAL bit32 saFatalInterruptHandler( 680 agsaRoot_t *agRoot, 681 bit32 interruptVectorIndex 682 ); 683 684 685 GLOBAL bit32 saDIFEncryptionOffloadStart( 686 agsaRoot_t *agRoot, 687 agsaContext_t *agContext, 688 bit32 queueNum, 689 bit32 op, 690 agsaDifEncPayload_t *agsaDifEncPayload, 691 ossaDIFEncryptionOffloadStartCB_t agCB); 692 693 694 GLOBAL bit32 saVhistCapture( 695 agsaRoot_t *agRoot, 696 agsaContext_t *agContext, 697 bit32 queueNum, 698 bit32 Channel, 699 bit32 NumBitLo, 700 bit32 NumBitHi, 701 bit32 PcieAddrLo, 702 bit32 PcieAddrHi, 703 bit32 ByteCount ); 704 705 706 GLOBAL void saCountActiveIORequests( agsaRoot_t *agRoot); 707 708 #ifdef SA_64BIT_TIMESTAMP 709 osGLOBAL bit64 osTimeStamp64(void); 710 #endif /* SA_64BIT_TIMESTAMP */ 711 712 #ifdef SALL_API_TEST 713 /*************************************************************************** 714 * Definition of LL Test related API functions start * 715 ***************************************************************************/ 716 GLOBAL bit32 saGetLLCounters( 717 agsaRoot_t *agRoot, 718 bit32 counters, 719 agsaLLCountInfo_t *LLCountInfo 720 ); 721 722 GLOBAL bit32 saResetLLCounters( 723 agsaRoot_t *agRoot, 724 bit32 counters 725 ); 726 #endif 727 728 #endif /*__SSDKAPI_H__ */ 729