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