1 /*******************************************************************************
2 *Copyright (c) 2014 PMC-Sierra, Inc. All rights reserved.
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
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.
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
23 ********************************************************************************/
24 /********************************************************************************
27 * Abstract: This module contains function prototype of the Transport
28 * Independent API (TIAPI) Layer for both initiator and target.
29 ** Version Control Information:
32 *******************************************************************************/
38 #include <dev/pms/RefTisa/tisa/api/tiglobal.h>
39 #include <dev/pms/RefTisa/tisa/api/titypes.h>
41 /*****************************************************************************
42 * INITIATOR/TARGET SHARED APIs
43 *****************************************************************************/
45 osGLOBAL void tiCOMGetResource (
47 tiLoLevelResource_t *loResource,
48 tiInitiatorResource_t *initiatorResource,
49 tiTargetResource_t *targetResource,
50 tiTdSharedMem_t *tdSharedMem
53 osGLOBAL bit32 tiCOMInit(
55 tiLoLevelResource_t *loResource,
56 tiInitiatorResource_t *initiatorResource,
57 tiTargetResource_t *targetResource,
58 tiTdSharedMem_t *tdSharedMem
61 osGLOBAL bit32 tiCOMPortInit(
66 osGLOBAL bit32 tiCOMPortStart(
69 tiPortalContext_t *portalContext,
73 osGLOBAL void tiCOMShutDown( tiRoot_t *tiRoot);
75 osGLOBAL bit32 tiCOMPortStop(
77 tiPortalContext_t *portalContext
80 osGLOBAL void tiCOMReset (
88 tiIOCTLPayload_t *agIOCTLPayload,
94 osGLOBAL void ostiNumOfLUNIOCTLRsp(
101 tiIORequest_t *tiIORequest,
102 tiDeviceHandle_t *tiDeviceHandle,
104 tiIOCTLPayload_t *agIOCTLPayload,
110 osGLOBAL FORCEINLINE bit32 tiCOMInterruptHandler(
115 osGLOBAL FORCEINLINE bit32 tiCOMDelayedInterruptHandler (
122 osGLOBAL bit32 tiCOMLegacyInterruptHandler(
128 osGLOBAL void tiCOMLegacyDelayedInterruptHandler(
134 osGLOBAL void tiCOMTimerTick( tiRoot_t *tiRoot );
136 osGLOBAL void tiCOMSystemInterruptsActive (
142 osGLOBAL FORCEINLINE void
143 tiCOMInterruptEnable(
147 osGLOBAL void tiCOMFrameReadBlock(
153 osGLOBAL bit32 tiCOMEncryptGetInfo(
156 osGLOBAL bit32 tiCOMEncryptSetMode(
158 bit32 securityCipherMode
161 osGLOBAL bit32 tiCOMSetControllerConfig (
169 osGLOBAL bit32 tiCOMGetControllerConfig(
177 osGLOBAL bit32 tiCOMEncryptDekAdd(
180 bit32 dekTableSelect,
184 bit32 dekNumberOfEntries,
186 bit32 dekTableKeyEntrySize
189 osGLOBAL bit32 tiCOMEncryptDekInvalidate(
196 osGLOBAL bit32 tiCOMEncryptKekAdd(
199 bit32 wrapperKekIndex,
201 tiEncryptKekBlob_t *encryptKekBlob
204 osGLOBAL tiDeviceHandle_t *
205 tiINIGetExpDeviceHandleBySasAddress(
207 tiPortalContext_t * tiPortalContext,
214 #ifdef HIALEAH_ENCRYPTION
215 osGLOBAL bit32 tiCOMEncryptHilSet(tiRoot_t *tiRoot );
216 #endif /* HIALEAH_ENCRYPTION */
218 osGLOBAL bit32 tiCOMEncryptKekStore(
223 osGLOBAL bit32 tiCOMEncryptKekLoad(
228 osGLOBAL bit32 tiCOMEncryptSelfTest(
235 osGLOBAL bit32 tiCOMSetOperator(
241 osGLOBAL bit32 tiCOMGetOperator(
248 osGLOBAL bit32 tiCOMOperatorManagement(
253 tiEncryptKekBlob_t *kekBlob
257 * PMC-Sierra Management IOCTL module
259 osGLOBAL bit32 tiCOMMgntIOCTL(
261 tiIOCTLPayload_t *agIOCTLPayload,
267 osGLOBAL void ostiCOMMgntIOCTLRsp(
272 osGLOBAL void ostiRegDumpIOCTLRsp(
277 osGLOBAL void ostiSetNVMDIOCTLRsp(
282 osGLOBAL void ostiGetPhyProfileIOCTLRsp(
287 osGLOBAL void ostiGetNVMDIOCTLRsp(
291 osGLOBAL bit32 tiCOMGetPortInfo(
293 tiPortalContext_t *portalContext,
294 tiPortInfo_t *tiPortInfo
297 osGLOBAL void ostiSendSMPIOCTLRsp(
302 osGLOBAL void ostiGenEventIOCTLRsp(
308 ostiGetDeviceInfoIOCTLRsp(
315 ostiGetIoErrorStatsIOCTLRsp(
322 ostiGetIoEventStatsIOCTLRsp(
329 ostiGetForensicDataIOCTLRsp(
336 #ifdef SPC_ENABLE_PROFILE
337 osGLOBAL void ostiFWProfileIOCTLRsp(
344 /*****************************************************************************
345 * INITIATOR SPECIFIC APIs
346 *****************************************************************************/
349 * Session management module.
351 osGLOBAL bit32 tiINIGetExpander(
353 tiPortalContext_t * tiPortalContext,
354 tiDeviceHandle_t * tiDev,
355 tiDeviceHandle_t ** tiExp
357 osGLOBAL bit32 tiINIGetDeviceHandles(
359 tiPortalContext_t *portalContext,
360 tiDeviceHandle_t *agDev[],
364 osGLOBAL bit32 tiINIGetDeviceHandlesForWinIOCTL(
366 tiPortalContext_t *portalContext,
367 tiDeviceHandle_t *agDev[],
371 osGLOBAL void tiIniGetDirectSataSasAddr(tiRoot_t * tiRoot, bit32 phyId, bit8 **sasAddressHi, bit8 **sasAddressLo);
372 osGLOBAL bit32 tiINIDiscoverTargets(
374 tiPortalContext_t *portalContext,
378 osGLOBAL bit32 tiINILogin(
380 tiDeviceHandle_t *tiDeviceHandle
383 osGLOBAL bit32 tiINILogout(
385 tiDeviceHandle_t *tiDeviceHandle
388 osGLOBAL bit32 tiINIGetDeviceInfo(
390 tiDeviceHandle_t *tiDeviceHandle,
391 tiDeviceInfo_t *tiDeviceInfo);
394 * Transport recovery module.
396 osGLOBAL void tiINITransportRecovery(
398 tiDeviceHandle_t *tiDeviceHandle
401 osGLOBAL bit32 tiINITaskManagement (
403 tiDeviceHandle_t *tiDeviceHandle,
406 tiIORequest_t *taskTag,
407 tiIORequest_t *currentTaskTag
409 osGLOBAL bit32 tiINISMPStart(
411 tiIORequest_t *tiIORequest,
412 tiDeviceHandle_t *tiDeviceHandle,
413 tiSMPFrame_t *tiScsiRequest,
415 bit32 interruptContext
420 osGLOBAL bit32 tiINIIOStart(
422 tiIORequest_t *tiIORequest,
423 tiDeviceHandle_t *tiDeviceHandle,
424 tiScsiInitiatorRequest_t *tiScsiRequest,
426 bit32 interruptContext
429 osGLOBAL void tiINIDebugDumpIO(
431 tiIORequest_t *tiIORequest
434 osGLOBAL bit32 tiINIIOStartDif(
436 tiIORequest_t *tiIORequest,
437 tiDeviceHandle_t *tiDeviceHandle,
438 tiScsiInitiatorRequest_t *tiScsiRequest,
440 bit32 interruptContext,
443 osGLOBAL bit32 tiINISuperIOStart (
445 tiIORequest_t *tiIORequest,
446 tiDeviceHandle_t *tiDeviceHandle,
447 tiSuperScsiInitiatorRequest_t *tiScsiRequest,
449 bit32 interruptContext
453 osGLOBAL void *tiINIFastIOPrepare(
456 agsaFastCommand_t *fc);
462 agsaFastCommand_t *fc,
466 osGLOBAL bit32 tiINIFastIOSend(void *ioHandle);
467 osGLOBAL bit32 tiINIFastIOCancel(void *ioHandle);
470 osGLOBAL bit32 tiCOMEncryptGetMode(tiRoot_t *tiRoot);
471 osGLOBAL bit32 tiCOMEncryptSetOn_Off(tiRoot_t *tiRoot, bit32 On);
473 osGLOBAL bit32 tiInitDevEncrypt(
477 osGLOBAL bit32 tiTGTSuperIOStart (
479 tiIORequest_t *tiIORequest,
480 tiSuperScsiTargetRequest_t *tiScsiRequest
483 osGLOBAL void tiINITimerTick(
488 osGLOBAL bit32 tiINIIOAbort(
490 tiIORequest_t *taskTag
493 osGLOBAL bit32 tiINIIOAbortAll(
495 tiDeviceHandle_t *tiDeviceHandle
498 * Event Logging module
500 osGLOBAL bit32 tiINIReportErrorToEventLog(
502 tiEVTData_t *agEventData
506 /*****************************************************************************
507 * TARGET SPECIFIC APIs
508 *****************************************************************************/
510 osGLOBAL void tiTGTTimerTick(
514 osGLOBAL void *tiTGTSenseBufferGet(
516 tiIORequest_t *tiIORequest,
520 osGLOBAL void tiTGTSetResp(
522 tiIORequest_t *tiIORequest,
523 bit32 dataSentLength,
528 osGLOBAL bit32 tiTGTIOStart (
530 tiIORequest_t *tiIORequest,
537 osGLOBAL bit32 tiTGTIOStartMirror (
539 tiIORequest_t *tiIORequest,
543 void *sglVirtualAddr,
544 tiSgl_t *dataSGLMirror,
545 void *sglVirtualAddrMirror
548 osGLOBAL bit32 tiTGTIOStartDif (
550 tiIORequest_t *tiIORequest,
554 void *sglVirtualAddr,
559 osGLOBAL bit32 tiTGTGetDeviceHandles(
561 tiPortalContext_t *portalContext,
562 tiDeviceHandle_t *agDev[],
566 osGLOBAL bit32 tiTGTGetDeviceInfo(
568 tiDeviceHandle_t *tiDeviceHandle,
569 tiDeviceInfo_t *tiDeviceInfo);
571 osGLOBAL bit32 tiTGTIOAbort(
573 tiIORequest_t *taskTag
576 osGLOBAL bit32 tiTGTSendTmResp (
578 tiIORequest_t *tiTMRequest,
582 void tiPCI_TRIGGER( tiRoot_t *tiRoot);
584 void tiComCountActiveIORequests( tiRoot_t *tiRoot);