tdsmapi.h revision 285809
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*   tmsmapi.h
26*
27*   Abstract:   This module contains function prototype of the SAT
28*               Module (SM) API callback for initiator.
29*******************************************************************************/
30
31#ifndef TDSMAPI_H
32#define TDSMAPI_H
33
34osGLOBAL void
35tdsmIDCompletedCB(
36                  smRoot_t   *smRoot,
37                  smIORequest_t   *smIORequest,
38                  smDeviceHandle_t   *smDeviceHandle,
39                  bit32    status,
40                  void    *IDdata
41                 );
42
43osGLOBAL FORCEINLINE void
44tdsmIOCompletedCB(
45                  smRoot_t   *smRoot,
46                  smIORequest_t   *smIORequest,
47                  bit32    status,
48                  bit32    statusDetail,
49                  smSenseData_t   *senseData,
50                  bit32    interruptContext
51                  );
52osGLOBAL void
53tdsmEventCB(
54                smRoot_t          *smRoot,
55                smDeviceHandle_t  *smDeviceHandle,
56                smIntrEventType_t  eventType,
57                bit32              eventStatus,
58                void              *parm
59                );
60
61osGLOBAL FORCEINLINE void
62tdsmSingleThreadedEnter(
63                        smRoot_t   *smRoot,
64                        bit32       syncLockId
65                       );
66
67osGLOBAL FORCEINLINE void
68tdsmSingleThreadedLeave(
69                        smRoot_t   *smRoot,
70                        bit32       syncLockId
71                        );
72
73osGLOBAL FORCEINLINE bit8
74tdsmBitScanForward(
75                  smRoot_t   *smRoot,
76                  bit32      *Index,
77                  bit32       Mask
78                  );
79
80#ifdef LINUX_VERSION_CODE
81
82osGLOBAL FORCEINLINE sbit32
83tdsmInterlockedIncrement(
84                   smRoot_t        *smRoot,
85                   sbit32 volatile *Addend
86                   );
87
88osGLOBAL FORCEINLINE sbit32
89tdsmInterlockedDecrement(
90                   smRoot_t         *smRoot,
91                   sbit32 volatile  *Addend
92                   );
93
94osGLOBAL FORCEINLINE sbit32
95tdsmAtomicBitClear(
96               smRoot_t         *smRoot,
97               sbit32 volatile  *Destination,
98               sbit32            Value
99               );
100
101osGLOBAL FORCEINLINE sbit32
102tdsmAtomicBitSet(
103               smRoot_t         *smRoot,
104               sbit32 volatile  *Destination,
105               sbit32            Value
106               );
107
108osGLOBAL FORCEINLINE sbit32
109tdsmAtomicExchange(
110               smRoot_t        *smRoot,
111               sbit32 volatile *Target,
112               sbit32           Value
113               );
114#else
115
116osGLOBAL FORCEINLINE sbit32
117tdsmInterlockedIncrement(
118                   smRoot_t        *smRoot,
119                   sbit32 volatile *Addend
120                   );
121
122osGLOBAL FORCEINLINE sbit32
123tdsmInterlockedDecrement(
124                   smRoot_t        *smRoot,
125                   sbit32 volatile *Addend
126                   );
127
128osGLOBAL FORCEINLINE sbit32
129tdsmInterlockedAnd(
130               smRoot_t         *smRoot,
131               sbit32 volatile  *Destination,
132               sbit32            Value
133               );
134
135osGLOBAL FORCEINLINE sbit32
136tdsmInterlockedOr(
137               smRoot_t         *smRoot,
138               sbit32 volatile  *Destination,
139               sbit32            Value
140               );
141
142osGLOBAL FORCEINLINE sbit32
143tdsmInterlockedExchange(
144               smRoot_t        *smRoot,
145               sbit32 volatile *Target,
146               sbit32           Value
147               );
148
149#endif /*LINUX_VERSION_CODE*/
150
151osGLOBAL bit32
152tdsmAllocMemory(
153                smRoot_t    *smRoot,
154                void        **osMemHandle,
155                void        ** virtPtr,
156                bit32       * physAddrUpper,
157                bit32       * physAddrLower,
158                bit32       alignment,
159                bit32       allocLength,
160                smBOOLEAN   isCacheable
161               );
162
163osGLOBAL bit32
164tdsmFreeMemory(
165               smRoot_t    *smRoot,
166               void        *osDMAHandle,
167               bit32        allocLength
168              );
169
170osGLOBAL FORCEINLINE bit32
171tdsmRotateQnumber(smRoot_t        *smRoot,
172                         smDeviceHandle_t *smDeviceHandle
173                         );
174
175osGLOBAL bit32
176tdsmSetDeviceQueueDepth(smRoot_t      *smRoot,
177                                 smIORequest_t *smIORequest,
178                                 bit32          QueueDepth
179                                 );
180
181
182#ifndef tdsmLogDebugString
183GLOBAL void tdsmLogDebugString(
184                         smRoot_t     *smRoot,
185                         bit32        level,
186                         char         *string,
187                         void         *ptr1,
188                         void         *ptr2,
189                         bit32        value1,
190                         bit32        value2
191                         );
192#endif
193
194
195
196osGLOBAL bit32 tdsmGetTransportParam(
197                        smRoot_t    *smRoot,
198                        char        *key,
199                        char        *subkey1,
200                        char        *subkey2,
201                        char        *subkey3,
202                        char        *subkey4,
203                        char        *subkey5,
204                        char        *valueName,
205                        char        *buffer,
206                        bit32       bufferLen,
207                        bit32       *lenReceived
208                        );
209
210#endif  /* TDSMAPI_H */
211
212