1 /****************************************************************************
3 * Copyright (C) 2005 - 2013 by Vivante Corp.
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the license, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 *****************************************************************************/
25 #include "gc_hal_rename.h"
26 #include "gc_hal_types.h"
27 #include "gc_hal_enum.h"
28 #include "gc_hal_base.h"
29 #include "gc_hal_profiler.h"
30 #include "gc_hal_driver.h"
32 #include "gc_hal_statistics.h"
39 /******************************************************************************\
40 ******************************* Alignment Macros *******************************
41 \******************************************************************************/
43 #define gcmALIGN(n, align) \
45 ((n) + ((align) - 1)) & ~((align) - 1) \
48 #define gcmALIGN_BASE(n, align) \
50 ((n) & ~((align) - 1)) \
53 /******************************************************************************\
54 ***************************** Element Count Macro *****************************
55 \******************************************************************************/
57 #define gcmSIZEOF(a) \
59 (gctSIZE_T) (sizeof(a)) \
62 #define gcmCOUNTOF(a) \
64 sizeof(a) / sizeof(a[0]) \
67 /******************************************************************************\
68 ********************************* Cast Macro **********************************
69 \******************************************************************************/
70 #define gcmNAME_TO_PTR(na) \
71 gckKERNEL_QueryPointerFromName(kernel, gcmALL_TO_UINT32(na))
73 #define gcmPTR_TO_NAME(ptr) \
74 gckKERNEL_AllocateNameFromPointer(kernel, ptr)
76 #define gcmRELEASE_NAME(na) \
77 gckKERNEL_DeleteName(kernel, gcmALL_TO_UINT32(na))
81 #define gcmALL_TO_UINT32(t) \
83 (gctUINT32) (gctUINTPTR_T) (t)\
86 #define gcmPTR_TO_UINT64(p) \
91 #define gcmUINT64_TO_PTR(u) \
98 #define gcmALL_TO_UINT32(t) \
103 #define gcmPTR_TO_UINT64(p) \
105 (gctUINT64) (gctUINTPTR_T) (p)\
108 #define gcmUINT64_TO_PTR(u) \
110 (gctPOINTER) (gctUINTPTR_T) (u)\
115 #define gcmUINT64_TO_TYPE(u, t) \
117 (t) (gctUINTPTR_T) (u)\
120 /******************************************************************************\
121 ******************************** Useful Macro *********************************
122 \******************************************************************************/
124 #define gcvINVALID_ADDRESS ~0U
126 /******************************************************************************\
127 ******************************** gcsOBJECT Object *******************************
128 \******************************************************************************/
130 /* Type of objects. */
131 typedef enum _gceOBJECT_TYPE
134 gcvOBJ_2D = gcmCC('2','D',' ',' '),
135 gcvOBJ_3D = gcmCC('3','D',' ',' '),
136 gcvOBJ_ATTRIBUTE = gcmCC('A','T','T','R'),
137 gcvOBJ_BRUSHCACHE = gcmCC('B','R','U','$'),
138 gcvOBJ_BRUSHNODE = gcmCC('B','R','U','n'),
139 gcvOBJ_BRUSH = gcmCC('B','R','U','o'),
140 gcvOBJ_BUFFER = gcmCC('B','U','F','R'),
141 gcvOBJ_COMMAND = gcmCC('C','M','D',' '),
142 gcvOBJ_COMMANDBUFFER = gcmCC('C','M','D','B'),
143 gcvOBJ_CONTEXT = gcmCC('C','T','X','T'),
144 gcvOBJ_DEVICE = gcmCC('D','E','V',' '),
145 gcvOBJ_DUMP = gcmCC('D','U','M','P'),
146 gcvOBJ_EVENT = gcmCC('E','V','N','T'),
147 gcvOBJ_FUNCTION = gcmCC('F','U','N','C'),
148 gcvOBJ_HAL = gcmCC('H','A','L',' '),
149 gcvOBJ_HARDWARE = gcmCC('H','A','R','D'),
150 gcvOBJ_HEAP = gcmCC('H','E','A','P'),
151 gcvOBJ_INDEX = gcmCC('I','N','D','X'),
152 gcvOBJ_INTERRUPT = gcmCC('I','N','T','R'),
153 gcvOBJ_KERNEL = gcmCC('K','E','R','N'),
154 gcvOBJ_KERNEL_FUNCTION = gcmCC('K','F','C','N'),
155 gcvOBJ_MEMORYBUFFER = gcmCC('M','E','M','B'),
156 gcvOBJ_MMU = gcmCC('M','M','U',' '),
157 gcvOBJ_OS = gcmCC('O','S',' ',' '),
158 gcvOBJ_OUTPUT = gcmCC('O','U','T','P'),
159 gcvOBJ_PAINT = gcmCC('P','N','T',' '),
160 gcvOBJ_PATH = gcmCC('P','A','T','H'),
161 gcvOBJ_QUEUE = gcmCC('Q','U','E',' '),
162 gcvOBJ_SAMPLER = gcmCC('S','A','M','P'),
163 gcvOBJ_SHADER = gcmCC('S','H','D','R'),
164 gcvOBJ_STREAM = gcmCC('S','T','R','M'),
165 gcvOBJ_SURF = gcmCC('S','U','R','F'),
166 gcvOBJ_TEXTURE = gcmCC('T','X','T','R'),
167 gcvOBJ_UNIFORM = gcmCC('U','N','I','F'),
168 gcvOBJ_VARIABLE = gcmCC('V','A','R','I'),
169 gcvOBJ_VERTEX = gcmCC('V','R','T','X'),
170 gcvOBJ_VIDMEM = gcmCC('V','M','E','M'),
171 gcvOBJ_VG = gcmCC('V','G',' ',' '),
175 /* gcsOBJECT object defintinon. */
176 typedef struct _gcsOBJECT
178 /* Type of an object. */
183 typedef struct _gckHARDWARE * gckHARDWARE;
186 typedef enum _gceCORE
194 #define gcdMAX_GPU_COUNT 3
196 /*******************************************************************************
200 ** Assert if an object is invalid or is not of the specified type. If the
201 ** object is invalid or not of the specified type, gcvSTATUS_INVALID_OBJECT
202 ** will be returned from the current function. In retail mode this macro
207 ** obj Object to test.
208 ** t Expected type of the object.
210 #if gcmIS_DEBUG(gcdDEBUG_TRACE)
211 #define _gcmVERIFY_OBJECT(prefix, obj, t) \
212 if ((obj) == gcvNULL) \
214 prefix##TRACE(gcvLEVEL_ERROR, \
215 #prefix "VERIFY_OBJECT failed: NULL"); \
216 prefix##TRACE(gcvLEVEL_ERROR, " expected: %c%c%c%c", \
218 prefix##ASSERT((obj) != gcvNULL); \
219 prefix##FOOTER_ARG("status=%d", gcvSTATUS_INVALID_OBJECT); \
220 return gcvSTATUS_INVALID_OBJECT; \
222 else if (((gcsOBJECT*) (obj))->type != t) \
224 prefix##TRACE(gcvLEVEL_ERROR, \
225 #prefix "VERIFY_OBJECT failed: %c%c%c%c", \
226 gcmCC_PRINT(((gcsOBJECT*) (obj))->type)); \
227 prefix##TRACE(gcvLEVEL_ERROR, " expected: %c%c%c%c", \
229 prefix##ASSERT(((gcsOBJECT*)(obj))->type == t); \
230 prefix##FOOTER_ARG("status=%d", gcvSTATUS_INVALID_OBJECT); \
231 return gcvSTATUS_INVALID_OBJECT; \
234 # define gcmVERIFY_OBJECT(obj, t) _gcmVERIFY_OBJECT(gcm, obj, t)
235 # define gcmkVERIFY_OBJECT(obj, t) _gcmVERIFY_OBJECT(gcmk, obj, t)
237 # define gcmVERIFY_OBJECT(obj, t) do {} while (gcvFALSE)
238 # define gcmkVERIFY_OBJECT(obj, t) do {} while (gcvFALSE)
241 /******************************************************************************/
242 /*VERIFY_OBJECT if special return expected*/
243 /******************************************************************************/
244 #ifndef EGL_API_ANDROID
245 # define _gcmVERIFY_OBJECT_RETURN(prefix, obj, t, retVal) \
248 if ((obj) == gcvNULL) \
250 prefix##PRINT_VERSION(); \
251 prefix##TRACE(gcvLEVEL_ERROR, \
252 #prefix "VERIFY_OBJECT_RETURN failed: NULL"); \
253 prefix##TRACE(gcvLEVEL_ERROR, " expected: %c%c%c%c", \
255 prefix##ASSERT((obj) != gcvNULL); \
256 prefix##FOOTER_ARG("retVal=%d", retVal); \
259 else if (((gcsOBJECT*) (obj))->type != t) \
261 prefix##PRINT_VERSION(); \
262 prefix##TRACE(gcvLEVEL_ERROR, \
263 #prefix "VERIFY_OBJECT_RETURN failed: %c%c%c%c", \
264 gcmCC_PRINT(((gcsOBJECT*) (obj))->type)); \
265 prefix##TRACE(gcvLEVEL_ERROR, " expected: %c%c%c%c", \
267 prefix##ASSERT(((gcsOBJECT*)(obj))->type == t); \
268 prefix##FOOTER_ARG("retVal=%d", retVal); \
273 # define gcmVERIFY_OBJECT_RETURN(obj, t, retVal) \
274 _gcmVERIFY_OBJECT_RETURN(gcm, obj, t, retVal)
275 # define gcmkVERIFY_OBJECT_RETURN(obj, t, retVal) \
276 _gcmVERIFY_OBJECT_RETURN(gcmk, obj, t, retVal)
278 # define gcmVERIFY_OBJECT_RETURN(obj, t) do {} while (gcvFALSE)
279 # define gcmVERIFY_OBJECT_RETURN(obj, t) do {} while (gcvFALSE)
282 /******************************************************************************\
283 ********************************** gckOS Object *********************************
284 \******************************************************************************/
286 /* Construct a new gckOS object. */
289 IN gctPOINTER Context,
293 /* Destroy an gckOS object. */
299 /* Query the video memory. */
301 gckOS_QueryVideoMemory(
303 OUT gctPHYS_ADDR * InternalAddress,
304 OUT gctSIZE_T * InternalSize,
305 OUT gctPHYS_ADDR * ExternalAddress,
306 OUT gctSIZE_T * ExternalSize,
307 OUT gctPHYS_ADDR * ContiguousAddress,
308 OUT gctSIZE_T * ContiguousSize
311 /* Allocate memory from the heap. */
316 OUT gctPOINTER * Memory
319 /* Free allocated memory. */
326 /* Wrapper for allocation memory.. */
328 gckOS_AllocateMemory(
331 OUT gctPOINTER * Memory
334 /* Wrapper for freeing memory. */
341 /* Allocate paged memory. */
343 gckOS_AllocatePagedMemory(
346 OUT gctPHYS_ADDR * Physical
349 /* Allocate paged memory. */
351 gckOS_AllocatePagedMemoryEx(
353 IN gctBOOL Contiguous,
355 OUT gctPHYS_ADDR * Physical
362 IN gctPHYS_ADDR Physical,
364 IN gctBOOL Cacheable,
365 OUT gctPOINTER * Logical,
366 OUT gctSIZE_T * PageCount
373 IN gctPHYS_ADDR Physical,
375 IN gctPOINTER Logical,
377 IN gctSIZE_T PageCount,
378 IN gctPOINTER PageTable
386 IN gctPHYS_ADDR Physical,
388 IN gctPOINTER Logical,
390 IN gctSIZE_T PageCount,
391 IN gctPOINTER PageTable
398 IN gctPHYS_ADDR Physical,
400 IN gctPOINTER Logical
403 /* Free paged memory. */
405 gckOS_FreePagedMemory(
407 IN gctPHYS_ADDR Physical,
411 /* Allocate non-paged memory. */
413 gckOS_AllocateNonPagedMemory(
415 IN gctBOOL InUserSpace,
416 IN OUT gctSIZE_T * Bytes,
417 OUT gctPHYS_ADDR * Physical,
418 OUT gctPOINTER * Logical
421 /* Free non-paged memory. */
423 gckOS_FreeNonPagedMemory(
426 IN gctPHYS_ADDR Physical,
427 IN gctPOINTER Logical
430 /* Allocate contiguous memory. */
432 gckOS_AllocateContiguous(
434 IN gctBOOL InUserSpace,
435 IN OUT gctSIZE_T * Bytes,
436 OUT gctPHYS_ADDR * Physical,
437 OUT gctPOINTER * Logical
440 /* Free contiguous memory. */
442 gckOS_FreeContiguous(
444 IN gctPHYS_ADDR Physical,
445 IN gctPOINTER Logical,
449 /* Get the number fo bytes per page. */
453 OUT gctSIZE_T * PageSize
456 /* Get the physical address of a corresponding logical address. */
458 gckOS_GetPhysicalAddress(
460 IN gctPOINTER Logical,
461 OUT gctUINT32 * Address
464 /* Get the physical address of a corresponding logical address. */
466 gckOS_GetPhysicalAddressProcess(
468 IN gctPOINTER Logical,
469 IN gctUINT32 ProcessID,
470 OUT gctUINT32 * Address
473 /* Map physical memory. */
477 IN gctUINT32 Physical,
479 OUT gctPOINTER * Logical
482 /* Unmap previously mapped physical memory. */
486 IN gctPOINTER Logical,
490 /* Read data from a hardware register. */
494 IN gctUINT32 Address,
498 /* Read data from a hardware register. */
500 gckOS_ReadRegisterEx(
503 IN gctUINT32 Address,
507 /* Write data to a hardware register. */
511 IN gctUINT32 Address,
515 /* Write data to a hardware register. */
517 gckOS_WriteRegisterEx(
520 IN gctUINT32 Address,
524 /* Write data to a 32-bit memory location. */
528 IN gctPOINTER Address,
532 /* Map physical memory into the process space. */
536 IN gctPHYS_ADDR Physical,
538 OUT gctPOINTER * Logical
541 /* Unmap physical memory from the specified process space. */
545 IN gctPHYS_ADDR Physical,
547 IN gctPOINTER Logical,
551 /* Unmap physical memory from the process space. */
555 IN gctPHYS_ADDR Physical,
557 IN gctPOINTER Logical
560 /* Unmap user logical memory out of physical memory.
561 * This function is only supported in Linux currently.
564 gckOS_UnmapUserLogical(
566 IN gctPHYS_ADDR Physical,
568 IN gctPOINTER Logical
571 /* Create a new mutex. */
575 OUT gctPOINTER * Mutex
578 /* Delete a mutex. */
585 /* Acquire a mutex. */
593 /* Release a mutex. */
600 /* Atomically exchange a pair of 32-bit values. */
602 gckOS_AtomicExchange(
604 IN OUT gctUINT32_PTR Target,
605 IN gctUINT32 NewValue,
606 OUT gctUINT32_PTR OldValue
609 /* Atomically exchange a pair of pointers. */
611 gckOS_AtomicExchangePtr(
613 IN OUT gctPOINTER * Target,
614 IN gctPOINTER NewValue,
615 OUT gctPOINTER * OldValue
638 gckOS_GetProcessNameByPid(
641 OUT gctUINT8_PTR String
646 /*******************************************************************************
648 ** gckOS_AtomConstruct
655 ** Pointer to a gckOS object.
660 ** Pointer to a variable receiving the constructed atom.
665 OUT gctPOINTER * Atom
668 /*******************************************************************************
677 ** Pointer to a gckOS object.
680 ** Pointer to the atom to destroy.
692 /*******************************************************************************
696 ** Get the 32-bit value protected by an atom.
701 ** Pointer to a gckOS object.
704 ** Pointer to the atom.
708 ** gctINT32_PTR Value
709 ** Pointer to a variable the receives the value of the atom.
715 OUT gctINT32_PTR Value
718 /*******************************************************************************
722 ** Set the 32-bit value protected by an atom.
727 ** Pointer to a gckOS object.
730 ** Pointer to the atom.
733 ** The value of the atom.
746 /*******************************************************************************
748 ** gckOS_AtomIncrement
750 ** Atomically increment the 32-bit integer value inside an atom.
755 ** Pointer to a gckOS object.
758 ** Pointer to the atom.
762 ** gctINT32_PTR Value
763 ** Pointer to a variable the receives the original value of the atom.
769 OUT gctINT32_PTR Value
772 /*******************************************************************************
774 ** gckOS_AtomDecrement
776 ** Atomically decrement the 32-bit integer value inside an atom.
781 ** Pointer to a gckOS object.
784 ** Pointer to the atom.
788 ** gctINT32_PTR Value
789 ** Pointer to a variable the receives the original value of the atom.
795 OUT gctINT32_PTR Value
798 /* Delay a number of microseconds. */
805 /* Get time in milliseconds. */
808 OUT gctUINT32_PTR Time
811 /* Compare time value. */
816 OUT gctBOOL_PTR IsAfter
819 /* Get time in microseconds. */
822 OUT gctUINT64_PTR Time
825 /* Memory barrier. */
829 IN gctPOINTER Address
832 /* Map user pointer. */
834 gckOS_MapUserPointer(
836 IN gctPOINTER Pointer,
838 OUT gctPOINTER * KernelPointer
841 /* Unmap user pointer. */
843 gckOS_UnmapUserPointer(
845 IN gctPOINTER Pointer,
847 IN gctPOINTER KernelPointer
850 /*******************************************************************************
852 ** gckOS_QueryNeedCopy
854 ** Query whether the memory can be accessed or mapped directly or it has to be
860 ** Pointer to an gckOS object.
862 ** gctUINT32 ProcessID
863 ** Process ID of the current process.
867 ** gctBOOL_PTR NeedCopy
868 ** Pointer to a boolean receiving gcvTRUE if the memory needs a copy or
869 ** gcvFALSE if the memory can be accessed or mapped dircetly.
874 IN gctUINT32 ProcessID,
875 OUT gctBOOL_PTR NeedCopy
878 /*******************************************************************************
880 ** gckOS_CopyFromUserData
882 ** Copy data from user to kernel memory.
887 ** Pointer to an gckOS object.
889 ** gctPOINTER KernelPointer
890 ** Pointer to kernel memory.
892 ** gctPOINTER Pointer
893 ** Pointer to user memory.
896 ** Number of bytes to copy.
903 gckOS_CopyFromUserData(
905 IN gctPOINTER KernelPointer,
906 IN gctPOINTER Pointer,
910 /*******************************************************************************
912 ** gckOS_CopyToUserData
914 ** Copy data from kernel to user memory.
919 ** Pointer to an gckOS object.
921 ** gctPOINTER KernelPointer
922 ** Pointer to kernel memory.
924 ** gctPOINTER Pointer
925 ** Pointer to user memory.
928 ** Number of bytes to copy.
935 gckOS_CopyToUserData(
937 IN gctPOINTER KernelPointer,
938 IN gctPOINTER Pointer,
943 /* Map user physical address. */
945 gckOS_MapUserPhysical(
947 IN gctPHYS_ADDR Phys,
948 OUT gctPOINTER * KernelPointer
953 gckOS_SuspendInterrupt(
958 gckOS_SuspendInterruptEx(
964 gckOS_ResumeInterrupt(
969 gckOS_ResumeInterruptEx(
974 /* Get the base address for the physical memory. */
976 gckOS_GetBaseAddress(
978 OUT gctUINT32_PTR BaseAddress
981 /* Perform a memory copy. */
984 IN gctPOINTER Destination,
985 IN gctCONST_POINTER Source,
992 IN gctPOINTER Memory,
996 /* Device I/O control to the kernel HAL layer. */
1000 IN gctBOOL FromUser,
1001 IN gctUINT32 IoControlCode,
1002 IN gctPOINTER InputBuffer,
1003 IN gctSIZE_T InputBufferSize,
1004 OUT gctPOINTER OutputBuffer,
1005 IN gctSIZE_T OutputBufferSize
1008 /*******************************************************************************
1010 ** gckOS_GetProcessID
1012 ** Get current process ID.
1020 ** gctUINT32_PTR ProcessID
1021 ** Pointer to the variable that receives the process ID.
1025 OUT gctUINT32_PTR ProcessID
1029 gckOS_GetCurrentProcessID(
1030 OUT gctUINT32_PTR ProcessID
1033 /*******************************************************************************
1035 ** gckOS_GetThreadID
1037 ** Get current thread ID.
1045 ** gctUINT32_PTR ThreadID
1046 ** Pointer to the variable that receives the thread ID.
1050 OUT gctUINT32_PTR ThreadID
1053 /******************************************************************************\
1054 ********************************** Signal Object *********************************
1055 \******************************************************************************/
1057 /* Create a signal. */
1061 IN gctBOOL ManualReset,
1062 OUT gctSIGNAL * Signal
1065 /* Destroy a signal. */
1067 gckOS_DestroySignal(
1072 /* Signal a signal. */
1076 IN gctSIGNAL Signal,
1080 /* Wait for a signal. */
1084 IN gctSIGNAL Signal,
1088 /* Map a user signal to the kernel space. */
1092 IN gctSIGNAL Signal,
1093 IN gctHANDLE Process,
1094 OUT gctSIGNAL * MappedSignal
1097 /* Unmap a user signal */
1104 /* Map user memory. */
1106 gckOS_MapUserMemory(
1109 IN gctPOINTER Memory,
1110 IN gctUINT32 Physical,
1112 OUT gctPOINTER * Info,
1113 OUT gctUINT32_PTR Address
1116 /* Unmap user memory. */
1118 gckOS_UnmapUserMemory(
1121 IN gctPOINTER Memory,
1124 IN gctUINT32 Address
1127 #if !USE_NEW_LINUX_SIGNAL
1128 /* Create signal to be used in the user space. */
1130 gckOS_CreateUserSignal(
1132 IN gctBOOL ManualReset,
1133 OUT gctINT * SignalID
1136 /* Destroy signal used in the user space. */
1138 gckOS_DestroyUserSignal(
1143 /* Wait for signal used in the user space. */
1145 gckOS_WaitUserSignal(
1151 /* Signal a signal used in the user space. */
1153 gckOS_SignalUserSignal(
1158 #endif /* USE_NEW_LINUX_SIGNAL */
1160 /* Set a signal owned by a process. */
1161 #if defined(__QNXNTO__)
1165 IN gctSIGNAL Signal,
1173 IN gctSIGNAL Signal,
1174 IN gctHANDLE Process
1178 /******************************************************************************\
1185 gctUINT32 ProcessID,
1186 gctPHYS_ADDR Handle,
1187 gctPOINTER Physical,
1195 gctUINT32 ProcessID,
1196 gctPHYS_ADDR Handle,
1197 gctPOINTER Physical,
1203 gckOS_CacheInvalidate(
1205 gctUINT32 ProcessID,
1206 gctPHYS_ADDR Handle,
1207 gctPOINTER Physical,
1212 /******************************************************************************\
1217 gckOS_SetDebugLevel(
1227 gckOS_SetDebugLevelZone(
1233 gckOS_SetDebugZones(
1240 IN gctCONST_STRING FileName
1243 /*******************************************************************************
1244 ** Broadcast interface.
1247 typedef enum _gceBROADCAST
1249 /* GPU might be idle. */
1250 gcvBROADCAST_GPU_IDLE,
1252 /* A commit is going to happen. */
1253 gcvBROADCAST_GPU_COMMIT,
1255 /* GPU seems to be stuck. */
1256 gcvBROADCAST_GPU_STUCK,
1258 /* First process gets attached. */
1259 gcvBROADCAST_FIRST_PROCESS,
1261 /* Last process gets detached. */
1262 gcvBROADCAST_LAST_PROCESS,
1264 /* AXI bus error. */
1265 gcvBROADCAST_AXI_BUS_ERROR,
1272 IN gckHARDWARE Hardware,
1273 IN gceBROADCAST Reason
1277 gckOS_BroadcastHurry(
1279 IN gckHARDWARE Hardware,
1284 gckOS_BroadcastCalibrateSpeed(
1286 IN gckHARDWARE Hardware,
1291 /*******************************************************************************
1293 ** gckOS_SetGPUPower
1295 ** Set the power of the GPU on or off.
1300 ** Pointer to a gckOS object.ß
1303 ** GPU whose power is set.
1306 ** gcvTRUE to turn on the clock, or gcvFALSE to turn off the clock.
1309 ** gcvTRUE to turn on the power, or gcvFALSE to turn off the power.
1330 gckOS_PrepareGPUFrequency(
1336 gckOS_FinishGPUFrequency(
1342 gckOS_QueryGPUFrequency(
1345 OUT gctUINT32 * Frequency,
1346 OUT gctUINT8 * Scale
1350 gckOS_SetGPUFrequency(
1356 /*******************************************************************************
1360 /* Create a new semaphore. */
1362 gckOS_CreateSemaphore(
1364 OUT gctPOINTER * Semaphore
1369 gckOS_CreateSemaphoreVG(
1371 OUT gctPOINTER * Semaphore
1375 /* Delete a semahore. */
1377 gckOS_DestroySemaphore(
1379 IN gctPOINTER Semaphore
1382 /* Acquire a semahore. */
1384 gckOS_AcquireSemaphore(
1386 IN gctPOINTER Semaphore
1389 /* Try to acquire a semahore. */
1391 gckOS_TryAcquireSemaphore(
1393 IN gctPOINTER Semaphore
1396 /* Release a semahore. */
1398 gckOS_ReleaseSemaphore(
1400 IN gctPOINTER Semaphore
1403 /*******************************************************************************
1407 typedef void (*gctTIMERFUNCTION)(gctPOINTER);
1409 /* Create a timer. */
1413 IN gctTIMERFUNCTION Function,
1415 OUT gctPOINTER * Timer
1418 /* Destory a timer. */
1425 /* Start a timer. */
1429 IN gctPOINTER Timer,
1440 /******************************************************************************\
1441 ********************************* gckHEAP Object ********************************
1442 \******************************************************************************/
1444 typedef struct _gckHEAP * gckHEAP;
1446 /* Construct a new gckHEAP object. */
1450 IN gctSIZE_T AllocationSize,
1454 /* Destroy an gckHEAP object. */
1460 /* Allocate memory. */
1465 OUT gctPOINTER * Node
1475 /* Profile the heap. */
1477 gckHEAP_ProfileStart(
1484 IN gctCONST_STRING Title
1488 /******************************************************************************\
1489 ******************************** gckVIDMEM Object ******************************
1490 \******************************************************************************/
1492 typedef struct _gckVIDMEM * gckVIDMEM;
1493 typedef struct _gckKERNEL * gckKERNEL;
1494 typedef struct _gckDB * gckDB;
1495 typedef struct _gckDVFS * gckDVFS;
1497 /* Construct a new gckVIDMEM object. */
1499 gckVIDMEM_Construct(
1501 IN gctUINT32 BaseAddress,
1503 IN gctSIZE_T Threshold,
1504 IN gctSIZE_T Banking,
1505 OUT gckVIDMEM * Memory
1508 /* Destroy an gckVDIMEM object. */
1514 /* Allocate rectangular memory. */
1517 IN gckVIDMEM Memory,
1521 IN gctUINT BytesPerPixel,
1522 IN gctUINT32 Alignment,
1523 IN gceSURF_TYPE Type,
1524 OUT gcuVIDMEM_NODE_PTR * Node
1527 /* Allocate linear memory. */
1529 gckVIDMEM_AllocateLinear(
1530 IN gckVIDMEM Memory,
1532 IN gctUINT32 Alignment,
1533 IN gceSURF_TYPE Type,
1534 OUT gcuVIDMEM_NODE_PTR * Node
1540 IN gcuVIDMEM_NODE_PTR Node
1546 IN gckKERNEL Kernel,
1547 IN gcuVIDMEM_NODE_PTR Node,
1548 IN gctBOOL Cacheable,
1549 OUT gctUINT32 * Address
1552 /* Unlock memory. */
1555 IN gckKERNEL Kernel,
1556 IN gcuVIDMEM_NODE_PTR Node,
1557 IN gceSURF_TYPE Type,
1558 IN OUT gctBOOL * Asynchroneous
1561 /* Construct a gcuVIDMEM_NODE union for virtual memory. */
1563 gckVIDMEM_ConstructVirtual(
1564 IN gckKERNEL Kernel,
1565 IN gctBOOL Contiguous,
1567 OUT gcuVIDMEM_NODE_PTR * Node
1570 /* Destroy a gcuVIDMEM_NODE union for virtual memory. */
1572 gckVIDMEM_DestroyVirtual(
1573 IN gcuVIDMEM_NODE_PTR Node
1576 /******************************************************************************\
1577 ******************************** gckKERNEL Object ******************************
1578 \******************************************************************************/
1580 struct _gcsHAL_INTERFACE;
1582 /* Notifications. */
1583 typedef enum _gceNOTIFY
1585 gcvNOTIFY_INTERRUPT,
1586 gcvNOTIFY_COMMAND_QUEUE,
1591 typedef enum _gceKERNEL_FLUSH
1593 gcvFLUSH_COLOR = 0x01,
1594 gcvFLUSH_DEPTH = 0x02,
1595 gcvFLUSH_TEXTURE = 0x04,
1597 gcvFLUSH_ALL = gcvFLUSH_COLOR
1604 /* Construct a new gckKERNEL object. */
1606 gckKERNEL_Construct(
1609 IN gctPOINTER Context,
1611 OUT gckKERNEL * Kernel
1614 /* Destroy an gckKERNEL object. */
1620 /* Dispatch a user-level command. */
1623 IN gckKERNEL Kernel,
1624 IN gctBOOL FromUser,
1625 IN OUT struct _gcsHAL_INTERFACE * Interface
1628 /* Query the video memory. */
1630 gckKERNEL_QueryVideoMemory(
1631 IN gckKERNEL Kernel,
1632 OUT struct _gcsHAL_INTERFACE * Interface
1635 /* Lookup the gckVIDMEM object for a pool. */
1637 gckKERNEL_GetVideoMemoryPool(
1638 IN gckKERNEL Kernel,
1640 OUT gckVIDMEM * VideoMemory
1643 #if gcdUSE_VIDMEM_PER_PID
1645 gckKERNEL_GetVideoMemoryPoolPid(
1646 IN gckKERNEL Kernel,
1649 OUT gckVIDMEM * VideoMemory
1653 gckKERNEL_CreateVideoMemoryPoolPid(
1654 IN gckKERNEL Kernel,
1657 OUT gckVIDMEM * VideoMemory
1661 gckKERNEL_RemoveVideoMemoryPoolPid(
1662 IN gckKERNEL Kernel,
1663 IN gckVIDMEM VideoMemory
1667 /* Map video memory. */
1669 gckKERNEL_MapVideoMemory(
1670 IN gckKERNEL Kernel,
1671 IN gctBOOL InUserSpace,
1672 IN gctUINT32 Address,
1677 OUT gctPOINTER * Logical
1680 /* Map video memory. */
1682 gckKERNEL_MapVideoMemoryEx(
1683 IN gckKERNEL Kernel,
1685 IN gctBOOL InUserSpace,
1686 IN gctUINT32 Address,
1691 OUT gctPOINTER * Logical
1695 /* Unmap video memory. */
1697 gckKERNEL_UnmapVideoMemory(
1698 IN gckKERNEL Kernel,
1699 IN gctPOINTER Logical,
1707 gckKERNEL_MapMemory(
1708 IN gckKERNEL Kernel,
1709 IN gctPHYS_ADDR Physical,
1711 OUT gctPOINTER * Logical
1716 gckKERNEL_UnmapMemory(
1717 IN gckKERNEL Kernel,
1718 IN gctPHYS_ADDR Physical,
1720 IN gctPOINTER Logical
1723 /* Notification of events. */
1726 IN gckKERNEL Kernel,
1727 IN gceNOTIFY Notifcation,
1732 gckKERNEL_QuerySettings(
1733 IN gckKERNEL Kernel,
1734 OUT gcsKERNEL_SETTINGS * Settings
1737 /*******************************************************************************
1739 ** gckKERNEL_Recovery
1741 ** Try to recover the GPU from a fatal error.
1746 ** Pointer to an gckKERNEL object.
1757 /* Set the value of timeout on HW operation. */
1759 gckKERNEL_SetTimeOut(
1760 IN gckKERNEL Kernel,
1761 IN gctUINT32 timeOut
1764 /* Get access to the user data. */
1766 gckKERNEL_OpenUserData(
1767 IN gckKERNEL Kernel,
1768 IN gctBOOL NeedCopy,
1769 IN gctPOINTER StaticStorage,
1770 IN gctPOINTER UserPointer,
1772 OUT gctPOINTER * KernelPointer
1775 /* Release resources associated with the user data connection. */
1777 gckKERNEL_CloseUserData(
1778 IN gckKERNEL Kernel,
1779 IN gctBOOL NeedCopy,
1780 IN gctBOOL FlushData,
1781 IN gctPOINTER UserPointer,
1783 OUT gctPOINTER * KernelPointer
1788 IN gckHARDWARE Hardware,
1789 OUT gckDVFS * Frequency
1807 /******************************************************************************\
1808 ******************************* gckHARDWARE Object *****************************
1809 \******************************************************************************/
1811 /* Construct a new gckHARDWARE object. */
1813 gckHARDWARE_Construct(
1816 OUT gckHARDWARE * Hardware
1819 /* Destroy an gckHARDWARE object. */
1821 gckHARDWARE_Destroy(
1822 IN gckHARDWARE Hardware
1825 /* Get hardware type. */
1827 gckHARDWARE_GetType(
1828 IN gckHARDWARE Hardware,
1829 OUT gceHARDWARE_TYPE * Type
1832 /* Query system memory requirements. */
1834 gckHARDWARE_QuerySystemMemory(
1835 IN gckHARDWARE Hardware,
1836 OUT gctSIZE_T * SystemSize,
1837 OUT gctUINT32 * SystemBaseAddress
1840 /* Build virtual address. */
1842 gckHARDWARE_BuildVirtualAddress(
1843 IN gckHARDWARE Hardware,
1845 IN gctUINT32 Offset,
1846 OUT gctUINT32 * Address
1849 /* Query command buffer requirements. */
1851 gckHARDWARE_QueryCommandBuffer(
1852 IN gckHARDWARE Hardware,
1853 OUT gctSIZE_T * Alignment,
1854 OUT gctSIZE_T * ReservedHead,
1855 OUT gctSIZE_T * ReservedTail
1858 /* Add a WAIT/LINK pair in the command queue. */
1860 gckHARDWARE_WaitLink(
1861 IN gckHARDWARE Hardware,
1862 IN gctPOINTER Logical,
1863 IN gctUINT32 Offset,
1864 IN OUT gctSIZE_T * Bytes,
1865 OUT gctUINT32 * WaitOffset,
1866 OUT gctSIZE_T * WaitBytes
1869 /* Kickstart the command processor. */
1871 gckHARDWARE_Execute(
1872 IN gckHARDWARE Hardware,
1873 IN gctPOINTER Logical,
1875 IN gctPOINTER Physical,
1876 IN gctBOOL PhysicalAddresses,
1881 /* Add an END command in the command queue. */
1884 IN gckHARDWARE Hardware,
1885 IN gctPOINTER Logical,
1886 IN OUT gctSIZE_T * Bytes
1889 /* Add a NOP command in the command queue. */
1892 IN gckHARDWARE Hardware,
1893 IN gctPOINTER Logical,
1894 IN OUT gctSIZE_T * Bytes
1897 /* Add a WAIT command in the command queue. */
1900 IN gckHARDWARE Hardware,
1901 IN gctPOINTER Logical,
1903 IN OUT gctSIZE_T * Bytes
1906 /* Add a PIPESELECT command in the command queue. */
1908 gckHARDWARE_PipeSelect(
1909 IN gckHARDWARE Hardware,
1910 IN gctPOINTER Logical,
1911 IN gcePIPE_SELECT Pipe,
1912 IN OUT gctSIZE_T * Bytes
1915 /* Add a LINK command in the command queue. */
1918 IN gckHARDWARE Hardware,
1919 IN gctPOINTER Logical,
1920 IN gctPOINTER FetchAddress,
1921 IN gctSIZE_T FetchSize,
1922 IN OUT gctSIZE_T * Bytes
1925 /* Add an EVENT command in the command queue. */
1928 IN gckHARDWARE Hardware,
1929 IN gctPOINTER Logical,
1931 IN gceKERNEL_WHERE FromWhere,
1932 IN OUT gctSIZE_T * Bytes
1935 /* Query the available memory. */
1937 gckHARDWARE_QueryMemory(
1938 IN gckHARDWARE Hardware,
1939 OUT gctSIZE_T * InternalSize,
1940 OUT gctUINT32 * InternalBaseAddress,
1941 OUT gctUINT32 * InternalAlignment,
1942 OUT gctSIZE_T * ExternalSize,
1943 OUT gctUINT32 * ExternalBaseAddress,
1944 OUT gctUINT32 * ExternalAlignment,
1945 OUT gctUINT32 * HorizontalTileSize,
1946 OUT gctUINT32 * VerticalTileSize
1949 /* Query the identity of the hardware. */
1951 gckHARDWARE_QueryChipIdentity(
1952 IN gckHARDWARE Hardware,
1953 OUT gcsHAL_QUERY_CHIP_IDENTITY_PTR Identity
1956 /* Query the shader support. */
1958 gckHARDWARE_QueryShaderCaps(
1959 IN gckHARDWARE Hardware,
1960 OUT gctUINT * VertexUniforms,
1961 OUT gctUINT * FragmentUniforms,
1962 OUT gctUINT * Varyings
1965 /* Split a harwdare specific address into API stuff. */
1967 gckHARDWARE_SplitMemory(
1968 IN gckHARDWARE Hardware,
1969 IN gctUINT32 Address,
1971 OUT gctUINT32 * Offset
1974 /* Update command queue tail pointer. */
1976 gckHARDWARE_UpdateQueueTail(
1977 IN gckHARDWARE Hardware,
1978 IN gctPOINTER Logical,
1982 /* Convert logical address to hardware specific address. */
1984 gckHARDWARE_ConvertLogical(
1985 IN gckHARDWARE Hardware,
1986 IN gctPOINTER Logical,
1987 OUT gctUINT32 * Address
1991 /* Convert physical address to hardware specific address. */
1993 gckHARDWARE_ConvertPhysical(
1994 IN gckHARDWARE Hardware,
1995 IN gctPHYS_ADDR Physical,
1996 OUT gctUINT32 * Address
2000 /* Interrupt manager. */
2002 gckHARDWARE_Interrupt(
2003 IN gckHARDWARE Hardware,
2004 IN gctBOOL InterruptValid
2010 IN gckHARDWARE Hardware,
2011 IN gctPOINTER Logical
2014 /* Flush the MMU. */
2016 gckHARDWARE_FlushMMU(
2017 IN gckHARDWARE Hardware
2020 /* Set the page table base address. */
2022 gckHARDWARE_SetMMUv2(
2023 IN gckHARDWARE Hardware,
2025 IN gctPOINTER MtlbAddress,
2026 IN gceMMU_MODE Mode,
2027 IN gctPOINTER SafeAddress,
2028 IN gctBOOL FromPower
2031 /* Get idle register. */
2033 gckHARDWARE_GetIdle(
2034 IN gckHARDWARE Hardware,
2036 OUT gctUINT32 * Data
2039 /* Flush the caches. */
2042 IN gckHARDWARE Hardware,
2043 IN gceKERNEL_FLUSH Flush,
2044 IN gctPOINTER Logical,
2045 IN OUT gctSIZE_T * Bytes
2048 /* Enable/disable fast clear. */
2050 gckHARDWARE_SetFastClear(
2051 IN gckHARDWARE Hardware,
2053 IN gctINT Compression
2057 gckHARDWARE_ReadInterrupt(
2058 IN gckHARDWARE Hardware,
2059 OUT gctUINT32_PTR IDs
2062 /* Power management. */
2064 gckHARDWARE_SetPowerManagementState(
2065 IN gckHARDWARE Hardware,
2066 IN gceCHIPPOWERSTATE State
2070 gckHARDWARE_QueryPowerManagementState(
2071 IN gckHARDWARE Hardware,
2072 OUT gceCHIPPOWERSTATE* State
2076 gckHARDWARE_SetPowerManagement(
2077 IN gckHARDWARE Hardware,
2078 IN gctBOOL PowerManagement
2081 #if gcdENABLE_FSCALE_VAL_ADJUST
2083 gckHARDWARE_SetFscaleValue(
2084 IN gckHARDWARE Hardware,
2085 IN gctUINT32 FscaleValue
2089 gckHARDWARE_GetFscaleValue(
2090 IN gckHARDWARE Hardware,
2091 IN gctUINT * FscaleValue,
2092 IN gctUINT * MinFscaleValue,
2093 IN gctUINT * MaxFscaleValue
2097 #if gcdPOWEROFF_TIMEOUT
2099 gckHARDWARE_SetPowerOffTimeout(
2100 IN gckHARDWARE Hardware,
2101 IN gctUINT32 Timeout
2105 gckHARDWARE_QueryPowerOffTimeout(
2106 IN gckHARDWARE Hardware,
2107 OUT gctUINT32* Timeout
2111 /* Profile 2D Engine. */
2113 gckHARDWARE_ProfileEngine2D(
2114 IN gckHARDWARE Hardware,
2115 OUT gcs2D_PROFILE_PTR Profile
2119 gckHARDWARE_InitializeHardware(
2120 IN gckHARDWARE Hardware
2125 IN gckHARDWARE Hardware
2128 typedef gceSTATUS (*gctISRMANAGERFUNC)(gctPOINTER Context);
2131 gckHARDWARE_SetIsrManager(
2132 IN gckHARDWARE Hardware,
2133 IN gctISRMANAGERFUNC StartIsr,
2134 IN gctISRMANAGERFUNC StopIsr,
2135 IN gctPOINTER Context
2138 /* Start a composition. */
2140 gckHARDWARE_Compose(
2141 IN gckHARDWARE Hardware,
2142 IN gctUINT32 ProcessID,
2143 IN gctPHYS_ADDR Physical,
2144 IN gctPOINTER Logical,
2145 IN gctSIZE_T Offset,
2150 /* Check for Hardware features. */
2152 gckHARDWARE_IsFeatureAvailable(
2153 IN gckHARDWARE Hardware,
2154 IN gceFEATURE Feature
2158 gckHARDWARE_DumpMMUException(
2159 IN gckHARDWARE Hardware
2163 gckHARDWARE_DumpGPUState(
2164 IN gckHARDWARE Hardware
2168 gckHARDWARE_InitDVFS(
2169 IN gckHARDWARE Hardware
2173 gckHARDWARE_QueryLoad(
2174 IN gckHARDWARE Hardware,
2175 OUT gctUINT32 * Load
2179 gckHARDWARE_SetDVFSPeroid(
2180 IN gckHARDWARE Hardware,
2181 IN gctUINT32 Frequency
2185 /******************************************************************************\
2186 ***************************** gckINTERRUPT Object ******************************
2187 \******************************************************************************/
2189 typedef struct _gckINTERRUPT * gckINTERRUPT;
2191 typedef gceSTATUS (* gctINTERRUPT_HANDLER)(
2196 gckINTERRUPT_Construct(
2197 IN gckKERNEL Kernel,
2198 OUT gckINTERRUPT * Interrupt
2202 gckINTERRUPT_Destroy(
2203 IN gckINTERRUPT Interrupt
2207 gckINTERRUPT_SetHandler(
2208 IN gckINTERRUPT Interrupt,
2209 IN OUT gctINT32_PTR Id,
2210 IN gctINTERRUPT_HANDLER Handler
2214 gckINTERRUPT_Notify(
2215 IN gckINTERRUPT Interrupt,
2219 /******************************************************************************\
2220 ******************************** gckEVENT Object *******************************
2221 \******************************************************************************/
2223 typedef struct _gckEVENT * gckEVENT;
2225 /* Construct a new gckEVENT object. */
2228 IN gckKERNEL Kernel,
2229 OUT gckEVENT * Event
2232 /* Destroy an gckEVENT object. */
2238 /* Reserve the next available hardware event. */
2243 OUT gctUINT8 * EventID,
2244 IN gceKERNEL_WHERE Source
2247 /* Add a new event to the list of events. */
2251 IN gcsHAL_INTERFACE_PTR Interface,
2252 IN gceKERNEL_WHERE FromWhere,
2253 IN gctBOOL AllocateAllowed,
2254 IN gctBOOL FromKernel
2257 /* Schedule a FreeNonPagedMemory event. */
2259 gckEVENT_FreeNonPagedMemory(
2262 IN gctPHYS_ADDR Physical,
2263 IN gctPOINTER Logical,
2264 IN gceKERNEL_WHERE FromWhere
2267 /* Schedule a FreeContiguousMemory event. */
2269 gckEVENT_FreeContiguousMemory(
2272 IN gctPHYS_ADDR Physical,
2273 IN gctPOINTER Logical,
2274 IN gceKERNEL_WHERE FromWhere
2277 /* Schedule a FreeVideoMemory event. */
2279 gckEVENT_FreeVideoMemory(
2281 IN gcuVIDMEM_NODE_PTR VideoMemory,
2282 IN gceKERNEL_WHERE FromWhere
2285 /* Schedule a signal event. */
2289 IN gctSIGNAL Signal,
2290 IN gceKERNEL_WHERE FromWhere
2293 /* Schedule an Unlock event. */
2297 IN gceKERNEL_WHERE FromWhere,
2298 IN gcuVIDMEM_NODE_PTR Node,
2299 IN gceSURF_TYPE Type
2303 gckEVENT_CommitDone(
2305 IN gceKERNEL_WHERE FromWhere
2308 #if gcdVIRTUAL_COMMAND_BUFFER
2309 /* Schedule a FreeVirtualCommandBuffer event. */
2311 gckEVENT_DestroyVirtualCommandBuffer(
2314 IN gctPHYS_ADDR Physical,
2315 IN gctPOINTER Logical,
2316 IN gceKERNEL_WHERE FromWhere
2324 IN gctBOOL FromPower
2327 /* Commit an event queue. */
2331 IN gcsQUEUE_PTR Queue
2334 /* Schedule a composition event. */
2338 IN gcsHAL_COMPOSE_PTR Info
2341 /* Event callback routine. */
2348 /* Event callback routine. */
2359 /******************************************************************************\
2360 ******************************* gckCOMMAND Object ******************************
2361 \******************************************************************************/
2363 typedef struct _gckCOMMAND * gckCOMMAND;
2365 /* Construct a new gckCOMMAND object. */
2367 gckCOMMAND_Construct(
2368 IN gckKERNEL Kernel,
2369 OUT gckCOMMAND * Command
2372 /* Destroy an gckCOMMAND object. */
2375 IN gckCOMMAND Command
2378 /* Acquire command queue synchronization objects. */
2380 gckCOMMAND_EnterCommit(
2381 IN gckCOMMAND Command,
2382 IN gctBOOL FromPower
2385 /* Release command queue synchronization objects. */
2387 gckCOMMAND_ExitCommit(
2388 IN gckCOMMAND Command,
2389 IN gctBOOL FromPower
2392 /* Start the command queue. */
2395 IN gckCOMMAND Command
2398 /* Stop the command queue. */
2401 IN gckCOMMAND Command,
2402 IN gctBOOL FromRecovery
2405 /* Commit a buffer to the command queue. */
2408 IN gckCOMMAND Command,
2409 IN gckCONTEXT Context,
2410 IN gcoCMDBUF CommandBuffer,
2411 IN gcsSTATE_DELTA_PTR StateDelta,
2412 IN gcsQUEUE_PTR EventQueue,
2413 IN gctUINT32 ProcessID
2416 /* Reserve space in the command buffer. */
2419 IN gckCOMMAND Command,
2420 IN gctSIZE_T RequestedBytes,
2421 OUT gctPOINTER * Buffer,
2422 OUT gctSIZE_T * BufferSize
2425 /* Execute reserved space in the command buffer. */
2428 IN gckCOMMAND Command,
2429 IN gctSIZE_T RequstedBytes
2432 /* Stall the command queue. */
2435 IN gckCOMMAND Command,
2436 IN gctBOOL FromPower
2439 /* Attach user process. */
2442 IN gckCOMMAND Command,
2443 OUT gckCONTEXT * Context,
2444 OUT gctSIZE_T * StateCount,
2445 IN gctUINT32 ProcessID
2448 /* Detach user process. */
2451 IN gckCOMMAND Command,
2452 IN gckCONTEXT Context
2455 #if gcdVIRTUAL_COMMAND_BUFFER
2457 gckCOMMAND_DumpExecutingBuffer(
2458 IN gckCOMMAND Command
2462 /******************************************************************************\
2463 ********************************* gckMMU Object ********************************
2464 \******************************************************************************/
2466 typedef struct _gckMMU * gckMMU;
2468 /* Construct a new gckMMU object. */
2471 IN gckKERNEL Kernel,
2472 IN gctSIZE_T MmuSize,
2476 /* Destroy an gckMMU object. */
2482 /* Enable the MMU. */
2486 IN gctUINT32 PhysBaseAddr,
2487 IN gctUINT32 PhysSize
2490 /* Allocate pages inside the MMU. */
2492 gckMMU_AllocatePages(
2494 IN gctSIZE_T PageCount,
2495 OUT gctPOINTER * PageTable,
2496 OUT gctUINT32 * Address
2499 /* Remove a page table from the MMU. */
2503 IN gctPOINTER PageTable,
2504 IN gctSIZE_T PageCount
2507 /* Set the MMU page with info. */
2511 IN gctUINT32 PageAddress,
2512 IN gctUINT32 *PageEntry
2519 IN gcuVIDMEM_NODE_PTR Node);
2524 IN gcuVIDMEM_NODE_PTR Node);
2529 gckMMU_FreeHandleMemory(
2530 IN gckKERNEL Kernel,
2542 gckMMU_DumpPageTableEntry(
2544 IN gctUINT32 Address
2548 #if VIVANTE_PROFILER
2550 gckHARDWARE_QueryProfileRegisters(
2551 IN gckHARDWARE Hardware,
2553 OUT gcsPROFILER_COUNTERS * Counters
2558 gckOS_SignalQueryHardware(
2560 IN gctSIGNAL Signal,
2561 OUT gckHARDWARE * Hardware
2565 gckOS_SignalSetHardware(
2567 IN gctSIGNAL Signal,
2568 gckHARDWARE Hardware
2576 #include "gc_hal_vg.h"
2579 #endif /* __gc_hal_h_ */