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 /********************************************************************************
26 ** Version Control Information:
29 *******************************************************************************/
30 /********************************************************************************
34 ** Abstract: This module contains function prototype of the Transport
35 ** Independent (TIAPI) OS Callback interface.
37 ********************************************************************************/
44 * Definition for return status is defined in tiStatus_t in TIDEFS.H
47 /*****************************************************************************
48 * Initiator/Target Shared Callbacks
49 *****************************************************************************/
51 osGLOBAL bit32 ostiGetTransportParam(
65 osGLOBAL void ostiPortEvent(
67 tiPortEvent_t eventType,
72 osGLOBAL bit32 ostiTimeStamp( tiRoot_t *tiRoot);
73 osGLOBAL bit64 ostiTimeStamp64( tiRoot_t *tiRoot);
75 osGLOBAL FORCEINLINE bit32 ostiChipConfigReadBit32(
77 bit32 chipConfigOffset
80 osGLOBAL FORCEINLINE void ostiChipConfigWriteBit32(
82 bit32 chipConfigOffset,
86 osGLOBAL FORCEINLINE bit32 ostiChipReadBit32(
91 osGLOBAL FORCEINLINE void ostiChipWriteBit32(
97 osGLOBAL FORCEINLINE bit8 ostiChipReadBit8(
102 osGLOBAL FORCEINLINE void ostiChipWriteBit8(
108 osGLOBAL void ostiFlashReadBlock(
117 ostiGetDevHandleFromSasAddr(
119 unsigned char *sas_addr
122 osGLOBAL FORCEINLINE void ostidisableEncryption(tiRoot_t *root);
124 osGLOBAL FORCEINLINE void ostiSingleThreadedEnter(
129 osGLOBAL FORCEINLINE void ostiSingleThreadedLeave(
135 osGLOBAL bit32 ostiNumOfLUNIOCTLreq(tiRoot_t *root,
138 void **tiRequestBody,
139 tiIORequest_t **tiIORequest
143 osGLOBAL void ostiEnter(tiRoot_t *ptiRoot, bit32 layer, int io);
144 osGLOBAL void ostiLeave(tiRoot_t *ptiRoot, bit32 layer, int io);
145 #define OSTI_INP_ENTER(root) ostiEnter(root, 2, 0)
146 #define OSTI_INP_LEAVE(root) ostiLeave(root, 2, 0)
147 #define OSTI_OUT_ENTER(root) ostiEnter(root, 2, 1)
148 #define OSTI_OUT_LEAVE(root) ostiLeave(root, 2, 1)
150 #define OSTI_INP_ENTER(root)
151 #define OSTI_INP_LEAVE(root)
152 #define OSTI_OUT_ENTER(root)
153 #define OSTI_OUT_LEAVE(root)
156 osGLOBAL void ostiStallThread(
161 osGLOBAL FORCEINLINE bit8
168 #ifdef LINUX_VERSION_CODE
173 sbit32 volatile *Addend
179 sbit32 volatile *Addend
186 sbit32 volatile *Destination,
193 sbit32 volatile *Destination,
200 sbit32 volatile *Target,
206 osGLOBAL FORCEINLINE sbit32
207 ostiInterlockedIncrement(
209 sbit32 volatile *Addend
212 osGLOBAL FORCEINLINE sbit32
213 ostiInterlockedDecrement(
215 sbit32 volatile *Addend
219 osGLOBAL FORCEINLINE sbit32
222 sbit32 volatile *Destination,
226 osGLOBAL FORCEINLINE sbit32
229 sbit32 volatile *Destination,
233 osGLOBAL FORCEINLINE sbit32
234 ostiInterlockedExchange(
236 sbit32 volatile *Target,
239 #endif /*LINUX_VERSION_CODE*/
241 osGLOBAL bit32 ostiAllocMemory(
245 bit32 * physAddrUpper,
246 bit32 * physAddrLower,
249 agBOOLEAN isCacheable
252 osGLOBAL bit32 ostiFreeMemory(
258 osGLOBAL FORCEINLINE void ostiCacheFlush(
265 osGLOBAL FORCEINLINE void ostiCacheInvalidate(
272 osGLOBAL FORCEINLINE void ostiCachePreFlush(
280 * The following two functions are for SAS/SATA
289 ostiInterruptDisable(
294 osGLOBAL FORCEINLINE bit32
295 ostiChipReadBit32Ext(
301 osGLOBAL FORCEINLINE void
302 ostiChipWriteBit32Ext(
310 /*****************************************************************************
311 * Initiator specific Callbacks
312 *****************************************************************************/
315 * Initiator specific IO Completion
317 osGLOBAL void ostiInitiatorIOCompleted(
319 tiIORequest_t *tiIORequest,
322 tiSenseData_t *senseData,
326 osGLOBAL tiDeviceHandle_t*
327 ostiMapToDevHandle(tiRoot_t *root,
332 osGLOBAL bit32 ostiSendResetDeviceIoctl(tiRoot_t *root,
337 unsigned long resetType
341 ostiGetSenseKeyCount(tiRoot_t *root,
348 ostiGetSCSIStatusCount(tiRoot_t *root,
350 void *ScsiStatusCount,
355 ostiSetDeviceQueueDepth(tiRoot_t *tiRoot,
356 tiIORequest_t *tiIORequest,
362 typedef void (*ostiFastSSPCb_t)(tiRoot_t *ptiRoot,
364 tiIOStatus_t IOStatus,
367 void osti_FastIOCb(tiRoot_t *ptiRoot,
369 tiIOStatus_t IOStatus,
374 ostiInitiatorSMPCompleted(tiRoot_t *tiRoot,
375 tiIORequest_t *tiSMPRequest,
376 tiSMPStatus_t smpStatus,
381 * Initiator specific event
383 osGLOBAL void ostiInitiatorEvent (
385 tiPortalContext_t *portalContext,
386 tiDeviceHandle_t *tiDeviceHandle,
387 tiIntrEventType_t eventType,
394 * PMC-Sierra IOCTL semaphoring
396 osGLOBAL void ostiIOCTLClearSignal (
403 osGLOBAL void ostiIOCTLWaitForSignal (
410 osGLOBAL void ostiIOCTLSetSignal (
417 osGLOBAL void ostiIOCTLWaitForComplete (
424 osGLOBAL void ostiIOCTLComplete (
431 /*****************************************************************************
432 * Target specific Callbacks
433 *****************************************************************************/
435 osGLOBAL void ostiProcessScsiReq(
437 tiTargetScsiCmnd_t *tiTgtScsiCmnd,
440 tiIORequest_t *tiIORequest,
441 tiDeviceHandle_t *tiDeviceHandle);
443 osGLOBAL void ostiNextDataPhase(
445 tiIORequest_t *tiIORequest);
447 osGLOBAL void ostiTaskManagement (
451 tiIORequest_t *refTiIORequest,
452 tiIORequest_t *tiTMRequest,
453 tiDeviceHandle_t *tiDeviceHandle);
455 osGLOBAL void ostiTargetIOCompleted(
457 tiIORequest_t *tiIORequest,
461 osGLOBAL bit32 ostiTargetEvent (
463 tiPortalContext_t *portalContext,
464 tiDeviceHandle_t *tiDeviceHandle,
465 tiTgtEventType_t eventType,
470 osGLOBAL void ostiTargetIOError(
472 tiIORequest_t *tiIORequest,
477 osGLOBAL void ostiTargetTmCompleted(
479 tiIORequest_t *tiTmRequest,
484 osGLOBAL void ostiPCI_TRIGGER( tiRoot_t *tiRoot );
487 #endif /* OSTIAPI_H */