xref: /freebsd/sys/dev/pms/RefTisa/sat/api/tdsmapi.h (revision e8d8bef961a50d4dc22501cde4fb9fb0be1b2532)
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 
34 osGLOBAL void
35 tdsmIDCompletedCB(
36                   smRoot_t   *smRoot,
37                   smIORequest_t   *smIORequest,
38                   smDeviceHandle_t   *smDeviceHandle,
39                   bit32    status,
40                   void    *IDdata
41                  );
42 
43 osGLOBAL FORCEINLINE void
44 tdsmIOCompletedCB(
45                   smRoot_t   *smRoot,
46                   smIORequest_t   *smIORequest,
47                   bit32    status,
48                   bit32    statusDetail,
49                   smSenseData_t   *senseData,
50                   bit32    interruptContext
51                   );
52 osGLOBAL void
53 tdsmEventCB(
54                 smRoot_t          *smRoot,
55                 smDeviceHandle_t  *smDeviceHandle,
56                 smIntrEventType_t  eventType,
57                 bit32              eventStatus,
58                 void              *parm
59                 );
60 
61 osGLOBAL FORCEINLINE void
62 tdsmSingleThreadedEnter(
63                         smRoot_t   *smRoot,
64                         bit32       syncLockId
65                        );
66 
67 osGLOBAL FORCEINLINE void
68 tdsmSingleThreadedLeave(
69                         smRoot_t   *smRoot,
70                         bit32       syncLockId
71                         );
72 
73 osGLOBAL FORCEINLINE bit8
74 tdsmBitScanForward(
75                   smRoot_t   *smRoot,
76                   bit32      *Index,
77                   bit32       Mask
78                   );
79 
80 #ifdef LINUX_VERSION_CODE
81 
82 osGLOBAL FORCEINLINE sbit32
83 tdsmInterlockedIncrement(
84                    smRoot_t        *smRoot,
85                    sbit32 volatile *Addend
86                    );
87 
88 osGLOBAL FORCEINLINE sbit32
89 tdsmInterlockedDecrement(
90                    smRoot_t         *smRoot,
91                    sbit32 volatile  *Addend
92                    );
93 
94 osGLOBAL FORCEINLINE sbit32
95 tdsmAtomicBitClear(
96                smRoot_t         *smRoot,
97                sbit32 volatile  *Destination,
98                sbit32            Value
99                );
100 
101 osGLOBAL FORCEINLINE sbit32
102 tdsmAtomicBitSet(
103                smRoot_t         *smRoot,
104                sbit32 volatile  *Destination,
105                sbit32            Value
106                );
107 
108 osGLOBAL FORCEINLINE sbit32
109 tdsmAtomicExchange(
110                smRoot_t        *smRoot,
111                sbit32 volatile *Target,
112                sbit32           Value
113                );
114 #else
115 
116 osGLOBAL FORCEINLINE sbit32
117 tdsmInterlockedIncrement(
118                    smRoot_t        *smRoot,
119                    sbit32 volatile *Addend
120                    );
121 
122 osGLOBAL FORCEINLINE sbit32
123 tdsmInterlockedDecrement(
124                    smRoot_t        *smRoot,
125                    sbit32 volatile *Addend
126                    );
127 
128 osGLOBAL FORCEINLINE sbit32
129 tdsmInterlockedAnd(
130                smRoot_t         *smRoot,
131                sbit32 volatile  *Destination,
132                sbit32            Value
133                );
134 
135 osGLOBAL FORCEINLINE sbit32
136 tdsmInterlockedOr(
137                smRoot_t         *smRoot,
138                sbit32 volatile  *Destination,
139                sbit32            Value
140                );
141 
142 osGLOBAL FORCEINLINE sbit32
143 tdsmInterlockedExchange(
144                smRoot_t        *smRoot,
145                sbit32 volatile *Target,
146                sbit32           Value
147                );
148 
149 #endif /*LINUX_VERSION_CODE*/
150 
151 osGLOBAL bit32
152 tdsmAllocMemory(
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 
163 osGLOBAL bit32
164 tdsmFreeMemory(
165                smRoot_t    *smRoot,
166                void        *osDMAHandle,
167                bit32        allocLength
168               );
169 
170 osGLOBAL FORCEINLINE bit32
171 tdsmRotateQnumber(smRoot_t        *smRoot,
172                          smDeviceHandle_t *smDeviceHandle
173                          );
174 
175 osGLOBAL bit32
176 tdsmSetDeviceQueueDepth(smRoot_t      *smRoot,
177                                  smIORequest_t *smIORequest,
178                                  bit32          QueueDepth
179                                  );
180 
181 
182 #ifndef tdsmLogDebugString
183 GLOBAL 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 
196 osGLOBAL 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