diff options
Diffstat (limited to 'drivers/gpu/pvr/osfunc.h')
-rw-r--r-- | drivers/gpu/pvr/osfunc.h | 576 |
1 files changed, 576 insertions, 0 deletions
diff --git a/drivers/gpu/pvr/osfunc.h b/drivers/gpu/pvr/osfunc.h new file mode 100644 index 00000000000..8ffbea60aeb --- /dev/null +++ b/drivers/gpu/pvr/osfunc.h | |||
@@ -0,0 +1,576 @@ | |||
1 | /********************************************************************** | ||
2 | * | ||
3 | * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved. | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms and conditions of the GNU General Public License, | ||
7 | * version 2, as published by the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope it will be useful but, except | ||
10 | * as otherwise stated in writing, without any warranty; without even the | ||
11 | * implied warranty of merchantability or fitness for a particular purpose. | ||
12 | * See the GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License along with | ||
15 | * this program; if not, write to the Free Software Foundation, Inc., | ||
16 | * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. | ||
17 | * | ||
18 | * The full GNU General Public License is included in this distribution in | ||
19 | * the file called "COPYING". | ||
20 | * | ||
21 | * Contact Information: | ||
22 | * Imagination Technologies Ltd. <gpl-support@imgtec.com> | ||
23 | * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK | ||
24 | * | ||
25 | ******************************************************************************/ | ||
26 | |||
27 | #ifdef DEBUG_RELEASE_BUILD | ||
28 | #pragma optimize( "", off ) | ||
29 | #define DEBUG 1 | ||
30 | #endif | ||
31 | |||
32 | #ifndef __OSFUNC_H__ | ||
33 | #define __OSFUNC_H__ | ||
34 | |||
35 | #if defined (__cplusplus) | ||
36 | extern "C" { | ||
37 | #endif | ||
38 | |||
39 | #if defined(__linux__) && defined(__KERNEL__) | ||
40 | #include <linux/hardirq.h> | ||
41 | #include <linux/string.h> | ||
42 | #include <asm/system.h> | ||
43 | #if defined(__arm__) | ||
44 | #include <asm/memory.h> | ||
45 | #endif | ||
46 | #endif | ||
47 | |||
48 | |||
49 | |||
50 | #define PVRSRV_PAGEABLE_SELECT PVRSRV_OS_PAGEABLE_HEAP | ||
51 | |||
52 | #define KERNEL_ID 0xffffffffL | ||
53 | #define POWER_MANAGER_ID 0xfffffffeL | ||
54 | #define ISR_ID 0xfffffffdL | ||
55 | #define TIMER_ID 0xfffffffcL | ||
56 | |||
57 | |||
58 | #define HOST_PAGESIZE OSGetPageSize | ||
59 | #define HOST_PAGEMASK (HOST_PAGESIZE()-1) | ||
60 | #define HOST_PAGEALIGN(addr) (((addr) + HOST_PAGEMASK) & ~HOST_PAGEMASK) | ||
61 | |||
62 | #define PVRSRV_OS_HEAP_MASK 0xf | ||
63 | #define PVRSRV_OS_PAGEABLE_HEAP 0x1 | ||
64 | #define PVRSRV_OS_NON_PAGEABLE_HEAP 0x2 | ||
65 | |||
66 | |||
67 | IMG_UINT32 OSClockus(IMG_VOID); | ||
68 | IMG_SIZE_T OSGetPageSize(IMG_VOID); | ||
69 | PVRSRV_ERROR OSInstallDeviceLISR(IMG_VOID *pvSysData, | ||
70 | IMG_UINT32 ui32Irq, | ||
71 | IMG_CHAR *pszISRName, | ||
72 | IMG_VOID *pvDeviceNode); | ||
73 | PVRSRV_ERROR OSUninstallDeviceLISR(IMG_VOID *pvSysData); | ||
74 | PVRSRV_ERROR OSInstallSystemLISR(IMG_VOID *pvSysData, IMG_UINT32 ui32Irq); | ||
75 | PVRSRV_ERROR OSUninstallSystemLISR(IMG_VOID *pvSysData); | ||
76 | PVRSRV_ERROR OSInstallMISR(IMG_VOID *pvSysData); | ||
77 | PVRSRV_ERROR OSUninstallMISR(IMG_VOID *pvSysData); | ||
78 | IMG_CPU_PHYADDR OSMapLinToCPUPhys(IMG_HANDLE, IMG_VOID* pvLinAddr); | ||
79 | IMG_VOID OSMemCopy(IMG_VOID *pvDst, IMG_VOID *pvSrc, IMG_SIZE_T ui32Size); | ||
80 | IMG_VOID *OSMapPhysToLin(IMG_CPU_PHYADDR BasePAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_HANDLE *phOSMemHandle); | ||
81 | IMG_BOOL OSUnMapPhysToLin(IMG_VOID *pvLinAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_HANDLE hOSMemHandle); | ||
82 | |||
83 | PVRSRV_ERROR OSReservePhys(IMG_CPU_PHYADDR BasePAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_VOID **ppvCpuVAddr, IMG_HANDLE *phOSMemHandle); | ||
84 | PVRSRV_ERROR OSUnReservePhys(IMG_VOID *pvCpuVAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_HANDLE hOSMemHandle); | ||
85 | |||
86 | #if defined(__linux__) && defined(__KERNEL__) | ||
87 | |||
88 | IMG_VOID OSFlushCPUCacheKM(IMG_VOID); | ||
89 | |||
90 | IMG_VOID OSCleanCPUCacheKM(IMG_VOID); | ||
91 | |||
92 | IMG_BOOL OSFlushCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, | ||
93 | IMG_VOID *pvRangeAddrStart, | ||
94 | IMG_UINT32 ui32Length); | ||
95 | IMG_BOOL OSCleanCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, | ||
96 | IMG_VOID *pvRangeAddrStart, | ||
97 | IMG_UINT32 ui32Length); | ||
98 | IMG_BOOL OSInvalidateCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, | ||
99 | IMG_VOID *pvRangeAddrStart, | ||
100 | IMG_UINT32 ui32Length); | ||
101 | |||
102 | #else | ||
103 | |||
104 | #ifdef INLINE_IS_PRAGMA | ||
105 | #pragma inline(OSFlushCPUCacheKM) | ||
106 | #endif | ||
107 | static INLINE IMG_VOID OSFlushCPUCacheKM(IMG_VOID) {} | ||
108 | |||
109 | #ifdef INLINE_IS_PRAGMA | ||
110 | #pragma inline(OSCleanCPUCacheKM) | ||
111 | #endif | ||
112 | static INLINE IMG_VOID OSCleanCPUCacheKM(IMG_VOID) {} | ||
113 | |||
114 | #ifdef INLINE_IS_PRAGMA | ||
115 | #pragma inline(OSFlushCPUCacheRangeKM) | ||
116 | #endif | ||
117 | static INLINE IMG_BOOL OSFlushCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, | ||
118 | IMG_VOID *pvRangeAddrStart, | ||
119 | IMG_UINT32 ui32Length) | ||
120 | { | ||
121 | PVR_UNREFERENCED_PARAMETER(hOSMemHandle); | ||
122 | PVR_UNREFERENCED_PARAMETER(pvRangeAddrStart); | ||
123 | PVR_UNREFERENCED_PARAMETER(ui32Length); | ||
124 | return IMG_FALSE; | ||
125 | } | ||
126 | |||
127 | #ifdef INLINE_IS_PRAGMA | ||
128 | #pragma inline(OSCleanCPUCacheRangeKM) | ||
129 | #endif | ||
130 | static INLINE IMG_BOOL OSCleanCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, | ||
131 | IMG_VOID *pvRangeAddrStart, | ||
132 | IMG_UINT32 ui32Length) | ||
133 | { | ||
134 | PVR_UNREFERENCED_PARAMETER(hOSMemHandle); | ||
135 | PVR_UNREFERENCED_PARAMETER(pvRangeAddrStart); | ||
136 | PVR_UNREFERENCED_PARAMETER(ui32Length); | ||
137 | return IMG_FALSE; | ||
138 | } | ||
139 | |||
140 | #ifdef INLINE_IS_PRAGMA | ||
141 | #pragma inline(OSInvalidateCPUCacheRangeKM) | ||
142 | #endif | ||
143 | static INLINE IMG_BOOL OSInvalidateCPUCacheRangeKM(IMG_HANDLE hOSMemHandle, | ||
144 | IMG_VOID *pvRangeAddrStart, | ||
145 | IMG_UINT32 ui32Length) | ||
146 | { | ||
147 | PVR_UNREFERENCED_PARAMETER(hOSMemHandle); | ||
148 | PVR_UNREFERENCED_PARAMETER(pvRangeAddrStart); | ||
149 | PVR_UNREFERENCED_PARAMETER(ui32Length); | ||
150 | return IMG_FALSE; | ||
151 | } | ||
152 | |||
153 | #endif | ||
154 | |||
155 | #if defined(__linux__) | ||
156 | PVRSRV_ERROR OSRegisterDiscontigMem(IMG_SYS_PHYADDR *pBasePAddr, | ||
157 | IMG_VOID *pvCpuVAddr, | ||
158 | IMG_SIZE_T ui32Bytes, | ||
159 | IMG_UINT32 ui32Flags, | ||
160 | IMG_HANDLE *phOSMemHandle); | ||
161 | PVRSRV_ERROR OSUnRegisterDiscontigMem(IMG_VOID *pvCpuVAddr, | ||
162 | IMG_SIZE_T ui32Bytes, | ||
163 | IMG_UINT32 ui32Flags, | ||
164 | IMG_HANDLE hOSMemHandle); | ||
165 | #else | ||
166 | #ifdef INLINE_IS_PRAGMA | ||
167 | #pragma inline(OSRegisterDiscontigMem) | ||
168 | #endif | ||
169 | static INLINE PVRSRV_ERROR OSRegisterDiscontigMem(IMG_SYS_PHYADDR *pBasePAddr, | ||
170 | IMG_VOID *pvCpuVAddr, | ||
171 | IMG_SIZE_T ui32Bytes, | ||
172 | IMG_UINT32 ui32Flags, | ||
173 | IMG_HANDLE *phOSMemHandle) | ||
174 | { | ||
175 | PVR_UNREFERENCED_PARAMETER(pBasePAddr); | ||
176 | PVR_UNREFERENCED_PARAMETER(pvCpuVAddr); | ||
177 | PVR_UNREFERENCED_PARAMETER(ui32Bytes); | ||
178 | PVR_UNREFERENCED_PARAMETER(ui32Flags); | ||
179 | PVR_UNREFERENCED_PARAMETER(phOSMemHandle); | ||
180 | |||
181 | return PVRSRV_ERROR_NOT_SUPPORTED; | ||
182 | } | ||
183 | |||
184 | #ifdef INLINE_IS_PRAGMA | ||
185 | #pragma inline(OSUnRegisterDiscontigMem) | ||
186 | #endif | ||
187 | static INLINE PVRSRV_ERROR OSUnRegisterDiscontigMem(IMG_VOID *pvCpuVAddr, | ||
188 | IMG_SIZE_T ui32Bytes, | ||
189 | IMG_UINT32 ui32Flags, | ||
190 | IMG_HANDLE hOSMemHandle) | ||
191 | { | ||
192 | PVR_UNREFERENCED_PARAMETER(pvCpuVAddr); | ||
193 | PVR_UNREFERENCED_PARAMETER(ui32Bytes); | ||
194 | PVR_UNREFERENCED_PARAMETER(ui32Flags); | ||
195 | PVR_UNREFERENCED_PARAMETER(hOSMemHandle); | ||
196 | |||
197 | return PVRSRV_ERROR_NOT_SUPPORTED; | ||
198 | } | ||
199 | #endif | ||
200 | |||
201 | |||
202 | #if defined(__linux__) | ||
203 | #ifdef INLINE_IS_PRAGMA | ||
204 | #pragma inline(OSReserveDiscontigPhys) | ||
205 | #endif | ||
206 | static INLINE PVRSRV_ERROR OSReserveDiscontigPhys(IMG_SYS_PHYADDR *pBasePAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_VOID **ppvCpuVAddr, IMG_HANDLE *phOSMemHandle) | ||
207 | { | ||
208 | #if defined(__linux__) | ||
209 | *ppvCpuVAddr = IMG_NULL; | ||
210 | return OSRegisterDiscontigMem(pBasePAddr, *ppvCpuVAddr, ui32Bytes, ui32Flags, phOSMemHandle); | ||
211 | #else | ||
212 | extern IMG_CPU_PHYADDR SysSysPAddrToCpuPAddr(IMG_SYS_PHYADDR SysPAddr); | ||
213 | |||
214 | |||
215 | return OSReservePhys(SysSysPAddrToCpuPAddr(pBasePAddr[0]), ui32Bytes, ui32Flags, ppvCpuVAddr, phOSMemHandle); | ||
216 | #endif | ||
217 | } | ||
218 | |||
219 | static INLINE PVRSRV_ERROR OSUnReserveDiscontigPhys(IMG_VOID *pvCpuVAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_HANDLE hOSMemHandle) | ||
220 | { | ||
221 | #if defined(__linux__) | ||
222 | OSUnRegisterDiscontigMem(pvCpuVAddr, ui32Bytes, ui32Flags, hOSMemHandle); | ||
223 | #endif | ||
224 | |||
225 | return PVRSRV_OK; | ||
226 | } | ||
227 | #else | ||
228 | |||
229 | |||
230 | #ifdef INLINE_IS_PRAGMA | ||
231 | #pragma inline(OSReserveDiscontigPhys) | ||
232 | #endif | ||
233 | static INLINE PVRSRV_ERROR OSReserveDiscontigPhys(IMG_SYS_PHYADDR *pBasePAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_VOID **ppvCpuVAddr, IMG_HANDLE *phOSMemHandle) | ||
234 | { | ||
235 | PVR_UNREFERENCED_PARAMETER(pBasePAddr); | ||
236 | PVR_UNREFERENCED_PARAMETER(ui32Bytes); | ||
237 | PVR_UNREFERENCED_PARAMETER(ui32Flags); | ||
238 | PVR_UNREFERENCED_PARAMETER(ppvCpuVAddr); | ||
239 | PVR_UNREFERENCED_PARAMETER(phOSMemHandle); | ||
240 | |||
241 | return PVRSRV_ERROR_NOT_SUPPORTED; | ||
242 | } | ||
243 | |||
244 | #ifdef INLINE_IS_PRAGMA | ||
245 | #pragma inline(OSUnReserveDiscontigPhys) | ||
246 | #endif | ||
247 | static INLINE PVRSRV_ERROR OSUnReserveDiscontigPhys(IMG_VOID *pvCpuVAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_HANDLE hOSMemHandle) | ||
248 | { | ||
249 | PVR_UNREFERENCED_PARAMETER(pvCpuVAddr); | ||
250 | PVR_UNREFERENCED_PARAMETER(ui32Bytes); | ||
251 | PVR_UNREFERENCED_PARAMETER(ui32Flags); | ||
252 | PVR_UNREFERENCED_PARAMETER(hOSMemHandle); | ||
253 | |||
254 | return PVRSRV_ERROR_NOT_SUPPORTED; | ||
255 | } | ||
256 | #endif | ||
257 | |||
258 | PVRSRV_ERROR OSRegisterMem(IMG_CPU_PHYADDR BasePAddr, | ||
259 | IMG_VOID *pvCpuVAddr, | ||
260 | IMG_SIZE_T ui32Bytes, | ||
261 | IMG_UINT32 ui32Flags, | ||
262 | IMG_HANDLE *phOSMemHandle); | ||
263 | PVRSRV_ERROR OSUnRegisterMem(IMG_VOID *pvCpuVAddr, | ||
264 | IMG_SIZE_T ui32Bytes, | ||
265 | IMG_UINT32 ui32Flags, | ||
266 | IMG_HANDLE hOSMemHandle); | ||
267 | |||
268 | |||
269 | |||
270 | #if defined(__linux__) | ||
271 | PVRSRV_ERROR OSGetSubMemHandle(IMG_HANDLE hOSMemHandle, | ||
272 | IMG_UINTPTR_T ui32ByteOffset, | ||
273 | IMG_SIZE_T ui32Bytes, | ||
274 | IMG_UINT32 ui32Flags, | ||
275 | IMG_HANDLE *phOSMemHandleRet); | ||
276 | PVRSRV_ERROR OSReleaseSubMemHandle(IMG_HANDLE hOSMemHandle, IMG_UINT32 ui32Flags); | ||
277 | #else | ||
278 | #ifdef INLINE_IS_PRAGMA | ||
279 | #pragma inline(OSGetSubMemHandle) | ||
280 | #endif | ||
281 | static INLINE PVRSRV_ERROR OSGetSubMemHandle(IMG_HANDLE hOSMemHandle, | ||
282 | IMG_UINTPTR_T ui32ByteOffset, | ||
283 | IMG_SIZE_T ui32Bytes, | ||
284 | IMG_UINT32 ui32Flags, | ||
285 | IMG_HANDLE *phOSMemHandleRet) | ||
286 | { | ||
287 | PVR_UNREFERENCED_PARAMETER(ui32ByteOffset); | ||
288 | PVR_UNREFERENCED_PARAMETER(ui32Bytes); | ||
289 | PVR_UNREFERENCED_PARAMETER(ui32Flags); | ||
290 | |||
291 | *phOSMemHandleRet = hOSMemHandle; | ||
292 | return PVRSRV_OK; | ||
293 | } | ||
294 | |||
295 | static INLINE PVRSRV_ERROR OSReleaseSubMemHandle(IMG_HANDLE hOSMemHandle, IMG_UINT32 ui32Flags) | ||
296 | { | ||
297 | PVR_UNREFERENCED_PARAMETER(hOSMemHandle); | ||
298 | PVR_UNREFERENCED_PARAMETER(ui32Flags); | ||
299 | return PVRSRV_OK; | ||
300 | } | ||
301 | #endif | ||
302 | |||
303 | IMG_UINT32 OSGetCurrentProcessIDKM(IMG_VOID); | ||
304 | IMG_UINTPTR_T OSGetCurrentThreadID( IMG_VOID ); | ||
305 | IMG_VOID OSMemSet(IMG_VOID *pvDest, IMG_UINT8 ui8Value, IMG_SIZE_T ui32Size); | ||
306 | |||
307 | PVRSRV_ERROR OSAllocPages_Impl(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_UINT32 ui32PageSize, IMG_PVOID *ppvLinAddr, IMG_HANDLE *phPageAlloc); | ||
308 | PVRSRV_ERROR OSFreePages(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_PVOID pvLinAddr, IMG_HANDLE hPageAlloc); | ||
309 | |||
310 | |||
311 | #ifdef PVRSRV_LOG_MEMORY_ALLOCS | ||
312 | #define OSAllocMem(flags, size, linAddr, blockAlloc, logStr) \ | ||
313 | (PVR_TRACE(("OSAllocMem(" #flags ", " #size ", " #linAddr ", " #blockAlloc "): " logStr " (size = 0x%lx)", size)), \ | ||
314 | OSAllocMem_Debug_Wrapper(flags, size, linAddr, blockAlloc, __FILE__, __LINE__)) | ||
315 | |||
316 | #define OSAllocPages(flags, size, pageSize, linAddr, pageAlloc) \ | ||
317 | (PVR_TRACE(("OSAllocPages(" #flags ", " #size ", " #pageSize ", " #linAddr ", " #pageAlloc "): (size = 0x%lx)", size)), \ | ||
318 | OSAllocPages_Impl(flags, size, pageSize, linAddr, pageAlloc)) | ||
319 | |||
320 | #define OSFreeMem(flags, size, linAddr, blockAlloc) \ | ||
321 | (PVR_TRACE(("OSFreeMem(" #flags ", " #size ", " #linAddr ", " #blockAlloc "): (pointer = 0x%X)", linAddr)), \ | ||
322 | OSFreeMem_Debug_Wrapper(flags, size, linAddr, blockAlloc, __FILE__, __LINE__)) | ||
323 | #else | ||
324 | #define OSAllocMem(flags, size, linAddr, blockAlloc, logString) \ | ||
325 | OSAllocMem_Debug_Wrapper(flags, size, linAddr, blockAlloc, __FILE__, __LINE__) | ||
326 | |||
327 | #define OSAllocPages OSAllocPages_Impl | ||
328 | |||
329 | #define OSFreeMem(flags, size, linAddr, blockAlloc) \ | ||
330 | OSFreeMem_Debug_Wrapper(flags, size, linAddr, blockAlloc, __FILE__, __LINE__) | ||
331 | #endif | ||
332 | |||
333 | #ifdef PVRSRV_DEBUG_OS_MEMORY | ||
334 | |||
335 | PVRSRV_ERROR OSAllocMem_Debug_Wrapper(IMG_UINT32 ui32Flags, | ||
336 | IMG_UINT32 ui32Size, | ||
337 | IMG_PVOID *ppvCpuVAddr, | ||
338 | IMG_HANDLE *phBlockAlloc, | ||
339 | IMG_CHAR *pszFilename, | ||
340 | IMG_UINT32 ui32Line); | ||
341 | |||
342 | PVRSRV_ERROR OSFreeMem_Debug_Wrapper(IMG_UINT32 ui32Flags, | ||
343 | IMG_UINT32 ui32Size, | ||
344 | IMG_PVOID pvCpuVAddr, | ||
345 | IMG_HANDLE hBlockAlloc, | ||
346 | IMG_CHAR *pszFilename, | ||
347 | IMG_UINT32 ui32Line); | ||
348 | |||
349 | |||
350 | typedef struct | ||
351 | { | ||
352 | IMG_UINT8 sGuardRegionBefore[8]; | ||
353 | IMG_CHAR sFileName[128]; | ||
354 | IMG_UINT32 uLineNo; | ||
355 | IMG_SIZE_T uSize; | ||
356 | IMG_SIZE_T uSizeParityCheck; | ||
357 | enum valid_tag | ||
358 | { isFree = 0x277260FF, | ||
359 | isAllocated = 0x260511AA | ||
360 | } eValid; | ||
361 | } OSMEM_DEBUG_INFO; | ||
362 | |||
363 | #define TEST_BUFFER_PADDING_STATUS (sizeof(OSMEM_DEBUG_INFO)) | ||
364 | #define TEST_BUFFER_PADDING_AFTER (8) | ||
365 | #define TEST_BUFFER_PADDING (TEST_BUFFER_PADDING_STATUS + TEST_BUFFER_PADDING_AFTER) | ||
366 | #else | ||
367 | #define OSAllocMem_Debug_Wrapper OSAllocMem_Debug_Linux_Memory_Allocations | ||
368 | #define OSFreeMem_Debug_Wrapper OSFreeMem_Debug_Linux_Memory_Allocations | ||
369 | #endif | ||
370 | |||
371 | #if defined(__linux__) && defined(DEBUG_LINUX_MEMORY_ALLOCATIONS) | ||
372 | PVRSRV_ERROR OSAllocMem_Impl(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_PVOID *ppvLinAddr, IMG_HANDLE *phBlockAlloc, IMG_CHAR *pszFilename, IMG_UINT32 ui32Line); | ||
373 | PVRSRV_ERROR OSFreeMem_Impl(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_PVOID pvLinAddr, IMG_HANDLE hBlockAlloc, IMG_CHAR *pszFilename, IMG_UINT32 ui32Line); | ||
374 | |||
375 | #define OSAllocMem_Debug_Linux_Memory_Allocations OSAllocMem_Impl | ||
376 | #define OSFreeMem_Debug_Linux_Memory_Allocations OSFreeMem_Impl | ||
377 | #else | ||
378 | PVRSRV_ERROR OSAllocMem_Impl(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_PVOID *ppvLinAddr, IMG_HANDLE *phBlockAlloc); | ||
379 | PVRSRV_ERROR OSFreeMem_Impl(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_PVOID pvLinAddr, IMG_HANDLE hBlockAlloc); | ||
380 | |||
381 | #define OSAllocMem_Debug_Linux_Memory_Allocations(flags, size, addr, blockAlloc, file, line) \ | ||
382 | OSAllocMem_Impl(flags, size, addr, blockAlloc) | ||
383 | #define OSFreeMem_Debug_Linux_Memory_Allocations(flags, size, addr, blockAlloc, file, line) \ | ||
384 | OSFreeMem_Impl(flags, size, addr, blockAlloc) | ||
385 | #endif | ||
386 | |||
387 | |||
388 | #if defined(__linux__) | ||
389 | IMG_CPU_PHYADDR OSMemHandleToCpuPAddr(IMG_VOID *hOSMemHandle, IMG_SIZE_T ui32ByteOffset); | ||
390 | #else | ||
391 | #ifdef INLINE_IS_PRAGMA | ||
392 | #pragma inline(OSMemHandleToCpuPAddr) | ||
393 | #endif | ||
394 | static INLINE IMG_CPU_PHYADDR OSMemHandleToCpuPAddr(IMG_HANDLE hOSMemHandle, IMG_SIZE_T ui32ByteOffset) | ||
395 | { | ||
396 | IMG_CPU_PHYADDR sCpuPAddr; | ||
397 | PVR_UNREFERENCED_PARAMETER(hOSMemHandle); | ||
398 | PVR_UNREFERENCED_PARAMETER(ui32ByteOffset); | ||
399 | sCpuPAddr.uiAddr = 0; | ||
400 | return sCpuPAddr; | ||
401 | } | ||
402 | #endif | ||
403 | PVRSRV_ERROR OSInitEnvData(IMG_PVOID *ppvEnvSpecificData); | ||
404 | PVRSRV_ERROR OSDeInitEnvData(IMG_PVOID pvEnvSpecificData); | ||
405 | IMG_CHAR* OSStringCopy(IMG_CHAR *pszDest, const IMG_CHAR *pszSrc); | ||
406 | IMG_INT32 OSSNPrintf(IMG_CHAR *pStr, IMG_SIZE_T ui32Size, const IMG_CHAR *pszFormat, ...) IMG_FORMAT_PRINTF(3, 4); | ||
407 | #define OSStringLength(pszString) strlen(pszString) | ||
408 | |||
409 | PVRSRV_ERROR OSEventObjectCreate(const IMG_CHAR *pszName, | ||
410 | PVRSRV_EVENTOBJECT *psEventObject); | ||
411 | PVRSRV_ERROR OSEventObjectDestroy(PVRSRV_EVENTOBJECT *psEventObject); | ||
412 | PVRSRV_ERROR OSEventObjectSignal(IMG_HANDLE hOSEventKM); | ||
413 | PVRSRV_ERROR OSEventObjectWait(IMG_HANDLE hOSEventKM); | ||
414 | PVRSRV_ERROR OSEventObjectOpen(PVRSRV_EVENTOBJECT *psEventObject, | ||
415 | IMG_HANDLE *phOSEvent); | ||
416 | PVRSRV_ERROR OSEventObjectClose(PVRSRV_EVENTOBJECT *psEventObject, | ||
417 | IMG_HANDLE hOSEventKM); | ||
418 | |||
419 | |||
420 | PVRSRV_ERROR OSBaseAllocContigMemory(IMG_SIZE_T ui32Size, IMG_CPU_VIRTADDR *pLinAddr, IMG_CPU_PHYADDR *pPhysAddr); | ||
421 | PVRSRV_ERROR OSBaseFreeContigMemory(IMG_SIZE_T ui32Size, IMG_CPU_VIRTADDR LinAddr, IMG_CPU_PHYADDR PhysAddr); | ||
422 | |||
423 | IMG_PVOID MapUserFromKernel(IMG_PVOID pvLinAddrKM,IMG_SIZE_T ui32Size,IMG_HANDLE *phMemBlock); | ||
424 | IMG_PVOID OSMapHWRegsIntoUserSpace(IMG_HANDLE hDevCookie, IMG_SYS_PHYADDR sRegAddr, IMG_UINT32 ulSize, IMG_PVOID *ppvProcess); | ||
425 | IMG_VOID OSUnmapHWRegsFromUserSpace(IMG_HANDLE hDevCookie, IMG_PVOID pvUserAddr, IMG_PVOID pvProcess); | ||
426 | |||
427 | IMG_VOID UnmapUserFromKernel(IMG_PVOID pvLinAddrUM, IMG_SIZE_T ui32Size, IMG_HANDLE hMemBlock); | ||
428 | |||
429 | PVRSRV_ERROR OSMapPhysToUserSpace(IMG_HANDLE hDevCookie, | ||
430 | IMG_SYS_PHYADDR sCPUPhysAddr, | ||
431 | IMG_SIZE_T uiSizeInBytes, | ||
432 | IMG_UINT32 ui32CacheFlags, | ||
433 | IMG_PVOID *ppvUserAddr, | ||
434 | IMG_SIZE_T *puiActualSize, | ||
435 | IMG_HANDLE hMappingHandle); | ||
436 | |||
437 | PVRSRV_ERROR OSUnmapPhysToUserSpace(IMG_HANDLE hDevCookie, | ||
438 | IMG_PVOID pvUserAddr, | ||
439 | IMG_PVOID pvProcess); | ||
440 | |||
441 | PVRSRV_ERROR OSLockResource(PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID); | ||
442 | PVRSRV_ERROR OSUnlockResource(PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID); | ||
443 | IMG_BOOL OSIsResourceLocked(PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID); | ||
444 | PVRSRV_ERROR OSCreateResource(PVRSRV_RESOURCE *psResource); | ||
445 | PVRSRV_ERROR OSDestroyResource(PVRSRV_RESOURCE *psResource); | ||
446 | IMG_VOID OSBreakResourceLock(PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID); | ||
447 | IMG_VOID OSWaitus(IMG_UINT32 ui32Timeus); | ||
448 | IMG_VOID OSReleaseThreadQuanta(IMG_VOID); | ||
449 | IMG_UINT32 OSPCIReadDword(IMG_UINT32 ui32Bus, IMG_UINT32 ui32Dev, IMG_UINT32 ui32Func, IMG_UINT32 ui32Reg); | ||
450 | IMG_VOID OSPCIWriteDword(IMG_UINT32 ui32Bus, IMG_UINT32 ui32Dev, IMG_UINT32 ui32Func, IMG_UINT32 ui32Reg, IMG_UINT32 ui32Value); | ||
451 | |||
452 | #ifndef OSReadHWReg | ||
453 | IMG_UINT32 OSReadHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Offset); | ||
454 | #endif | ||
455 | #ifndef OSWriteHWReg | ||
456 | IMG_VOID OSWriteHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Offset, IMG_UINT32 ui32Value); | ||
457 | #endif | ||
458 | |||
459 | typedef IMG_VOID (*PFN_TIMER_FUNC)(IMG_VOID*); | ||
460 | IMG_HANDLE OSAddTimer(PFN_TIMER_FUNC pfnTimerFunc, IMG_VOID *pvData, IMG_UINT32 ui32MsTimeout); | ||
461 | PVRSRV_ERROR OSRemoveTimer (IMG_HANDLE hTimer); | ||
462 | PVRSRV_ERROR OSEnableTimer (IMG_HANDLE hTimer); | ||
463 | PVRSRV_ERROR OSDisableTimer (IMG_HANDLE hTimer); | ||
464 | |||
465 | PVRSRV_ERROR OSGetSysMemSize(IMG_SIZE_T *pui32Bytes); | ||
466 | |||
467 | typedef enum _HOST_PCI_INIT_FLAGS_ | ||
468 | { | ||
469 | HOST_PCI_INIT_FLAG_BUS_MASTER = 0x00000001, | ||
470 | HOST_PCI_INIT_FLAG_MSI = 0x00000002, | ||
471 | HOST_PCI_INIT_FLAG_FORCE_I32 = 0x7fffffff | ||
472 | } HOST_PCI_INIT_FLAGS; | ||
473 | |||
474 | struct _PVRSRV_PCI_DEV_OPAQUE_STRUCT_; | ||
475 | typedef struct _PVRSRV_PCI_DEV_OPAQUE_STRUCT_ *PVRSRV_PCI_DEV_HANDLE; | ||
476 | |||
477 | PVRSRV_PCI_DEV_HANDLE OSPCIAcquireDev(IMG_UINT16 ui16VendorID, IMG_UINT16 ui16DeviceID, HOST_PCI_INIT_FLAGS eFlags); | ||
478 | PVRSRV_PCI_DEV_HANDLE OSPCISetDev(IMG_VOID *pvPCICookie, HOST_PCI_INIT_FLAGS eFlags); | ||
479 | PVRSRV_ERROR OSPCIReleaseDev(PVRSRV_PCI_DEV_HANDLE hPVRPCI); | ||
480 | PVRSRV_ERROR OSPCIIRQ(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 *pui32IRQ); | ||
481 | IMG_UINT32 OSPCIAddrRangeLen(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 ui32Index); | ||
482 | IMG_UINT32 OSPCIAddrRangeStart(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 ui32Index); | ||
483 | IMG_UINT32 OSPCIAddrRangeEnd(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 ui32Index); | ||
484 | PVRSRV_ERROR OSPCIRequestAddrRange(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 ui32Index); | ||
485 | PVRSRV_ERROR OSPCIReleaseAddrRange(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 ui32Index); | ||
486 | PVRSRV_ERROR OSPCISuspendDev(PVRSRV_PCI_DEV_HANDLE hPVRPCI); | ||
487 | PVRSRV_ERROR OSPCIResumeDev(PVRSRV_PCI_DEV_HANDLE hPVRPCI); | ||
488 | |||
489 | PVRSRV_ERROR OSScheduleMISR(IMG_VOID *pvSysData); | ||
490 | |||
491 | IMG_VOID OSPanic(IMG_VOID); | ||
492 | |||
493 | IMG_BOOL OSProcHasPrivSrvInit(IMG_VOID); | ||
494 | |||
495 | typedef enum _img_verify_test | ||
496 | { | ||
497 | PVR_VERIFY_WRITE = 0, | ||
498 | PVR_VERIFY_READ | ||
499 | } IMG_VERIFY_TEST; | ||
500 | |||
501 | IMG_BOOL OSAccessOK(IMG_VERIFY_TEST eVerification, IMG_VOID *pvUserPtr, IMG_SIZE_T ui32Bytes); | ||
502 | |||
503 | PVRSRV_ERROR OSCopyToUser(IMG_PVOID pvProcess, IMG_VOID *pvDest, IMG_VOID *pvSrc, IMG_SIZE_T ui32Bytes); | ||
504 | PVRSRV_ERROR OSCopyFromUser(IMG_PVOID pvProcess, IMG_VOID *pvDest, IMG_VOID *pvSrc, IMG_SIZE_T ui32Bytes); | ||
505 | |||
506 | #if defined(__linux__) | ||
507 | PVRSRV_ERROR OSAcquirePhysPageAddr(IMG_VOID* pvCPUVAddr, | ||
508 | IMG_SIZE_T ui32Bytes, | ||
509 | IMG_SYS_PHYADDR *psSysPAddr, | ||
510 | IMG_HANDLE *phOSWrapMem); | ||
511 | PVRSRV_ERROR OSReleasePhysPageAddr(IMG_HANDLE hOSWrapMem); | ||
512 | #else | ||
513 | #ifdef INLINE_IS_PRAGMA | ||
514 | #pragma inline(OSAcquirePhysPageAddr) | ||
515 | #endif | ||
516 | static INLINE PVRSRV_ERROR OSAcquirePhysPageAddr(IMG_VOID* pvCPUVAddr, | ||
517 | IMG_SIZE_T ui32Bytes, | ||
518 | IMG_SYS_PHYADDR *psSysPAddr, | ||
519 | IMG_HANDLE *phOSWrapMem) | ||
520 | { | ||
521 | PVR_UNREFERENCED_PARAMETER(pvCPUVAddr); | ||
522 | PVR_UNREFERENCED_PARAMETER(ui32Bytes); | ||
523 | PVR_UNREFERENCED_PARAMETER(psSysPAddr); | ||
524 | PVR_UNREFERENCED_PARAMETER(phOSWrapMem); | ||
525 | return PVRSRV_OK; | ||
526 | } | ||
527 | #ifdef INLINE_IS_PRAGMA | ||
528 | #pragma inline(OSReleasePhysPageAddr) | ||
529 | #endif | ||
530 | static INLINE PVRSRV_ERROR OSReleasePhysPageAddr(IMG_HANDLE hOSWrapMem) | ||
531 | { | ||
532 | PVR_UNREFERENCED_PARAMETER(hOSWrapMem); | ||
533 | return PVRSRV_OK; | ||
534 | } | ||
535 | #endif | ||
536 | |||
537 | #if defined(__linux__) && defined(__KERNEL__) | ||
538 | |||
539 | #define OS_SUPPORTS_IN_LISR | ||
540 | |||
541 | static inline IMG_BOOL OSInLISR(IMG_VOID unref__ *pvSysData) | ||
542 | { | ||
543 | PVR_UNREFERENCED_PARAMETER(pvSysData); | ||
544 | return (in_irq()) ? IMG_TRUE : IMG_FALSE; | ||
545 | } | ||
546 | |||
547 | static inline IMG_VOID OSWriteMemoryBarrier(IMG_VOID) | ||
548 | { | ||
549 | wmb(); | ||
550 | } | ||
551 | |||
552 | static inline IMG_VOID OSMemoryBarrier(IMG_VOID) | ||
553 | { | ||
554 | mb(); | ||
555 | } | ||
556 | |||
557 | #else | ||
558 | |||
559 | #ifdef INLINE_IS_PRAGMA | ||
560 | #pragma inline(OSWriteMemoryBarrier) | ||
561 | #endif | ||
562 | static INLINE IMG_VOID OSWriteMemoryBarrier(IMG_VOID) { } | ||
563 | |||
564 | #ifdef INLINE_IS_PRAGMA | ||
565 | #pragma inline(OSMemoryBarrier) | ||
566 | #endif | ||
567 | static INLINE IMG_VOID OSMemoryBarrier(IMG_VOID) { } | ||
568 | |||
569 | #endif | ||
570 | |||
571 | #if defined (__cplusplus) | ||
572 | } | ||
573 | #endif | ||
574 | |||
575 | #endif | ||
576 | |||