aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/pvr/osfunc.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/pvr/osfunc.h')
-rw-r--r--drivers/gpu/pvr/osfunc.h576
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)
36extern "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
67IMG_UINT32 OSClockus(IMG_VOID);
68IMG_SIZE_T OSGetPageSize(IMG_VOID);
69PVRSRV_ERROR OSInstallDeviceLISR(IMG_VOID *pvSysData,
70 IMG_UINT32 ui32Irq,
71 IMG_CHAR *pszISRName,
72 IMG_VOID *pvDeviceNode);
73PVRSRV_ERROR OSUninstallDeviceLISR(IMG_VOID *pvSysData);
74PVRSRV_ERROR OSInstallSystemLISR(IMG_VOID *pvSysData, IMG_UINT32 ui32Irq);
75PVRSRV_ERROR OSUninstallSystemLISR(IMG_VOID *pvSysData);
76PVRSRV_ERROR OSInstallMISR(IMG_VOID *pvSysData);
77PVRSRV_ERROR OSUninstallMISR(IMG_VOID *pvSysData);
78IMG_CPU_PHYADDR OSMapLinToCPUPhys(IMG_HANDLE, IMG_VOID* pvLinAddr);
79IMG_VOID OSMemCopy(IMG_VOID *pvDst, IMG_VOID *pvSrc, IMG_SIZE_T ui32Size);
80IMG_VOID *OSMapPhysToLin(IMG_CPU_PHYADDR BasePAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_HANDLE *phOSMemHandle);
81IMG_BOOL OSUnMapPhysToLin(IMG_VOID *pvLinAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_HANDLE hOSMemHandle);
82
83PVRSRV_ERROR OSReservePhys(IMG_CPU_PHYADDR BasePAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_VOID **ppvCpuVAddr, IMG_HANDLE *phOSMemHandle);
84PVRSRV_ERROR OSUnReservePhys(IMG_VOID *pvCpuVAddr, IMG_SIZE_T ui32Bytes, IMG_UINT32 ui32Flags, IMG_HANDLE hOSMemHandle);
85
86#if defined(__linux__) && defined(__KERNEL__)
87
88IMG_VOID OSFlushCPUCacheKM(IMG_VOID);
89
90IMG_VOID OSCleanCPUCacheKM(IMG_VOID);
91
92IMG_BOOL OSFlushCPUCacheRangeKM(IMG_HANDLE hOSMemHandle,
93 IMG_VOID *pvRangeAddrStart,
94 IMG_UINT32 ui32Length);
95IMG_BOOL OSCleanCPUCacheRangeKM(IMG_HANDLE hOSMemHandle,
96 IMG_VOID *pvRangeAddrStart,
97 IMG_UINT32 ui32Length);
98IMG_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
107static INLINE IMG_VOID OSFlushCPUCacheKM(IMG_VOID) {}
108
109#ifdef INLINE_IS_PRAGMA
110#pragma inline(OSCleanCPUCacheKM)
111#endif
112static INLINE IMG_VOID OSCleanCPUCacheKM(IMG_VOID) {}
113
114#ifdef INLINE_IS_PRAGMA
115#pragma inline(OSFlushCPUCacheRangeKM)
116#endif
117static 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
130static 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
143static 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__)
156PVRSRV_ERROR OSRegisterDiscontigMem(IMG_SYS_PHYADDR *pBasePAddr,
157 IMG_VOID *pvCpuVAddr,
158 IMG_SIZE_T ui32Bytes,
159 IMG_UINT32 ui32Flags,
160 IMG_HANDLE *phOSMemHandle);
161PVRSRV_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
169static 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
187static 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
206static 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
219static 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
233static 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
247static 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
258PVRSRV_ERROR OSRegisterMem(IMG_CPU_PHYADDR BasePAddr,
259 IMG_VOID *pvCpuVAddr,
260 IMG_SIZE_T ui32Bytes,
261 IMG_UINT32 ui32Flags,
262 IMG_HANDLE *phOSMemHandle);
263PVRSRV_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__)
271PVRSRV_ERROR OSGetSubMemHandle(IMG_HANDLE hOSMemHandle,
272 IMG_UINTPTR_T ui32ByteOffset,
273 IMG_SIZE_T ui32Bytes,
274 IMG_UINT32 ui32Flags,
275 IMG_HANDLE *phOSMemHandleRet);
276PVRSRV_ERROR OSReleaseSubMemHandle(IMG_HANDLE hOSMemHandle, IMG_UINT32 ui32Flags);
277#else
278#ifdef INLINE_IS_PRAGMA
279#pragma inline(OSGetSubMemHandle)
280#endif
281static 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
295static 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
303IMG_UINT32 OSGetCurrentProcessIDKM(IMG_VOID);
304IMG_UINTPTR_T OSGetCurrentThreadID( IMG_VOID );
305IMG_VOID OSMemSet(IMG_VOID *pvDest, IMG_UINT8 ui8Value, IMG_SIZE_T ui32Size);
306
307PVRSRV_ERROR OSAllocPages_Impl(IMG_UINT32 ui32Flags, IMG_SIZE_T ui32Size, IMG_UINT32 ui32PageSize, IMG_PVOID *ppvLinAddr, IMG_HANDLE *phPageAlloc);
308PVRSRV_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__)
389IMG_CPU_PHYADDR OSMemHandleToCpuPAddr(IMG_VOID *hOSMemHandle, IMG_SIZE_T ui32ByteOffset);
390#else
391#ifdef INLINE_IS_PRAGMA
392#pragma inline(OSMemHandleToCpuPAddr)
393#endif
394static 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
403PVRSRV_ERROR OSInitEnvData(IMG_PVOID *ppvEnvSpecificData);
404PVRSRV_ERROR OSDeInitEnvData(IMG_PVOID pvEnvSpecificData);
405IMG_CHAR* OSStringCopy(IMG_CHAR *pszDest, const IMG_CHAR *pszSrc);
406IMG_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
409PVRSRV_ERROR OSEventObjectCreate(const IMG_CHAR *pszName,
410 PVRSRV_EVENTOBJECT *psEventObject);
411PVRSRV_ERROR OSEventObjectDestroy(PVRSRV_EVENTOBJECT *psEventObject);
412PVRSRV_ERROR OSEventObjectSignal(IMG_HANDLE hOSEventKM);
413PVRSRV_ERROR OSEventObjectWait(IMG_HANDLE hOSEventKM);
414PVRSRV_ERROR OSEventObjectOpen(PVRSRV_EVENTOBJECT *psEventObject,
415 IMG_HANDLE *phOSEvent);
416PVRSRV_ERROR OSEventObjectClose(PVRSRV_EVENTOBJECT *psEventObject,
417 IMG_HANDLE hOSEventKM);
418
419
420PVRSRV_ERROR OSBaseAllocContigMemory(IMG_SIZE_T ui32Size, IMG_CPU_VIRTADDR *pLinAddr, IMG_CPU_PHYADDR *pPhysAddr);
421PVRSRV_ERROR OSBaseFreeContigMemory(IMG_SIZE_T ui32Size, IMG_CPU_VIRTADDR LinAddr, IMG_CPU_PHYADDR PhysAddr);
422
423IMG_PVOID MapUserFromKernel(IMG_PVOID pvLinAddrKM,IMG_SIZE_T ui32Size,IMG_HANDLE *phMemBlock);
424IMG_PVOID OSMapHWRegsIntoUserSpace(IMG_HANDLE hDevCookie, IMG_SYS_PHYADDR sRegAddr, IMG_UINT32 ulSize, IMG_PVOID *ppvProcess);
425IMG_VOID OSUnmapHWRegsFromUserSpace(IMG_HANDLE hDevCookie, IMG_PVOID pvUserAddr, IMG_PVOID pvProcess);
426
427IMG_VOID UnmapUserFromKernel(IMG_PVOID pvLinAddrUM, IMG_SIZE_T ui32Size, IMG_HANDLE hMemBlock);
428
429PVRSRV_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
437PVRSRV_ERROR OSUnmapPhysToUserSpace(IMG_HANDLE hDevCookie,
438 IMG_PVOID pvUserAddr,
439 IMG_PVOID pvProcess);
440
441PVRSRV_ERROR OSLockResource(PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID);
442PVRSRV_ERROR OSUnlockResource(PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID);
443IMG_BOOL OSIsResourceLocked(PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID);
444PVRSRV_ERROR OSCreateResource(PVRSRV_RESOURCE *psResource);
445PVRSRV_ERROR OSDestroyResource(PVRSRV_RESOURCE *psResource);
446IMG_VOID OSBreakResourceLock(PVRSRV_RESOURCE *psResource, IMG_UINT32 ui32ID);
447IMG_VOID OSWaitus(IMG_UINT32 ui32Timeus);
448IMG_VOID OSReleaseThreadQuanta(IMG_VOID);
449IMG_UINT32 OSPCIReadDword(IMG_UINT32 ui32Bus, IMG_UINT32 ui32Dev, IMG_UINT32 ui32Func, IMG_UINT32 ui32Reg);
450IMG_VOID OSPCIWriteDword(IMG_UINT32 ui32Bus, IMG_UINT32 ui32Dev, IMG_UINT32 ui32Func, IMG_UINT32 ui32Reg, IMG_UINT32 ui32Value);
451
452#ifndef OSReadHWReg
453IMG_UINT32 OSReadHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Offset);
454#endif
455#ifndef OSWriteHWReg
456IMG_VOID OSWriteHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Offset, IMG_UINT32 ui32Value);
457#endif
458
459typedef IMG_VOID (*PFN_TIMER_FUNC)(IMG_VOID*);
460IMG_HANDLE OSAddTimer(PFN_TIMER_FUNC pfnTimerFunc, IMG_VOID *pvData, IMG_UINT32 ui32MsTimeout);
461PVRSRV_ERROR OSRemoveTimer (IMG_HANDLE hTimer);
462PVRSRV_ERROR OSEnableTimer (IMG_HANDLE hTimer);
463PVRSRV_ERROR OSDisableTimer (IMG_HANDLE hTimer);
464
465PVRSRV_ERROR OSGetSysMemSize(IMG_SIZE_T *pui32Bytes);
466
467typedef 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
474struct _PVRSRV_PCI_DEV_OPAQUE_STRUCT_;
475typedef struct _PVRSRV_PCI_DEV_OPAQUE_STRUCT_ *PVRSRV_PCI_DEV_HANDLE;
476
477PVRSRV_PCI_DEV_HANDLE OSPCIAcquireDev(IMG_UINT16 ui16VendorID, IMG_UINT16 ui16DeviceID, HOST_PCI_INIT_FLAGS eFlags);
478PVRSRV_PCI_DEV_HANDLE OSPCISetDev(IMG_VOID *pvPCICookie, HOST_PCI_INIT_FLAGS eFlags);
479PVRSRV_ERROR OSPCIReleaseDev(PVRSRV_PCI_DEV_HANDLE hPVRPCI);
480PVRSRV_ERROR OSPCIIRQ(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 *pui32IRQ);
481IMG_UINT32 OSPCIAddrRangeLen(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 ui32Index);
482IMG_UINT32 OSPCIAddrRangeStart(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 ui32Index);
483IMG_UINT32 OSPCIAddrRangeEnd(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 ui32Index);
484PVRSRV_ERROR OSPCIRequestAddrRange(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 ui32Index);
485PVRSRV_ERROR OSPCIReleaseAddrRange(PVRSRV_PCI_DEV_HANDLE hPVRPCI, IMG_UINT32 ui32Index);
486PVRSRV_ERROR OSPCISuspendDev(PVRSRV_PCI_DEV_HANDLE hPVRPCI);
487PVRSRV_ERROR OSPCIResumeDev(PVRSRV_PCI_DEV_HANDLE hPVRPCI);
488
489PVRSRV_ERROR OSScheduleMISR(IMG_VOID *pvSysData);
490
491IMG_VOID OSPanic(IMG_VOID);
492
493IMG_BOOL OSProcHasPrivSrvInit(IMG_VOID);
494
495typedef enum _img_verify_test
496{
497 PVR_VERIFY_WRITE = 0,
498 PVR_VERIFY_READ
499} IMG_VERIFY_TEST;
500
501IMG_BOOL OSAccessOK(IMG_VERIFY_TEST eVerification, IMG_VOID *pvUserPtr, IMG_SIZE_T ui32Bytes);
502
503PVRSRV_ERROR OSCopyToUser(IMG_PVOID pvProcess, IMG_VOID *pvDest, IMG_VOID *pvSrc, IMG_SIZE_T ui32Bytes);
504PVRSRV_ERROR OSCopyFromUser(IMG_PVOID pvProcess, IMG_VOID *pvDest, IMG_VOID *pvSrc, IMG_SIZE_T ui32Bytes);
505
506#if defined(__linux__)
507PVRSRV_ERROR OSAcquirePhysPageAddr(IMG_VOID* pvCPUVAddr,
508 IMG_SIZE_T ui32Bytes,
509 IMG_SYS_PHYADDR *psSysPAddr,
510 IMG_HANDLE *phOSWrapMem);
511PVRSRV_ERROR OSReleasePhysPageAddr(IMG_HANDLE hOSWrapMem);
512#else
513#ifdef INLINE_IS_PRAGMA
514#pragma inline(OSAcquirePhysPageAddr)
515#endif
516static 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
530static 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
541static inline IMG_BOOL OSInLISR(IMG_VOID unref__ *pvSysData)
542{
543 PVR_UNREFERENCED_PARAMETER(pvSysData);
544 return (in_irq()) ? IMG_TRUE : IMG_FALSE;
545}
546
547static inline IMG_VOID OSWriteMemoryBarrier(IMG_VOID)
548{
549 wmb();
550}
551
552static 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
562static INLINE IMG_VOID OSWriteMemoryBarrier(IMG_VOID) { }
563
564#ifdef INLINE_IS_PRAGMA
565#pragma inline(OSMemoryBarrier)
566#endif
567static INLINE IMG_VOID OSMemoryBarrier(IMG_VOID) { }
568
569#endif
570
571#if defined (__cplusplus)
572}
573#endif
574
575#endif
576