1/******************************************************************************* 2*Copyright (c) 2014 PMC-Sierra, Inc. All rights reserved. 3* 4*Redistribution and use in source and binary forms, with or without modification, are permitted provided 5*that the following conditions are met: 6*1. Redistributions of source code must retain the above copyright notice, this list of conditions and the 7*following disclaimer. 8*2. Redistributions in binary form must reproduce the above copyright notice, 9*this list of conditions and the following disclaimer in the documentation and/or other materials provided 10*with the distribution. 11* 12*THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED 13*WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 14*FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 15*FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 16*NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 17*BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 18*LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 19*SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE 20* 21* 22********************************************************************************/ 23/******************************************************************************** 24* tiapi.h 25* 26* Abstract: This module contains function prototype of the Transport 27* Independent API (TIAPI) Layer for both initiator and target. 28** Version Control Information: 29** 30** 31*******************************************************************************/ 32 33 34#ifndef TIAPI_H 35#define TIAPI_H 36 37#include <dev/pms/RefTisa/tisa/api/tiglobal.h> 38#include <dev/pms/RefTisa/tisa/api/titypes.h> 39 40/***************************************************************************** 41 * INITIATOR/TARGET SHARED APIs 42 *****************************************************************************/ 43 44osGLOBAL void tiCOMGetResource ( 45 tiRoot_t *tiRoot, 46 tiLoLevelResource_t *loResource, 47 tiInitiatorResource_t *initiatorResource, 48 tiTargetResource_t *targetResource, 49 tiTdSharedMem_t *tdSharedMem 50 ); 51 52osGLOBAL bit32 tiCOMInit( 53 tiRoot_t *tiRoot, 54 tiLoLevelResource_t *loResource, 55 tiInitiatorResource_t *initiatorResource, 56 tiTargetResource_t *targetResource, 57 tiTdSharedMem_t *tdSharedMem 58 ); 59 60osGLOBAL bit32 tiCOMPortInit( 61 tiRoot_t *tiRoot, 62 bit32 sysIntsActive 63 ); 64 65osGLOBAL bit32 tiCOMPortStart( 66 tiRoot_t *tiRoot, 67 bit32 portID, 68 tiPortalContext_t *portalContext, 69 bit32 option 70 ); 71 72osGLOBAL void tiCOMShutDown( tiRoot_t *tiRoot); 73 74osGLOBAL bit32 tiCOMPortStop( 75 tiRoot_t *tiRoot, 76 tiPortalContext_t *portalContext 77 ); 78 79osGLOBAL void tiCOMReset ( 80 tiRoot_t *tiRoot, 81 bit32 option 82 ); 83 84osGLOBAL bit32 85tdsaGetNumOfLUNIOCTL( 86 tiRoot_t *tiRoot, 87 tiIOCTLPayload_t *agIOCTLPayload, 88 void *agParam1, 89 void *agParam2, 90 void *agParam3 91 ); 92 93osGLOBAL void ostiNumOfLUNIOCTLRsp( 94 tiRoot_t *tiRoot, 95 bit32 status 96 ); 97osGLOBAL bit32 98tiNumOfLunIOCTLreq( 99 tiRoot_t *tiRoot, 100 tiIORequest_t *tiIORequest, 101 tiDeviceHandle_t *tiDeviceHandle, 102 void *tiRequestBody, 103 tiIOCTLPayload_t *agIOCTLPayload, 104 void *agParam1, 105 void *agParam2 106 ); 107 108 109osGLOBAL FORCEINLINE bit32 tiCOMInterruptHandler( 110 tiRoot_t *tiRoot, 111 bit32 channelNum 112 ); 113 114osGLOBAL FORCEINLINE bit32 tiCOMDelayedInterruptHandler ( 115 tiRoot_t *tiRoot, 116 bit32 channelNum, 117 bit32 count, 118 bit32 context 119 ); 120 121osGLOBAL bit32 tiCOMLegacyInterruptHandler( 122 tiRoot_t *tiRoot, 123 bit32 channelNum 124 ); 125 126 127osGLOBAL void tiCOMLegacyDelayedInterruptHandler( 128 tiRoot_t *tiRoot, 129 bit32 channelNum, 130 bit32 count, 131 bit32 context 132 ); 133osGLOBAL void tiCOMTimerTick( tiRoot_t *tiRoot ); 134 135osGLOBAL void tiCOMSystemInterruptsActive ( 136 tiRoot_t *tiRoot , 137 bit32 sysIntsActive 138 ); 139 140 141osGLOBAL FORCEINLINE void 142tiCOMInterruptEnable( 143 tiRoot_t * tiRoot, 144 bit32 channelNum); 145 146osGLOBAL void tiCOMFrameReadBlock( 147 tiRoot_t *tiRoot, 148 void *agFrame, 149 bit32 FrameOffset, 150 void *FrameBuffer, 151 bit32 FrameBufLen ); 152osGLOBAL bit32 tiCOMEncryptGetInfo( 153 tiRoot_t *tiRoot); 154 155osGLOBAL bit32 tiCOMEncryptSetMode( 156 tiRoot_t *tiRoot, 157 bit32 securityCipherMode 158 ); 159 160osGLOBAL bit32 tiCOMSetControllerConfig ( 161 tiRoot_t *tiRoot, 162 bit32 modePage, 163 bit32 length, 164 void *buffer, 165 void *context 166 ); 167 168osGLOBAL bit32 tiCOMGetControllerConfig( 169 tiRoot_t *tiRoot, 170 bit32 modePage, 171 bit32 flag, 172 void *context 173 ); 174 175 176osGLOBAL bit32 tiCOMEncryptDekAdd( 177 tiRoot_t *tiRoot, 178 bit32 kekIndex, 179 bit32 dekTableSelect, 180 bit32 dekAddrHi, 181 bit32 dekAddrLo, 182 bit32 dekIndex, 183 bit32 dekNumberOfEntries, 184 bit32 dekBlobFormat, 185 bit32 dekTableKeyEntrySize 186 ); 187 188osGLOBAL bit32 tiCOMEncryptDekInvalidate( 189 tiRoot_t *tiRoot, 190 bit32 dekTable, 191 bit32 dekIndex 192 ); 193 194 195osGLOBAL bit32 tiCOMEncryptKekAdd( 196 tiRoot_t *tiRoot, 197 bit32 kekIndex, 198 bit32 wrapperKekIndex, 199 bit32 blobFormat, 200 tiEncryptKekBlob_t *encryptKekBlob 201 ); 202 203osGLOBAL tiDeviceHandle_t * 204tiINIGetExpDeviceHandleBySasAddress( 205 tiRoot_t * tiRoot, 206 tiPortalContext_t * tiPortalContext, 207 bit32 sas_addr_hi, 208 bit32 sas_addr_lo, 209 bit32 maxDevs 210 ); 211 212 213#ifdef HIALEAH_ENCRYPTION 214osGLOBAL bit32 tiCOMEncryptHilSet(tiRoot_t *tiRoot ); 215#endif /* HIALEAH_ENCRYPTION */ 216 217osGLOBAL bit32 tiCOMEncryptKekStore( 218 tiRoot_t *tiRoot, 219 bit32 kekIndex 220 ); 221 222osGLOBAL bit32 tiCOMEncryptKekLoad( 223 tiRoot_t *tiRoot, 224 bit32 kekIndex 225 ); 226 227osGLOBAL bit32 tiCOMEncryptSelfTest( 228 tiRoot_t *tiRoot, 229 bit32 type, 230 bit32 length, 231 void *TestDescriptor 232 ); 233 234osGLOBAL bit32 tiCOMSetOperator( 235 tiRoot_t *tiRoot, 236 bit32 flag, 237 void *cert 238 ); 239 240osGLOBAL bit32 tiCOMGetOperator( 241 tiRoot_t *tiRoot, 242 bit32 option, 243 bit32 AddrHi, 244 bit32 AddrLo 245 ); 246 247osGLOBAL bit32 tiCOMOperatorManagement( 248 tiRoot_t *tiRoot, 249 bit32 flag, 250 bit8 role, 251 tiID_t *idString, 252 tiEncryptKekBlob_t *kekBlob 253 ); 254 255/* 256 * PMC-Sierra Management IOCTL module 257 */ 258osGLOBAL bit32 tiCOMMgntIOCTL( 259 tiRoot_t *tiRoot, 260 tiIOCTLPayload_t *agIOCTLPayload, 261 void *agParam1, 262 void *agParam2, 263 void *agParam3 264 ); 265 266osGLOBAL void ostiCOMMgntIOCTLRsp( 267 tiRoot_t *tiRoot, 268 bit32 status 269 ); 270 271osGLOBAL void ostiRegDumpIOCTLRsp( 272 tiRoot_t *tiRoot, 273 bit32 status 274 ); 275 276osGLOBAL void ostiSetNVMDIOCTLRsp( 277 tiRoot_t *tiRoot, 278 bit32 status 279 ); 280 281osGLOBAL void ostiGetPhyProfileIOCTLRsp( 282 tiRoot_t *tiRoot, 283 bit32 status 284 ); 285 286osGLOBAL void ostiGetNVMDIOCTLRsp( 287 tiRoot_t *tiRoot, 288 bit32 status 289 ); 290osGLOBAL bit32 tiCOMGetPortInfo( 291 tiRoot_t *tiRoot, 292 tiPortalContext_t *portalContext, 293 tiPortInfo_t *tiPortInfo 294 ); 295 296osGLOBAL void ostiSendSMPIOCTLRsp( 297 tiRoot_t *tiRoot, 298 bit32 status 299 ); 300 301osGLOBAL void ostiGenEventIOCTLRsp( 302 tiRoot_t *tiRoot, 303 bit32 status 304 ); 305 306osGLOBAL void 307ostiGetDeviceInfoIOCTLRsp( 308 tiRoot_t *tiRoot, 309 bit32 status, 310 void *param 311 ); 312 313osGLOBAL void 314ostiGetIoErrorStatsIOCTLRsp( 315 tiRoot_t *tiRoot, 316 bit32 status, 317 void *param 318 ); 319 320osGLOBAL void 321ostiGetIoEventStatsIOCTLRsp( 322 tiRoot_t *tiRoot, 323 bit32 status, 324 void *param 325 ); 326 327osGLOBAL void 328ostiGetForensicDataIOCTLRsp( 329 tiRoot_t *tiRoot, 330 bit32 status, 331 void *param 332 ); 333 334 335#ifdef SPC_ENABLE_PROFILE 336osGLOBAL void ostiFWProfileIOCTLRsp( 337 tiRoot_t *tiRoot, 338 bit32 status, 339 bit32 len 340 ); 341#endif 342 343/***************************************************************************** 344 * INITIATOR SPECIFIC APIs 345 *****************************************************************************/ 346 347/* 348 * Session management module. 349 */ 350osGLOBAL bit32 tiINIGetExpander( 351 tiRoot_t * tiRoot, 352 tiPortalContext_t * tiPortalContext, 353 tiDeviceHandle_t * tiDev, 354 tiDeviceHandle_t ** tiExp 355 ); 356osGLOBAL bit32 tiINIGetDeviceHandles( 357 tiRoot_t *tiRoot, 358 tiPortalContext_t *portalContext, 359 tiDeviceHandle_t *agDev[], 360 bit32 maxDevs 361 ); 362 363osGLOBAL bit32 tiINIGetDeviceHandlesForWinIOCTL( 364 tiRoot_t *tiRoot, 365 tiPortalContext_t *portalContext, 366 tiDeviceHandle_t *agDev[], 367 bit32 maxDevs 368 ); 369 370osGLOBAL void tiIniGetDirectSataSasAddr(tiRoot_t * tiRoot, bit32 phyId, bit8 **sasAddressHi, bit8 **sasAddressLo); 371osGLOBAL bit32 tiINIDiscoverTargets( 372 tiRoot_t *tiRoot, 373 tiPortalContext_t *portalContext, 374 bit32 option 375 ); 376 377osGLOBAL bit32 tiINILogin( 378 tiRoot_t *tiRoot, 379 tiDeviceHandle_t *tiDeviceHandle 380 ); 381 382osGLOBAL bit32 tiINILogout( 383 tiRoot_t *tiRoot, 384 tiDeviceHandle_t *tiDeviceHandle 385 ); 386 387osGLOBAL bit32 tiINIGetDeviceInfo( 388 tiRoot_t *tiRoot, 389 tiDeviceHandle_t *tiDeviceHandle, 390 tiDeviceInfo_t *tiDeviceInfo); 391 392/* 393 * Transport recovery module. 394 */ 395osGLOBAL void tiINITransportRecovery( 396 tiRoot_t *tiRoot, 397 tiDeviceHandle_t *tiDeviceHandle 398 ); 399 400osGLOBAL bit32 tiINITaskManagement ( 401 tiRoot_t *tiRoot, 402 tiDeviceHandle_t *tiDeviceHandle, 403 bit32 task, 404 tiLUN_t *lun, 405 tiIORequest_t *taskTag, 406 tiIORequest_t *currentTaskTag 407 ); 408osGLOBAL bit32 tiINISMPStart( 409 tiRoot_t *tiRoot, 410 tiIORequest_t *tiIORequest, 411 tiDeviceHandle_t *tiDeviceHandle, 412 tiSMPFrame_t *tiScsiRequest, 413 void *tiSMPBody, 414 bit32 interruptContext 415 ); 416/* 417 * I/O module. 418 */ 419osGLOBAL bit32 tiINIIOStart( 420 tiRoot_t *tiRoot, 421 tiIORequest_t *tiIORequest, 422 tiDeviceHandle_t *tiDeviceHandle, 423 tiScsiInitiatorRequest_t *tiScsiRequest, 424 void *tiRequestBody, 425 bit32 interruptContext 426 ); 427 428osGLOBAL void tiINIDebugDumpIO( 429 tiRoot_t *tiRoot, 430 tiIORequest_t *tiIORequest 431 ); 432 433osGLOBAL bit32 tiINIIOStartDif( 434 tiRoot_t *tiRoot, 435 tiIORequest_t *tiIORequest, 436 tiDeviceHandle_t *tiDeviceHandle, 437 tiScsiInitiatorRequest_t *tiScsiRequest, 438 void *tiRequestBody, 439 bit32 interruptContext, 440 tiDif_t *difOption 441 ); 442osGLOBAL bit32 tiINISuperIOStart ( 443 tiRoot_t *tiRoot, 444 tiIORequest_t *tiIORequest, 445 tiDeviceHandle_t *tiDeviceHandle, 446 tiSuperScsiInitiatorRequest_t *tiScsiRequest, 447 void *tiRequestBody, 448 bit32 interruptContext 449 ); 450 451#ifdef FAST_IO_TEST 452osGLOBAL void *tiINIFastIOPrepare( 453 tiRoot_t *tiRoot, 454 void *ioHandle, 455 agsaFastCommand_t *fc); 456 457osGLOBAL void* 458tiINIFastIOPrepare2( 459 tiRoot_t *tiRoot, 460 void *ioHandle, 461 agsaFastCommand_t *fc, 462 void *pMessage, 463 void *pRequest); 464 465osGLOBAL bit32 tiINIFastIOSend(void *ioHandle); 466osGLOBAL bit32 tiINIFastIOCancel(void *ioHandle); 467#endif 468 469osGLOBAL bit32 tiCOMEncryptGetMode(tiRoot_t *tiRoot); 470osGLOBAL bit32 tiCOMEncryptSetOn_Off(tiRoot_t *tiRoot, bit32 On); 471 472osGLOBAL bit32 tiInitDevEncrypt( 473 tiRoot_t *tiRoot, 474 void *tideviceptr ); 475 476osGLOBAL bit32 tiTGTSuperIOStart ( 477 tiRoot_t *tiRoot, 478 tiIORequest_t *tiIORequest, 479 tiSuperScsiTargetRequest_t *tiScsiRequest 480 ); 481 482osGLOBAL void tiINITimerTick( 483 tiRoot_t *tiRoot 484 ); 485 486 487osGLOBAL bit32 tiINIIOAbort( 488 tiRoot_t *tiRoot, 489 tiIORequest_t *taskTag 490 ); 491 492osGLOBAL bit32 tiINIIOAbortAll( 493 tiRoot_t *tiRoot, 494 tiDeviceHandle_t *tiDeviceHandle 495 ); 496/* 497 * Event Logging module 498 */ 499osGLOBAL bit32 tiINIReportErrorToEventLog( 500 tiRoot_t *tiRoot, 501 tiEVTData_t *agEventData 502 ); 503 504 505/***************************************************************************** 506 * TARGET SPECIFIC APIs 507 *****************************************************************************/ 508 509osGLOBAL void tiTGTTimerTick( 510 tiRoot_t *tiRoot 511 ); 512 513osGLOBAL void *tiTGTSenseBufferGet( 514 tiRoot_t *tiRoot, 515 tiIORequest_t *tiIORequest, 516 bit32 length 517 ); 518 519osGLOBAL void tiTGTSetResp( 520 tiRoot_t *tiRoot, 521 tiIORequest_t *tiIORequest, 522 bit32 dataSentLength, 523 bit8 ScsiStatus, 524 bit32 senseLength 525 ); 526 527osGLOBAL bit32 tiTGTIOStart ( 528 tiRoot_t *tiRoot, 529 tiIORequest_t *tiIORequest, 530 bit32 dataOffset, 531 bit32 dataLength, 532 tiSgl_t *dataSGL, 533 void *sglVirtualAddr 534 ); 535 536osGLOBAL bit32 tiTGTIOStartMirror ( 537 tiRoot_t *tiRoot, 538 tiIORequest_t *tiIORequest, 539 bit32 dataOffset, 540 bit32 dataLength, 541 tiSgl_t *dataSGL, 542 void *sglVirtualAddr, 543 tiSgl_t *dataSGLMirror, 544 void *sglVirtualAddrMirror 545 ); 546 547osGLOBAL bit32 tiTGTIOStartDif ( 548 tiRoot_t *tiRoot, 549 tiIORequest_t *tiIORequest, 550 bit32 dataOffset, 551 bit32 dataLength, 552 tiSgl_t *dataSGL, 553 void *sglVirtualAddr, 554 tiDif_t *difOption 555 ); 556 557 558osGLOBAL bit32 tiTGTGetDeviceHandles( 559 tiRoot_t *tiRoot, 560 tiPortalContext_t *portalContext, 561 tiDeviceHandle_t *agDev[], 562 bit32 maxDevs 563 ); 564 565osGLOBAL bit32 tiTGTGetDeviceInfo( 566 tiRoot_t *tiRoot, 567 tiDeviceHandle_t *tiDeviceHandle, 568 tiDeviceInfo_t *tiDeviceInfo); 569 570osGLOBAL bit32 tiTGTIOAbort( 571 tiRoot_t *tiRoot, 572 tiIORequest_t *taskTag 573 ); 574 575osGLOBAL bit32 tiTGTSendTmResp ( 576 tiRoot_t *tiRoot, 577 tiIORequest_t *tiTMRequest, 578 bit32 status 579 ); 580 581void tiPCI_TRIGGER( tiRoot_t *tiRoot); 582 583void tiComCountActiveIORequests( tiRoot_t *tiRoot); 584 585#endif /* TIAPI_H */ 586