mirror of
https://github.com/revyos/thead-kernel.git
synced 2026-07-19 06:45:54 +02:00
2229 lines
46 KiB
C
2229 lines
46 KiB
C
/****************************************************************************
|
|
*
|
|
* The MIT License (MIT)
|
|
*
|
|
* Copyright (c) 2014 - 2021 Vivante Corporation
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
* copy of this software and associated documentation files (the "Software"),
|
|
* to deal in the Software without restriction, including without limitation
|
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
* and/or sell copies of the Software, and to permit persons to whom the
|
|
* Software is furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
* DEALINGS IN THE SOFTWARE.
|
|
*
|
|
*****************************************************************************
|
|
*
|
|
* The GPL License (GPL)
|
|
*
|
|
* Copyright (C) 2014 - 2021 Vivante Corporation
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
*****************************************************************************
|
|
*
|
|
* Note: This software is released under dual MIT and GPL licenses. A
|
|
* recipient may use this file under the terms of either the MIT license or
|
|
* GPL License. If you wish to use only one license not the other, you can
|
|
* indicate your decision by deleting one of the above license notices in your
|
|
* version of this file.
|
|
*
|
|
*****************************************************************************/
|
|
|
|
|
|
#ifndef __gc_hal_h_
|
|
#define __gc_hal_h_
|
|
|
|
#include "gc_hal_types.h"
|
|
#include "gc_hal_enum.h"
|
|
#include "gc_hal_base.h"
|
|
#include "gc_hal_profiler.h"
|
|
#include "gc_hal_driver.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/******************************************************************************\
|
|
******************************* Alignment Macros *******************************
|
|
\******************************************************************************/
|
|
|
|
/* Alignment with a non-power of two value. */
|
|
#define gcmALIGN_NP2(n, align) (((n) + (align) - 1) - (((n) + (align) - 1) % (align)))
|
|
|
|
#define gcmALIGN_NP2_SAFE(n, align) \
|
|
(\
|
|
(gcmALIGN_NP2((n) & ~0ULL, (align) & ~0ULL) ^ gcmALIGN_NP2(n, align)) ? \
|
|
(n) : gcmALIGN_NP2(n, align) \
|
|
)
|
|
|
|
/* Alignment with a power of two value. */
|
|
#define gcmALIGN(n, align) (((n) + ((align) - 1)) & ~((align) - 1))
|
|
|
|
#define gcmALIGN_SAFE(n, align) \
|
|
(\
|
|
(gcmALIGN((n) & ~0ULL, (align) & ~0ULL) ^ gcmALIGN(n, align)) ? \
|
|
(n) : gcmALIGN(n, align) \
|
|
)
|
|
|
|
#define gcmALIGN_CHECK_OVERFLOW(n, align) \
|
|
(\
|
|
(gcmALIGN((n) & ~0ULL, (align) & ~0ULL) ^ gcmALIGN(n, align)) ? \
|
|
gcvSTATUS_RESLUT_OVERFLOW : gcvSTATUS_OK \
|
|
)
|
|
|
|
#define gcmALIGN_BASE(n, align) \
|
|
(\
|
|
((n) & ~((align) - 1)) \
|
|
)
|
|
|
|
/******************************************************************************\
|
|
***************************** Element Count Macro *****************************
|
|
\******************************************************************************/
|
|
|
|
#define gcmSIZEOF(a) \
|
|
(\
|
|
(gctSIZE_T) (sizeof(a)) \
|
|
)
|
|
|
|
#define gcmCOUNTOF(a) \
|
|
(\
|
|
sizeof(a) / sizeof(a[0]) \
|
|
)
|
|
|
|
/******************************************************************************\
|
|
********************************* Cast Macro **********************************
|
|
\******************************************************************************/
|
|
#define gcmNAME_TO_PTR(na) \
|
|
gckKERNEL_QueryPointerFromName(kernel, gcmALL_TO_UINT32(na))
|
|
|
|
#define gcmPTR_TO_NAME(ptr) \
|
|
gckKERNEL_AllocateNameFromPointer(kernel, ptr)
|
|
|
|
#define gcmRELEASE_NAME(na) \
|
|
gckKERNEL_DeleteName(kernel, gcmALL_TO_UINT32(na))
|
|
|
|
#define gcmALL_TO_UINT32(t) \
|
|
(\
|
|
(gctUINT32) (gctUINTPTR_T) (t)\
|
|
)
|
|
|
|
#define gcmPTR_TO_UINT64(p) \
|
|
(\
|
|
(gctUINT64) (gctUINTPTR_T) (p)\
|
|
)
|
|
|
|
#define gcmUINT64_TO_PTR(u) \
|
|
(\
|
|
(gctPOINTER) (gctUINTPTR_T) (u)\
|
|
)
|
|
|
|
#define gcmUINT64_TO_TYPE(u, t) \
|
|
(\
|
|
(t) (gctUINTPTR_T) (u)\
|
|
)
|
|
|
|
/******************************************************************************\
|
|
******************************** Useful Macro *********************************
|
|
\******************************************************************************/
|
|
|
|
#define gcvINVALID_ADDRESS ~0U
|
|
#define gcvINVALID_VALUE 0xCCCCCCCC
|
|
|
|
#define gcvINVALID_PHYSICAL_ADDRESS ~0ULL
|
|
|
|
#define gcmGET_PRE_ROTATION(rotate) \
|
|
((rotate) & (~(gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y)))
|
|
|
|
#define gcmGET_POST_ROTATION(rotate) \
|
|
((rotate) & (gcvSURF_POST_FLIP_X | gcvSURF_POST_FLIP_Y))
|
|
|
|
typedef struct _gckHARDWARE * gckHARDWARE;
|
|
|
|
#define gcdMAX_GPU_COUNT gcvCORE_COUNT
|
|
|
|
#define gcdMAX_SURF_LAYERS 4
|
|
|
|
#define gcdMAX_DRAW_BUFFERS 16
|
|
|
|
#define gcdMAX_3DGPU_COUNT 8
|
|
|
|
#define gcdMAX_VERTEX_STREAM_COUNT 4
|
|
/*******************************************************************************
|
|
**
|
|
** gcmVERIFY_OBJECT
|
|
**
|
|
** Assert if an object is invalid or is not of the specified type. If the
|
|
** object is invalid or not of the specified type, gcvSTATUS_INVALID_OBJECT
|
|
** will be returned from the current function. In retail mode this macro
|
|
** does nothing.
|
|
**
|
|
** ARGUMENTS:
|
|
**
|
|
** obj Object to test.
|
|
** t Expected type of the object.
|
|
*/
|
|
#if gcmIS_DEBUG(gcdDEBUG_TRACE)
|
|
#define _gcmVERIFY_OBJECT(prefix, obj, t) \
|
|
if ((obj) == gcvNULL) \
|
|
{ \
|
|
prefix##TRACE(gcvLEVEL_ERROR, \
|
|
#prefix "VERIFY_OBJECT failed: NULL"); \
|
|
prefix##TRACE(gcvLEVEL_ERROR, " expected: %c%c%c%c", \
|
|
gcmCC_PRINT(t)); \
|
|
prefix##ASSERT((obj) != gcvNULL); \
|
|
prefix##FOOTER_ARG("status=%d", gcvSTATUS_INVALID_OBJECT); \
|
|
return gcvSTATUS_INVALID_OBJECT; \
|
|
} \
|
|
else if (((gcsOBJECT*) (obj))->type != t) \
|
|
{ \
|
|
prefix##TRACE(gcvLEVEL_ERROR, \
|
|
#prefix "VERIFY_OBJECT failed: %c%c%c%c", \
|
|
gcmCC_PRINT(((gcsOBJECT*) (obj))->type)); \
|
|
prefix##TRACE(gcvLEVEL_ERROR, " expected: %c%c%c%c", \
|
|
gcmCC_PRINT(t)); \
|
|
prefix##ASSERT(((gcsOBJECT*)(obj))->type == t); \
|
|
prefix##FOOTER_ARG("status=%d", gcvSTATUS_INVALID_OBJECT); \
|
|
return gcvSTATUS_INVALID_OBJECT; \
|
|
}
|
|
|
|
# define gcmVERIFY_OBJECT(obj, t) _gcmVERIFY_OBJECT(gcm, obj, t)
|
|
# define gcmkVERIFY_OBJECT(obj, t) _gcmVERIFY_OBJECT(gcmk, obj, t)
|
|
#else
|
|
# define gcmVERIFY_OBJECT(obj, t) do {} while (gcvFALSE)
|
|
# define gcmkVERIFY_OBJECT(obj, t) do {} while (gcvFALSE)
|
|
#endif
|
|
|
|
/******************************************************************************/
|
|
/*VERIFY_OBJECT if special return expected*/
|
|
/******************************************************************************/
|
|
#ifndef EGL_API_ANDROID
|
|
# define _gcmVERIFY_OBJECT_RETURN(prefix, obj, t, retVal) \
|
|
do \
|
|
{ \
|
|
if ((obj) == gcvNULL) \
|
|
{ \
|
|
prefix##PRINT_VERSION(); \
|
|
prefix##TRACE(gcvLEVEL_ERROR, \
|
|
#prefix "VERIFY_OBJECT_RETURN failed: NULL"); \
|
|
prefix##TRACE(gcvLEVEL_ERROR, " expected: %c%c%c%c", \
|
|
gcmCC_PRINT(t)); \
|
|
prefix##ASSERT((obj) != gcvNULL); \
|
|
prefix##FOOTER_ARG("retVal=%d", retVal); \
|
|
return retVal; \
|
|
} \
|
|
else if (((gcsOBJECT*) (obj))->type != t) \
|
|
{ \
|
|
prefix##PRINT_VERSION(); \
|
|
prefix##TRACE(gcvLEVEL_ERROR, \
|
|
#prefix "VERIFY_OBJECT_RETURN failed: %c%c%c%c", \
|
|
gcmCC_PRINT(((gcsOBJECT*) (obj))->type)); \
|
|
prefix##TRACE(gcvLEVEL_ERROR, " expected: %c%c%c%c", \
|
|
gcmCC_PRINT(t)); \
|
|
prefix##ASSERT(((gcsOBJECT*)(obj))->type == t); \
|
|
prefix##FOOTER_ARG("retVal=%d", retVal); \
|
|
return retVal; \
|
|
} \
|
|
} \
|
|
while (gcvFALSE)
|
|
# define gcmVERIFY_OBJECT_RETURN(obj, t, retVal) \
|
|
_gcmVERIFY_OBJECT_RETURN(gcm, obj, t, retVal)
|
|
# define gcmkVERIFY_OBJECT_RETURN(obj, t, retVal) \
|
|
_gcmVERIFY_OBJECT_RETURN(gcmk, obj, t, retVal)
|
|
#else
|
|
# define gcmVERIFY_OBJECT_RETURN(obj, t) do {} while (gcvFALSE)
|
|
# define gcmVERIFY_OBJECT_RETURN(obj, t) do {} while (gcvFALSE)
|
|
#endif
|
|
|
|
/******************************************************************************\
|
|
********************************** gckOS Object *********************************
|
|
\******************************************************************************/
|
|
|
|
/* Construct a new gckOS object. */
|
|
gceSTATUS
|
|
gckOS_Construct(
|
|
IN gctPOINTER Context,
|
|
OUT gckOS * Os
|
|
);
|
|
|
|
/* Destroy an gckOS object. */
|
|
gceSTATUS
|
|
gckOS_Destroy(
|
|
IN gckOS Os
|
|
);
|
|
|
|
/* Query the video memory. */
|
|
gceSTATUS
|
|
gckOS_QueryVideoMemory(
|
|
IN gckOS Os,
|
|
OUT gctPHYS_ADDR * InternalAddress,
|
|
OUT gctSIZE_T * InternalSize,
|
|
OUT gctPHYS_ADDR * ExternalAddress,
|
|
OUT gctSIZE_T * ExternalSize,
|
|
OUT gctPHYS_ADDR * ContiguousAddress,
|
|
OUT gctSIZE_T * ContiguousSize
|
|
);
|
|
|
|
/* Allocate memory from the heap. */
|
|
gceSTATUS
|
|
gckOS_Allocate(
|
|
IN gckOS Os,
|
|
IN gctSIZE_T Bytes,
|
|
OUT gctPOINTER * Memory
|
|
);
|
|
|
|
/* Free allocated memory. */
|
|
gceSTATUS
|
|
gckOS_Free(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Memory
|
|
);
|
|
|
|
/* Wrapper for allocation memory.. */
|
|
gceSTATUS
|
|
gckOS_AllocateMemory(
|
|
IN gckOS Os,
|
|
IN gctSIZE_T Bytes,
|
|
OUT gctPOINTER * Memory
|
|
);
|
|
|
|
/* Wrapper for freeing memory. */
|
|
gceSTATUS
|
|
gckOS_FreeMemory(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Memory
|
|
);
|
|
|
|
/* Allocate paged memory. */
|
|
gceSTATUS
|
|
gckOS_AllocatePagedMemory(
|
|
IN gckOS Os,
|
|
IN gctUINT32 Flag,
|
|
IN OUT gctSIZE_T * Bytes,
|
|
OUT gctUINT32 * Gid,
|
|
OUT gctPHYS_ADDR * Physical
|
|
);
|
|
|
|
/* Lock pages. */
|
|
gceSTATUS
|
|
gckOS_LockPages(
|
|
IN gckOS Os,
|
|
IN gctPHYS_ADDR Physical,
|
|
IN gctSIZE_T Bytes,
|
|
IN gctBOOL Cacheable,
|
|
OUT gctPOINTER * Logical
|
|
);
|
|
|
|
/* Map pages. */
|
|
gceSTATUS
|
|
gckOS_MapPagesEx(
|
|
IN gckOS Os,
|
|
IN gceCORE Core,
|
|
IN gctPHYS_ADDR Physical,
|
|
IN gctSIZE_T PageCount,
|
|
IN gctUINT32 Address,
|
|
IN gctPOINTER PageTable,
|
|
IN gctBOOL Writable,
|
|
IN gceVIDMEM_TYPE Type
|
|
);
|
|
|
|
/* Map 1M pages. */
|
|
gceSTATUS
|
|
gckOS_Map1MPages(
|
|
IN gckOS Os,
|
|
IN gceCORE Core,
|
|
IN gctPHYS_ADDR Physical,
|
|
IN gctSIZE_T PageCount,
|
|
IN gctUINT32 Address,
|
|
IN gctPOINTER PageTable,
|
|
IN gctBOOL Writable,
|
|
IN gceVIDMEM_TYPE Type
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_UnmapPages(
|
|
IN gckOS Os,
|
|
IN gctSIZE_T PageCount,
|
|
IN gctUINT32 Address
|
|
);
|
|
|
|
/* Unlock pages. */
|
|
gceSTATUS
|
|
gckOS_UnlockPages(
|
|
IN gckOS Os,
|
|
IN gctPHYS_ADDR Physical,
|
|
IN gctSIZE_T Bytes,
|
|
IN gctPOINTER Logical
|
|
);
|
|
|
|
/* Free paged memory. */
|
|
gceSTATUS
|
|
gckOS_FreePagedMemory(
|
|
IN gckOS Os,
|
|
IN gctPHYS_ADDR Physical,
|
|
IN gctSIZE_T Bytes
|
|
);
|
|
|
|
/* Allocate non-paged memory. */
|
|
gceSTATUS
|
|
gckOS_AllocateNonPagedMemory(
|
|
IN gckOS Os,
|
|
IN gctBOOL InUserSpace,
|
|
IN gctUINT32 Flag,
|
|
IN OUT gctSIZE_T * Bytes,
|
|
OUT gctPHYS_ADDR * Physical,
|
|
OUT gctPOINTER * Logical
|
|
);
|
|
|
|
/* Free non-paged memory. */
|
|
gceSTATUS
|
|
gckOS_FreeNonPagedMemory(
|
|
IN gckOS Os,
|
|
IN gctPHYS_ADDR Physical,
|
|
IN gctPOINTER Logical,
|
|
IN gctSIZE_T Bytes
|
|
);
|
|
|
|
/* Reserved memory. */
|
|
gceSTATUS
|
|
gckOS_RequestReservedMemory(
|
|
gckOS Os,
|
|
gctPHYS_ADDR_T Start,
|
|
gctSIZE_T Size,
|
|
const char * Name,
|
|
gctBOOL Requested,
|
|
gctBOOL CpuAccessible,
|
|
gctPOINTER * MemoryHandle
|
|
);
|
|
|
|
void
|
|
gckOS_ReleaseReservedMemory(
|
|
gckOS Os,
|
|
gctPOINTER MemoryHandle
|
|
);
|
|
|
|
/* Reserved memory sub area */
|
|
gceSTATUS
|
|
gckOS_RequestReservedMemoryArea(
|
|
IN gctPOINTER MemoryHandle,
|
|
IN gctSIZE_T Offset,
|
|
IN gctSIZE_T Size,
|
|
OUT gctPOINTER * MemoryAreaHandle
|
|
);
|
|
|
|
void
|
|
gckOS_ReleaseReservedMemoryArea(
|
|
gctPOINTER MemoryAreaHandle
|
|
);
|
|
|
|
/* Get the number fo bytes per page. */
|
|
gceSTATUS
|
|
gckOS_GetPageSize(
|
|
IN gckOS Os,
|
|
OUT gctSIZE_T * PageSize
|
|
);
|
|
|
|
/* Get the physical address of a corresponding logical address. */
|
|
gceSTATUS
|
|
gckOS_GetPhysicalAddress(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Logical,
|
|
OUT gctPHYS_ADDR_T * Address
|
|
);
|
|
|
|
/* Get real physical address from handle. */
|
|
gceSTATUS
|
|
gckOS_GetPhysicalFromHandle(
|
|
IN gckOS Os,
|
|
IN gctPHYS_ADDR Physical,
|
|
IN gctUINT32 Offset,
|
|
OUT gctPHYS_ADDR_T * PhysicalAddress
|
|
);
|
|
|
|
/* Get the physical address of a corresponding user logical address. */
|
|
gceSTATUS
|
|
gckOS_UserLogicalToPhysical(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Logical,
|
|
OUT gctPHYS_ADDR_T * Address
|
|
);
|
|
|
|
/* Map physical memory. */
|
|
gceSTATUS
|
|
gckOS_MapPhysical(
|
|
IN gckOS Os,
|
|
IN gctPHYS_ADDR_T Physical,
|
|
IN gctSIZE_T Bytes,
|
|
OUT gctPOINTER * Logical
|
|
);
|
|
|
|
/* Unmap previously mapped physical memory. */
|
|
gceSTATUS
|
|
gckOS_UnmapPhysical(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Logical,
|
|
IN gctSIZE_T Bytes
|
|
);
|
|
|
|
/* Read data from a hardware register. */
|
|
gceSTATUS
|
|
gckOS_ReadRegister(
|
|
IN gckOS Os,
|
|
IN gctUINT32 Address,
|
|
OUT gctUINT32 * Data
|
|
);
|
|
|
|
/* Read data from a hardware register. */
|
|
gceSTATUS
|
|
gckOS_ReadRegisterEx(
|
|
IN gckOS Os,
|
|
IN gceCORE Core,
|
|
IN gctUINT32 Address,
|
|
OUT gctUINT32 * Data
|
|
);
|
|
|
|
/* Write data to a hardware register. */
|
|
gceSTATUS
|
|
gckOS_WriteRegister(
|
|
IN gckOS Os,
|
|
IN gctUINT32 Address,
|
|
IN gctUINT32 Data
|
|
);
|
|
|
|
/* Write data to a hardware register. */
|
|
gceSTATUS
|
|
gckOS_WriteRegisterEx(
|
|
IN gckOS Os,
|
|
IN gceCORE Core,
|
|
IN gctUINT32 Address,
|
|
IN gctUINT32 Data
|
|
);
|
|
|
|
/* Write data to a hardware register without dump. */
|
|
gceSTATUS
|
|
gckOS_WriteRegisterEx_NoDump(
|
|
IN gckOS Os,
|
|
IN gceCORE Core,
|
|
IN gctUINT32 Address,
|
|
IN gctUINT32 Data
|
|
);
|
|
|
|
#ifdef __QNXNTO__
|
|
static gcmINLINE gceSTATUS
|
|
gckOS_WriteMemory(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Address,
|
|
IN gctUINT32 Data
|
|
)
|
|
{
|
|
/* Write memory. */
|
|
*(gctUINT32 *)Address = Data;
|
|
return gcvSTATUS_OK;
|
|
}
|
|
|
|
#else
|
|
/* Write data to a 32-bit memory location. */
|
|
gceSTATUS
|
|
gckOS_WriteMemory(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Address,
|
|
IN gctUINT32 Data
|
|
);
|
|
#endif
|
|
|
|
/* Map physical memory into the process space. */
|
|
gceSTATUS
|
|
gckOS_MapMemory(
|
|
IN gckOS Os,
|
|
IN gctPHYS_ADDR Physical,
|
|
IN gctSIZE_T Bytes,
|
|
OUT gctPOINTER * Logical
|
|
);
|
|
|
|
/* Unmap physical memory from the specified process space. */
|
|
gceSTATUS
|
|
gckOS_UnmapMemoryEx(
|
|
IN gckOS Os,
|
|
IN gctPHYS_ADDR Physical,
|
|
IN gctSIZE_T Bytes,
|
|
IN gctPOINTER Logical,
|
|
IN gctUINT32 PID
|
|
);
|
|
|
|
/* Unmap physical memory from the process space. */
|
|
gceSTATUS
|
|
gckOS_UnmapMemory(
|
|
IN gckOS Os,
|
|
IN gctPHYS_ADDR Physical,
|
|
IN gctSIZE_T Bytes,
|
|
IN gctPOINTER Logical
|
|
);
|
|
|
|
/* Delete a mutex. */
|
|
gceSTATUS
|
|
gckOS_DeleteMutex(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Mutex
|
|
);
|
|
|
|
/* Acquire a mutex. */
|
|
gceSTATUS
|
|
gckOS_AcquireMutex(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Mutex,
|
|
IN gctUINT32 Timeout
|
|
);
|
|
|
|
/* Release a mutex. */
|
|
gceSTATUS
|
|
gckOS_ReleaseMutex(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Mutex
|
|
);
|
|
|
|
/* Atomically exchange a pair of 32-bit values. */
|
|
gceSTATUS
|
|
gckOS_AtomicExchange(
|
|
IN gckOS Os,
|
|
IN OUT gctUINT32_PTR Target,
|
|
IN gctUINT32 NewValue,
|
|
OUT gctUINT32_PTR OldValue
|
|
);
|
|
|
|
/* Atomically exchange a pair of pointers. */
|
|
gceSTATUS
|
|
gckOS_AtomicExchangePtr(
|
|
IN gckOS Os,
|
|
IN OUT gctPOINTER * Target,
|
|
IN gctPOINTER NewValue,
|
|
OUT gctPOINTER * OldValue
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_AtomSetMask(
|
|
IN gctPOINTER Atom,
|
|
IN gctUINT32 Mask
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_AtomClearMask(
|
|
IN gctPOINTER Atom,
|
|
IN gctUINT32 Mask
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_DumpCallStack(
|
|
IN gckOS Os
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_GetProcessNameByPid(
|
|
IN gctINT Pid,
|
|
IN gctSIZE_T Length,
|
|
OUT gctUINT8_PTR String
|
|
);
|
|
|
|
/*******************************************************************************
|
|
**
|
|
** gckOS_AtomConstruct
|
|
**
|
|
** Create an atom.
|
|
**
|
|
** INPUT:
|
|
**
|
|
** gckOS Os
|
|
** Pointer to a gckOS object.
|
|
**
|
|
** OUTPUT:
|
|
**
|
|
** gctPOINTER * Atom
|
|
** Pointer to a variable receiving the constructed atom.
|
|
*/
|
|
gceSTATUS
|
|
gckOS_AtomConstruct(
|
|
IN gckOS Os,
|
|
OUT gctPOINTER * Atom
|
|
);
|
|
|
|
/*******************************************************************************
|
|
**
|
|
** gckOS_AtomDestroy
|
|
**
|
|
** Destroy an atom.
|
|
**
|
|
** INPUT:
|
|
**
|
|
** gckOS Os
|
|
** Pointer to a gckOS object.
|
|
**
|
|
** gctPOINTER Atom
|
|
** Pointer to the atom to destroy.
|
|
**
|
|
** OUTPUT:
|
|
**
|
|
** Nothing.
|
|
*/
|
|
gceSTATUS
|
|
gckOS_AtomDestroy(
|
|
IN gckOS Os,
|
|
OUT gctPOINTER Atom
|
|
);
|
|
|
|
/*******************************************************************************
|
|
**
|
|
** gckOS_AtomGet
|
|
**
|
|
** Get the 32-bit value protected by an atom.
|
|
**
|
|
** INPUT:
|
|
**
|
|
** gckOS Os
|
|
** Pointer to a gckOS object.
|
|
**
|
|
** gctPOINTER Atom
|
|
** Pointer to the atom.
|
|
**
|
|
** OUTPUT:
|
|
**
|
|
** gctINT32_PTR Value
|
|
** Pointer to a variable the receives the value of the atom.
|
|
*/
|
|
gceSTATUS
|
|
gckOS_AtomGet(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Atom,
|
|
OUT gctINT32_PTR Value
|
|
);
|
|
|
|
/*******************************************************************************
|
|
**
|
|
** gckOS_AtomSet
|
|
**
|
|
** Set the 32-bit value protected by an atom.
|
|
**
|
|
** INPUT:
|
|
**
|
|
** gckOS Os
|
|
** Pointer to a gckOS object.
|
|
**
|
|
** gctPOINTER Atom
|
|
** Pointer to the atom.
|
|
**
|
|
** gctINT32 Value
|
|
** The value of the atom.
|
|
**
|
|
** OUTPUT:
|
|
**
|
|
** Nothing.
|
|
*/
|
|
gceSTATUS
|
|
gckOS_AtomSet(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Atom,
|
|
IN gctINT32 Value
|
|
);
|
|
|
|
/*******************************************************************************
|
|
**
|
|
** gckOS_AtomIncrement
|
|
**
|
|
** Atomically increment the 32-bit integer value inside an atom.
|
|
**
|
|
** INPUT:
|
|
**
|
|
** gckOS Os
|
|
** Pointer to a gckOS object.
|
|
**
|
|
** gctPOINTER Atom
|
|
** Pointer to the atom.
|
|
**
|
|
** OUTPUT:
|
|
**
|
|
** gctINT32_PTR Value
|
|
** Pointer to a variable the receives the original value of the atom.
|
|
*/
|
|
gceSTATUS
|
|
gckOS_AtomIncrement(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Atom,
|
|
OUT gctINT32_PTR Value
|
|
);
|
|
|
|
/*******************************************************************************
|
|
**
|
|
** gckOS_AtomDecrement
|
|
**
|
|
** Atomically decrement the 32-bit integer value inside an atom.
|
|
**
|
|
** INPUT:
|
|
**
|
|
** gckOS Os
|
|
** Pointer to a gckOS object.
|
|
**
|
|
** gctPOINTER Atom
|
|
** Pointer to the atom.
|
|
**
|
|
** OUTPUT:
|
|
**
|
|
** gctINT32_PTR Value
|
|
** Pointer to a variable the receives the original value of the atom.
|
|
*/
|
|
gceSTATUS
|
|
gckOS_AtomDecrement(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Atom,
|
|
OUT gctINT32_PTR Value
|
|
);
|
|
|
|
/* Delay a number of milliseconds. */
|
|
gceSTATUS
|
|
gckOS_Delay(
|
|
IN gckOS Os,
|
|
IN gctUINT32 Delay
|
|
);
|
|
|
|
/* Delay a number of milliseconds. */
|
|
gceSTATUS
|
|
gckOS_Udelay(
|
|
IN gckOS Os,
|
|
IN gctUINT32 Delay
|
|
);
|
|
|
|
/* Get time in milliseconds. */
|
|
gceSTATUS
|
|
gckOS_GetTicks(
|
|
OUT gctUINT32_PTR Time
|
|
);
|
|
|
|
/* Compare time value. */
|
|
gceSTATUS
|
|
gckOS_TicksAfter(
|
|
IN gctUINT32 Time1,
|
|
IN gctUINT32 Time2,
|
|
OUT gctBOOL_PTR IsAfter
|
|
);
|
|
|
|
/* Get time in microseconds. */
|
|
gceSTATUS
|
|
gckOS_GetTime(
|
|
OUT gctUINT64_PTR Time
|
|
);
|
|
|
|
/* Memory barrier. */
|
|
gceSTATUS
|
|
gckOS_MemoryBarrier(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Address
|
|
);
|
|
|
|
/* Map user pointer. */
|
|
gceSTATUS
|
|
gckOS_MapUserPointer(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Pointer,
|
|
IN gctSIZE_T Size,
|
|
OUT gctPOINTER * KernelPointer
|
|
);
|
|
|
|
/* Unmap user pointer. */
|
|
gceSTATUS
|
|
gckOS_UnmapUserPointer(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Pointer,
|
|
IN gctSIZE_T Size,
|
|
IN gctPOINTER KernelPointer
|
|
);
|
|
|
|
/*******************************************************************************
|
|
**
|
|
** gckOS_QueryNeedCopy
|
|
**
|
|
** Query whether the memory can be accessed or mapped directly or it has to be
|
|
** copied.
|
|
**
|
|
** INPUT:
|
|
**
|
|
** gckOS Os
|
|
** Pointer to an gckOS object.
|
|
**
|
|
** gctUINT32 ProcessID
|
|
** Process ID of the current process.
|
|
**
|
|
** OUTPUT:
|
|
**
|
|
** gctBOOL_PTR NeedCopy
|
|
** Pointer to a boolean receiving gcvTRUE if the memory needs a copy or
|
|
** gcvFALSE if the memory can be accessed or mapped dircetly.
|
|
*/
|
|
gceSTATUS
|
|
gckOS_QueryNeedCopy(
|
|
IN gckOS Os,
|
|
IN gctUINT32 ProcessID,
|
|
OUT gctBOOL_PTR NeedCopy
|
|
);
|
|
|
|
/*******************************************************************************
|
|
**
|
|
** gckOS_CopyFromUserData
|
|
**
|
|
** Copy data from user to kernel memory.
|
|
**
|
|
** INPUT:
|
|
**
|
|
** gckOS Os
|
|
** Pointer to an gckOS object.
|
|
**
|
|
** gctPOINTER KernelPointer
|
|
** Pointer to kernel memory.
|
|
**
|
|
** gctPOINTER Pointer
|
|
** Pointer to user memory.
|
|
**
|
|
** gctSIZE_T Size
|
|
** Number of bytes to copy.
|
|
**
|
|
** OUTPUT:
|
|
**
|
|
** Nothing.
|
|
*/
|
|
gceSTATUS
|
|
gckOS_CopyFromUserData(
|
|
IN gckOS Os,
|
|
IN gctPOINTER KernelPointer,
|
|
IN gctPOINTER Pointer,
|
|
IN gctSIZE_T Size
|
|
);
|
|
|
|
/*******************************************************************************
|
|
**
|
|
** gckOS_CopyToUserData
|
|
**
|
|
** Copy data from kernel to user memory.
|
|
**
|
|
** INPUT:
|
|
**
|
|
** gckOS Os
|
|
** Pointer to an gckOS object.
|
|
**
|
|
** gctPOINTER KernelPointer
|
|
** Pointer to kernel memory.
|
|
**
|
|
** gctPOINTER Pointer
|
|
** Pointer to user memory.
|
|
**
|
|
** gctSIZE_T Size
|
|
** Number of bytes to copy.
|
|
**
|
|
** OUTPUT:
|
|
**
|
|
** Nothing.
|
|
*/
|
|
gceSTATUS
|
|
gckOS_CopyToUserData(
|
|
IN gckOS Os,
|
|
IN gctPOINTER KernelPointer,
|
|
IN gctPOINTER Pointer,
|
|
IN gctSIZE_T Size
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_SuspendInterrupt(
|
|
IN gckOS Os
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_SuspendInterruptEx(
|
|
IN gckOS Os,
|
|
IN gceCORE Core
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_ResumeInterrupt(
|
|
IN gckOS Os
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_ResumeInterruptEx(
|
|
IN gckOS Os,
|
|
IN gceCORE Core
|
|
);
|
|
|
|
/* Get the base address for the physical memory. */
|
|
gceSTATUS
|
|
gckOS_GetBaseAddress(
|
|
IN gckOS Os,
|
|
OUT gctUINT32_PTR BaseAddress
|
|
);
|
|
|
|
/* Perform a memory copy. */
|
|
gceSTATUS
|
|
gckOS_MemCopy(
|
|
IN gctPOINTER Destination,
|
|
IN gctCONST_POINTER Source,
|
|
IN gctSIZE_T Bytes
|
|
);
|
|
|
|
/* Zero memory. */
|
|
gceSTATUS
|
|
gckOS_ZeroMemory(
|
|
IN gctPOINTER Memory,
|
|
IN gctSIZE_T Bytes
|
|
);
|
|
|
|
/*******************************************************************************
|
|
**
|
|
** gckOS_GetProcessID
|
|
**
|
|
** Get current process ID.
|
|
**
|
|
** INPUT:
|
|
**
|
|
** Nothing.
|
|
**
|
|
** OUTPUT:
|
|
**
|
|
** gctUINT32_PTR ProcessID
|
|
** Pointer to the variable that receives the process ID.
|
|
*/
|
|
gceSTATUS
|
|
gckOS_GetProcessID(
|
|
OUT gctUINT32_PTR ProcessID
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_GetCurrentProcessID(
|
|
OUT gctUINT32_PTR ProcessID
|
|
);
|
|
|
|
/*******************************************************************************
|
|
**
|
|
** gckOS_GetThreadID
|
|
**
|
|
** Get current thread ID.
|
|
**
|
|
** INPUT:
|
|
**
|
|
** Nothing.
|
|
**
|
|
** OUTPUT:
|
|
**
|
|
** gctUINT32_PTR ThreadID
|
|
** Pointer to the variable that receives the thread ID.
|
|
*/
|
|
gceSTATUS
|
|
gckOS_GetThreadID(
|
|
OUT gctUINT32_PTR ThreadID
|
|
);
|
|
|
|
/******************************************************************************\
|
|
********************************** Signal Object *********************************
|
|
\******************************************************************************/
|
|
|
|
/* Create a signal. */
|
|
gceSTATUS
|
|
gckOS_CreateSignal(
|
|
IN gckOS Os,
|
|
IN gctBOOL ManualReset,
|
|
OUT gctSIGNAL * Signal
|
|
);
|
|
|
|
/* Destroy a signal. */
|
|
gceSTATUS
|
|
gckOS_DestroySignal(
|
|
IN gckOS Os,
|
|
IN gctSIGNAL Signal
|
|
);
|
|
|
|
/* Signal a signal. */
|
|
gceSTATUS
|
|
gckOS_Signal(
|
|
IN gckOS Os,
|
|
IN gctSIGNAL Signal,
|
|
IN gctBOOL State
|
|
);
|
|
|
|
/* Wait for a signal. */
|
|
gceSTATUS
|
|
gckOS_WaitSignal(
|
|
IN gckOS Os,
|
|
IN gctSIGNAL Signal,
|
|
IN gctBOOL Interruptable,
|
|
IN gctUINT32 Wait
|
|
);
|
|
|
|
#ifdef __QNXNTO__
|
|
gceSTATUS
|
|
gckOS_SignalPulse(
|
|
IN gckOS Os,
|
|
IN gctSIGNAL Signal
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_SignalPending(
|
|
IN gckOS Os,
|
|
IN gctSIGNAL Signal
|
|
);
|
|
#endif
|
|
|
|
/* Map a user signal to the kernel space. */
|
|
gceSTATUS
|
|
gckOS_MapSignal(
|
|
IN gckOS Os,
|
|
IN gctSIGNAL Signal,
|
|
IN gctHANDLE Process,
|
|
OUT gctSIGNAL * MappedSignal
|
|
);
|
|
|
|
/* Unmap a user signal */
|
|
gceSTATUS
|
|
gckOS_UnmapSignal(
|
|
IN gckOS Os,
|
|
IN gctSIGNAL Signal
|
|
);
|
|
|
|
/* Get scatter-gather table from memory. */
|
|
gceSTATUS
|
|
gckOS_MemoryGetSGT(
|
|
IN gckOS Os,
|
|
IN gctPHYS_ADDR Physical,
|
|
IN gctSIZE_T Offset,
|
|
IN gctSIZE_T Bytes,
|
|
OUT gctPOINTER *SGT
|
|
);
|
|
|
|
/* Map a page range of memory to user space. */
|
|
gceSTATUS
|
|
gckOS_MemoryMmap(
|
|
IN gckOS Os,
|
|
IN gctPHYS_ADDR Physical,
|
|
IN gctSIZE_T skipPages,
|
|
IN gctSIZE_T numPages,
|
|
INOUT gctPOINTER Vma
|
|
);
|
|
|
|
/* Wrap a user memory to gctPHYS_ADDR. */
|
|
gceSTATUS
|
|
gckOS_WrapMemory(
|
|
IN gckOS Os,
|
|
IN gcsUSER_MEMORY_DESC_PTR Desc,
|
|
OUT gctSIZE_T *Bytes,
|
|
OUT gctPHYS_ADDR * Physical,
|
|
OUT gctBOOL *Contiguous,
|
|
OUT gctSIZE_T * PageCountCpu
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_GetPolicyID(
|
|
IN gckOS Os,
|
|
IN gceVIDMEM_TYPE Type,
|
|
OUT gctUINT32_PTR PolicyID,
|
|
OUT gctUINT32_PTR AXIConfig
|
|
);
|
|
|
|
#if gcdENABLE_MP_SWITCH
|
|
gceSTATUS
|
|
gckOS_SwitchCoreCount(
|
|
IN gckOS Os,
|
|
OUT gctUINT32 *Count
|
|
);
|
|
#endif
|
|
|
|
/******************************************************************************\
|
|
************************** Android Native Fence Sync ***************************
|
|
\******************************************************************************/
|
|
gceSTATUS
|
|
gckOS_CreateSyncTimeline(
|
|
IN gckOS Os,
|
|
IN gceCORE Core,
|
|
OUT gctHANDLE * Timeline
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_DestroySyncTimeline(
|
|
IN gckOS Os,
|
|
IN gctHANDLE Timeline
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_CreateNativeFence(
|
|
IN gckOS Os,
|
|
IN gctHANDLE Timeline,
|
|
IN gctSIGNAL Signal,
|
|
OUT gctINT * FenceFD
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_WaitNativeFence(
|
|
IN gckOS Os,
|
|
IN gctHANDLE Timeline,
|
|
IN gctINT FenceFD,
|
|
IN gctUINT32 Timeout
|
|
);
|
|
|
|
#if !USE_NEW_LINUX_SIGNAL
|
|
/* Create signal to be used in the user space. */
|
|
gceSTATUS
|
|
gckOS_CreateUserSignal(
|
|
IN gckOS Os,
|
|
IN gctBOOL ManualReset,
|
|
OUT gctINT * SignalID
|
|
);
|
|
|
|
/* Destroy signal used in the user space. */
|
|
gceSTATUS
|
|
gckOS_DestroyUserSignal(
|
|
IN gckOS Os,
|
|
IN gctINT SignalID
|
|
);
|
|
|
|
/* Wait for signal used in the user space. */
|
|
gceSTATUS
|
|
gckOS_WaitUserSignal(
|
|
IN gckOS Os,
|
|
IN gctINT SignalID,
|
|
IN gctUINT32 Wait
|
|
);
|
|
|
|
/* Signal a signal used in the user space. */
|
|
gceSTATUS
|
|
gckOS_SignalUserSignal(
|
|
IN gckOS Os,
|
|
IN gctINT SignalID,
|
|
IN gctBOOL State
|
|
);
|
|
#endif /* USE_NEW_LINUX_SIGNAL */
|
|
|
|
/* Set a signal owned by a process. */
|
|
#if defined(__QNXNTO__)
|
|
gceSTATUS
|
|
gckOS_UserSignal(
|
|
IN gckOS Os,
|
|
IN gctSIGNAL Signal,
|
|
IN gctINT Recvid,
|
|
IN gctINT Coid
|
|
);
|
|
#else
|
|
gceSTATUS
|
|
gckOS_UserSignal(
|
|
IN gckOS Os,
|
|
IN gctSIGNAL Signal,
|
|
IN gctHANDLE Process
|
|
);
|
|
#endif
|
|
|
|
/******************************************************************************\
|
|
** Cache Support
|
|
*/
|
|
|
|
gceSTATUS
|
|
gckOS_CacheClean(
|
|
gckOS Os,
|
|
gctUINT32 ProcessID,
|
|
gctPHYS_ADDR Handle,
|
|
gctSIZE_T Offset,
|
|
gctPOINTER Logical,
|
|
gctSIZE_T Bytes
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_CacheFlush(
|
|
gckOS Os,
|
|
gctUINT32 ProcessID,
|
|
gctPHYS_ADDR Handle,
|
|
gctSIZE_T Offset,
|
|
gctPOINTER Logical,
|
|
gctSIZE_T Bytes
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_CacheInvalidate(
|
|
gckOS Os,
|
|
gctUINT32 ProcessID,
|
|
gctPHYS_ADDR Handle,
|
|
gctSIZE_T Offset,
|
|
gctPOINTER Logical,
|
|
gctSIZE_T Bytes
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_CPUPhysicalToGPUPhysical(
|
|
IN gckOS Os,
|
|
IN gctPHYS_ADDR_T CPUPhysical,
|
|
IN gctPHYS_ADDR_T * GPUPhysical
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_GPUPhysicalToCPUPhysical(
|
|
IN gckOS Os,
|
|
IN gctUINT32 GPUPhysical,
|
|
IN gctPHYS_ADDR_T * CPUPhysical
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_QueryOption(
|
|
IN gckOS Os,
|
|
IN gctCONST_STRING Option,
|
|
OUT gctUINT64 * Value
|
|
);
|
|
|
|
/******************************************************************************\
|
|
** Debug Support
|
|
*/
|
|
|
|
void
|
|
gckOS_SetDebugLevel(
|
|
IN gctUINT32 Level
|
|
);
|
|
|
|
void
|
|
gckOS_SetDebugZone(
|
|
IN gctUINT32 Zone
|
|
);
|
|
|
|
void
|
|
gckOS_SetDebugLevelZone(
|
|
IN gctUINT32 Level,
|
|
IN gctUINT32 Zone
|
|
);
|
|
|
|
void
|
|
gckOS_SetDebugZones(
|
|
IN gctUINT32 Zones,
|
|
IN gctBOOL Enable
|
|
);
|
|
|
|
void
|
|
gckOS_SetDebugFile(
|
|
IN gctCONST_STRING FileName
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_Broadcast(
|
|
IN gckOS Os,
|
|
IN gckHARDWARE Hardware,
|
|
IN gceBROADCAST Reason
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_BroadcastHurry(
|
|
IN gckOS Os,
|
|
IN gckHARDWARE Hardware,
|
|
IN gctUINT Urgency
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_BroadcastCalibrateSpeed(
|
|
IN gckOS Os,
|
|
IN gckHARDWARE Hardware,
|
|
IN gctUINT Idle,
|
|
IN gctUINT Time
|
|
);
|
|
|
|
/*******************************************************************************
|
|
**
|
|
** gckOS_SetGPUPower
|
|
**
|
|
** Set the power of the GPU on or off.
|
|
**
|
|
** INPUT:
|
|
**
|
|
** gckOS Os
|
|
** Pointer to a gckOS object.
|
|
**
|
|
** gceCORE Core
|
|
** GPU whose power is set.
|
|
**
|
|
** gctBOOL Clock
|
|
** gcvTRUE to turn on the clock, or gcvFALSE to turn off the clock.
|
|
**
|
|
** gctBOOL Power
|
|
** gcvTRUE to turn on the power, or gcvFALSE to turn off the power.
|
|
**
|
|
** OUTPUT:
|
|
**
|
|
** Nothing.
|
|
*/
|
|
gceSTATUS
|
|
gckOS_SetGPUPower(
|
|
IN gckOS Os,
|
|
IN gceCORE Core,
|
|
IN gctBOOL Clock,
|
|
IN gctBOOL Power
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_SetClockState(
|
|
IN gckOS Os,
|
|
IN gceCORE Core,
|
|
IN gctBOOL Clock
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_GetClockState(
|
|
IN gckOS Os,
|
|
IN gceCORE Core,
|
|
IN gctBOOL * Clock
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_ResetGPU(
|
|
IN gckOS Os,
|
|
IN gceCORE Core
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_PrepareGPUFrequency(
|
|
IN gckOS Os,
|
|
IN gceCORE Core
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_FinishGPUFrequency(
|
|
IN gckOS Os,
|
|
IN gceCORE Core
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_QueryGPUFrequency(
|
|
IN gckOS Os,
|
|
IN gceCORE Core,
|
|
OUT gctUINT32 * Frequency,
|
|
OUT gctUINT8 * Scale
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_SetGPUFrequency(
|
|
IN gckOS Os,
|
|
IN gceCORE Core,
|
|
IN gctUINT8 Scale
|
|
);
|
|
|
|
/*******************************************************************************
|
|
** Semaphores.
|
|
*/
|
|
|
|
/* Create a new semaphore. */
|
|
gceSTATUS
|
|
gckOS_CreateSemaphore(
|
|
IN gckOS Os,
|
|
OUT gctPOINTER * Semaphore
|
|
);
|
|
|
|
|
|
/* Delete a semaphore. */
|
|
gceSTATUS
|
|
gckOS_DestroySemaphore(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Semaphore
|
|
);
|
|
|
|
/* Acquire a semaphore. */
|
|
gceSTATUS
|
|
gckOS_AcquireSemaphore(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Semaphore
|
|
);
|
|
|
|
/* Try to acquire a semaphore. */
|
|
gceSTATUS
|
|
gckOS_TryAcquireSemaphore(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Semaphore
|
|
);
|
|
|
|
/* Release a semaphore. */
|
|
gceSTATUS
|
|
gckOS_ReleaseSemaphore(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Semaphore
|
|
);
|
|
|
|
/* Release a semaphore. */
|
|
gceSTATUS
|
|
gckOS_ReleaseSemaphoreEx(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Semaphore
|
|
);
|
|
|
|
/*******************************************************************************
|
|
** Timer API.
|
|
*/
|
|
|
|
typedef void (*gctTIMERFUNCTION)(gctPOINTER);
|
|
|
|
/* Create a timer. */
|
|
gceSTATUS
|
|
gckOS_CreateTimer(
|
|
IN gckOS Os,
|
|
IN gctTIMERFUNCTION Function,
|
|
IN gctPOINTER Data,
|
|
OUT gctPOINTER * Timer
|
|
);
|
|
|
|
/* Destory a timer. */
|
|
gceSTATUS
|
|
gckOS_DestroyTimer(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Timer
|
|
);
|
|
|
|
/* Start a timer. */
|
|
gceSTATUS
|
|
gckOS_StartTimer(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Timer,
|
|
IN gctUINT32 Delay
|
|
);
|
|
|
|
/* Stop a timer. */
|
|
gceSTATUS
|
|
gckOS_StopTimer(
|
|
IN gckOS Os,
|
|
IN gctPOINTER Timer
|
|
);
|
|
|
|
/******************************************************************************\
|
|
********************************* gckHEAP Object ********************************
|
|
\******************************************************************************/
|
|
|
|
typedef struct _gckHEAP * gckHEAP;
|
|
|
|
/* Construct a new gckHEAP object. */
|
|
gceSTATUS
|
|
gckHEAP_Construct(
|
|
IN gckOS Os,
|
|
IN gctSIZE_T AllocationSize,
|
|
OUT gckHEAP * Heap
|
|
);
|
|
|
|
/* Destroy an gckHEAP object. */
|
|
gceSTATUS
|
|
gckHEAP_Destroy(
|
|
IN gckHEAP Heap
|
|
);
|
|
|
|
/* Allocate memory. */
|
|
gceSTATUS
|
|
gckHEAP_Allocate(
|
|
IN gckHEAP Heap,
|
|
IN gctSIZE_T Bytes,
|
|
OUT gctPOINTER * Node
|
|
);
|
|
|
|
/* Free memory. */
|
|
gceSTATUS
|
|
gckHEAP_Free(
|
|
IN gckHEAP Heap,
|
|
IN gctPOINTER Node
|
|
);
|
|
|
|
/* Profile the heap. */
|
|
gceSTATUS
|
|
gckHEAP_ProfileStart(
|
|
IN gckHEAP Heap
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHEAP_ProfileEnd(
|
|
IN gckHEAP Heap,
|
|
IN gctCONST_STRING Title
|
|
);
|
|
|
|
typedef struct _gckVIDMEM * gckVIDMEM;
|
|
typedef struct _gckKERNEL * gckKERNEL;
|
|
typedef struct _gckCOMMAND * gckCOMMAND;
|
|
typedef struct _gckEVENT * gckEVENT;
|
|
typedef struct _gckDB * gckDB;
|
|
typedef struct _gckDVFS * gckDVFS;
|
|
typedef struct _gckMMU * gckMMU;
|
|
typedef struct _gcsDEVICE * gckDEVICE;
|
|
|
|
/******************************************************************************\
|
|
******************************** gckKERNEL Object ******************************
|
|
\******************************************************************************/
|
|
|
|
struct _gcsHAL_INTERFACE;
|
|
|
|
/* Construct a new gckKERNEL object. */
|
|
gceSTATUS
|
|
gckKERNEL_Construct(
|
|
IN gckOS Os,
|
|
IN gceCORE Core,
|
|
IN gctUINT ChipID,
|
|
IN gctPOINTER Context,
|
|
IN gckDEVICE Device,
|
|
IN gckDB SharedDB,
|
|
OUT gckKERNEL * Kernel
|
|
);
|
|
|
|
/* Destroy an gckKERNEL object. */
|
|
gceSTATUS
|
|
gckKERNEL_Destroy(
|
|
IN gckKERNEL Kernel
|
|
);
|
|
|
|
/* Dispatch a user-level command. */
|
|
gceSTATUS
|
|
gckKERNEL_Dispatch(
|
|
IN gckKERNEL Kernel,
|
|
IN gckDEVICE Device,
|
|
IN OUT struct _gcsHAL_INTERFACE * Interface
|
|
);
|
|
|
|
/* Query Database requirements. */
|
|
gceSTATUS
|
|
gckKERNEL_QueryDatabase(
|
|
IN gckKERNEL Kernel,
|
|
IN gctUINT32 ProcessID,
|
|
IN OUT gcsHAL_INTERFACE * Interface
|
|
);
|
|
|
|
/* Query the video memory. */
|
|
gceSTATUS
|
|
gckKERNEL_QueryVideoMemory(
|
|
IN gckKERNEL Kernel,
|
|
OUT struct _gcsHAL_INTERFACE * Interface
|
|
);
|
|
|
|
/* Lookup the gckVIDMEM object for a pool. */
|
|
gceSTATUS
|
|
gckKERNEL_GetVideoMemoryPool(
|
|
IN gckKERNEL Kernel,
|
|
IN gcePOOL Pool,
|
|
OUT gckVIDMEM * VideoMemory
|
|
);
|
|
|
|
/* Map dedicated video memory node. */
|
|
gceSTATUS
|
|
gckKERNEL_MapVideoMemory(
|
|
IN gckKERNEL Kernel,
|
|
IN gctBOOL InUserSpace,
|
|
IN gcePOOL Pool,
|
|
IN gctPHYS_ADDR Physical,
|
|
IN gctUINT32 Offset,
|
|
IN gctUINT32 Bytes,
|
|
OUT gctPOINTER * Logical
|
|
);
|
|
|
|
/* Unmap dedicated video memory. */
|
|
gceSTATUS
|
|
gckKERNEL_UnmapVideoMemory(
|
|
IN gckKERNEL Kernel,
|
|
IN gcePOOL Pool,
|
|
IN gctPHYS_ADDR Physical,
|
|
IN gctPOINTER Logical,
|
|
IN gctUINT32 Pid,
|
|
IN gctSIZE_T Bytes
|
|
);
|
|
|
|
/* Map memory. */
|
|
gceSTATUS
|
|
gckKERNEL_MapMemory(
|
|
IN gckKERNEL Kernel,
|
|
IN gctPHYS_ADDR Physical,
|
|
IN gctSIZE_T Bytes,
|
|
OUT gctPOINTER * Logical
|
|
);
|
|
|
|
/* Unmap memory. */
|
|
gceSTATUS
|
|
gckKERNEL_UnmapMemory(
|
|
IN gckKERNEL Kernel,
|
|
IN gctPHYS_ADDR Physical,
|
|
IN gctSIZE_T Bytes,
|
|
IN gctPOINTER Logical,
|
|
IN gctUINT32 ProcessID
|
|
);
|
|
/* Destroy reserved mem when destroy process*/
|
|
gceSTATUS
|
|
gckKERNEL_DestroyProcessReservedUserMap(
|
|
IN gckKERNEL Kernel,
|
|
IN gctUINT32 Pid
|
|
);
|
|
|
|
/* Notification of events. */
|
|
gceSTATUS
|
|
gckKERNEL_Notify(
|
|
IN gckKERNEL Kernel,
|
|
IN gceNOTIFY Notifcation
|
|
);
|
|
|
|
gceSTATUS
|
|
gckKERNEL_SyncVideoMemory(
|
|
IN gckKERNEL Kernel,
|
|
IN gckVIDMEM_NODE Node,
|
|
IN gctUINT32 Reason
|
|
);
|
|
|
|
/*******************************************************************************
|
|
**
|
|
** gckKERNEL_Recovery
|
|
**
|
|
** Try to recover the GPU from a fatal error.
|
|
**
|
|
** INPUT:
|
|
**
|
|
** gckKERNEL Kernel
|
|
** Pointer to an gckKERNEL object.
|
|
**
|
|
** OUTPUT:
|
|
**
|
|
** Nothing.
|
|
*/
|
|
gceSTATUS
|
|
gckKERNEL_Recovery(
|
|
IN gckKERNEL Kernel
|
|
);
|
|
|
|
/* Get access to the user data. */
|
|
gceSTATUS
|
|
gckKERNEL_OpenUserData(
|
|
IN gckKERNEL Kernel,
|
|
IN gctBOOL NeedCopy,
|
|
IN gctPOINTER StaticStorage,
|
|
IN gctPOINTER UserPointer,
|
|
IN gctSIZE_T Size,
|
|
OUT gctPOINTER * KernelPointer
|
|
);
|
|
|
|
/* Release resources associated with the user data connection. */
|
|
gceSTATUS
|
|
gckKERNEL_CloseUserData(
|
|
IN gckKERNEL Kernel,
|
|
IN gctBOOL NeedCopy,
|
|
IN gctBOOL FlushData,
|
|
IN gctPOINTER UserPointer,
|
|
IN gctSIZE_T Size,
|
|
OUT gctPOINTER * KernelPointer
|
|
);
|
|
|
|
gceSTATUS
|
|
gckDVFS_Construct(
|
|
IN gckHARDWARE Hardware,
|
|
OUT gckDVFS * Frequency
|
|
);
|
|
|
|
gceSTATUS
|
|
gckDVFS_Destroy(
|
|
IN gckDVFS Dvfs
|
|
);
|
|
|
|
gceSTATUS
|
|
gckDVFS_Start(
|
|
IN gckDVFS Dvfs
|
|
);
|
|
|
|
gceSTATUS
|
|
gckDVFS_Stop(
|
|
IN gckDVFS Dvfs
|
|
);
|
|
|
|
/******************************************************************************\
|
|
******************************* gckHARDWARE Object *****************************
|
|
\******************************************************************************/
|
|
|
|
/* Construct a new gckHARDWARE object. */
|
|
gceSTATUS
|
|
gckHARDWARE_Construct(
|
|
IN gckOS Os,
|
|
IN gckDEVICE Device,
|
|
IN gceCORE Core,
|
|
OUT gckHARDWARE * Hardware
|
|
);
|
|
|
|
/* Post hardware resource allocation after gckHARDWARE object constructed. */
|
|
gceSTATUS
|
|
gckHARDWARE_PostConstruct(
|
|
IN gckHARDWARE Hardware
|
|
);
|
|
|
|
/* Pre-destroy hardwre resource before destroying an gckHARDWARE object. */
|
|
gceSTATUS
|
|
gckHARDWARE_PreDestroy(
|
|
IN gckHARDWARE Hardware
|
|
);
|
|
|
|
/* Destroy an gckHARDWARE object. */
|
|
gceSTATUS
|
|
gckHARDWARE_Destroy(
|
|
IN gckHARDWARE Hardware
|
|
);
|
|
|
|
/* Get hardware type. */
|
|
gceSTATUS
|
|
gckHARDWARE_GetType(
|
|
IN gckHARDWARE Hardware,
|
|
OUT gceHARDWARE_TYPE * Type
|
|
);
|
|
|
|
/* Query system memory requirements. */
|
|
gceSTATUS
|
|
gckHARDWARE_QuerySystemMemory(
|
|
IN gckHARDWARE Hardware,
|
|
OUT gctSIZE_T * SystemSize,
|
|
OUT gctUINT32 * SystemBaseAddress
|
|
);
|
|
|
|
/* Build virtual address. */
|
|
gceSTATUS
|
|
gckHARDWARE_BuildVirtualAddress(
|
|
IN gckHARDWARE Hardware,
|
|
IN gctUINT32 Index,
|
|
IN gctUINT32 Offset,
|
|
OUT gctUINT32 * Address
|
|
);
|
|
|
|
/* Query command buffer requirements. */
|
|
gceSTATUS
|
|
gckHARDWARE_QueryCommandBuffer(
|
|
IN gckHARDWARE Hardware,
|
|
IN gceENGINE Engine,
|
|
OUT gctUINT32 * Alignment,
|
|
OUT gctUINT32 * ReservedHead,
|
|
OUT gctUINT32 * ReservedTail
|
|
);
|
|
|
|
/* Add a PIPESELECT command in the command queue. */
|
|
gceSTATUS
|
|
gckHARDWARE_PipeSelect(
|
|
IN gckHARDWARE Hardware,
|
|
IN gctPOINTER Logical,
|
|
IN gcePIPE_SELECT Pipe,
|
|
IN OUT gctUINT32 * Bytes
|
|
);
|
|
|
|
/* Query the available memory. */
|
|
gceSTATUS
|
|
gckHARDWARE_QueryMemory(
|
|
IN gckHARDWARE Hardware,
|
|
OUT gctSIZE_T * InternalSize,
|
|
OUT gctUINT32 * InternalBaseAddress,
|
|
OUT gctUINT32 * InternalAlignment,
|
|
OUT gctSIZE_T * ExternalSize,
|
|
OUT gctUINT32 * ExternalBaseAddress,
|
|
OUT gctUINT32 * ExternalAlignment,
|
|
OUT gctUINT32 * HorizontalTileSize,
|
|
OUT gctUINT32 * VerticalTileSize
|
|
);
|
|
|
|
/* Query the identity of the hardware. */
|
|
gceSTATUS
|
|
gckHARDWARE_QueryChipIdentity(
|
|
IN gckHARDWARE Hardware,
|
|
OUT gcsHAL_QUERY_CHIP_IDENTITY_PTR Identity
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_QueryChipOptions(
|
|
IN gckHARDWARE Hardware,
|
|
OUT gcsHAL_QUERY_CHIP_OPTIONS_PTR Options
|
|
);
|
|
|
|
|
|
/* Split a harwdare specific address into API stuff. */
|
|
gceSTATUS
|
|
gckHARDWARE_SplitMemory(
|
|
IN gckHARDWARE Hardware,
|
|
IN gctUINT32 Address,
|
|
OUT gcePOOL * Pool,
|
|
OUT gctUINT32 * Offset
|
|
);
|
|
|
|
/* Update command queue tail pointer. */
|
|
gceSTATUS
|
|
gckHARDWARE_UpdateQueueTail(
|
|
IN gckHARDWARE Hardware,
|
|
IN gctPOINTER Logical,
|
|
IN gctUINT32 Offset
|
|
);
|
|
|
|
/* Interrupt manager. */
|
|
gceSTATUS
|
|
gckHARDWARE_Interrupt(
|
|
IN gckHARDWARE Hardware
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_Notify(
|
|
IN gckHARDWARE Hardware
|
|
);
|
|
|
|
/* Program MMU. */
|
|
gceSTATUS
|
|
gckHARDWARE_SetMMU(
|
|
IN gckHARDWARE Hardware,
|
|
IN gckMMU Mmu
|
|
);
|
|
|
|
/* Flush the MMU. */
|
|
gceSTATUS
|
|
gckHARDWARE_FlushMMU(
|
|
IN gckHARDWARE Hardware,
|
|
IN gctPOINTER Logical,
|
|
IN gctUINT32 Address,
|
|
IN gctUINT32 SubsequentBytes,
|
|
IN OUT gctUINT32 * Bytes
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_FlushAsyncMMU(
|
|
IN gckHARDWARE Hardware,
|
|
IN gctPOINTER Logical,
|
|
IN OUT gctUINT32 * Bytes
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_FlushMcfeMMU(
|
|
IN gckHARDWARE Hardware,
|
|
IN gctPOINTER Logical,
|
|
IN OUT gctUINT32 * Bytes
|
|
);
|
|
|
|
/* Get idle register. */
|
|
gceSTATUS
|
|
gckHARDWARE_GetIdle(
|
|
IN gckHARDWARE Hardware,
|
|
IN gctBOOL Wait,
|
|
OUT gctUINT32 * Data
|
|
);
|
|
|
|
/* Flush the caches. */
|
|
gceSTATUS
|
|
gckHARDWARE_Flush(
|
|
IN gckHARDWARE Hardware,
|
|
IN gceKERNEL_FLUSH Flush,
|
|
IN gctPOINTER Logical,
|
|
IN OUT gctUINT32 * Bytes
|
|
);
|
|
|
|
/* Enable/disable fast clear. */
|
|
gceSTATUS
|
|
gckHARDWARE_SetFastClear(
|
|
IN gckHARDWARE Hardware,
|
|
IN gctINT Enable,
|
|
IN gctINT Compression
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_ReadInterrupt(
|
|
IN gckHARDWARE Hardware,
|
|
OUT gctUINT32_PTR IDs
|
|
);
|
|
|
|
/*
|
|
* State timer helper.
|
|
*/
|
|
gceSTATUS
|
|
gckHARDWARE_StartTimerReset(
|
|
IN gckHARDWARE Hardware
|
|
);
|
|
|
|
/* Power management. */
|
|
gceSTATUS
|
|
gckHARDWARE_SetPowerState(
|
|
IN gckHARDWARE Hardware,
|
|
IN gceCHIPPOWERSTATE State
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_QueryPowerState(
|
|
IN gckHARDWARE Hardware,
|
|
OUT gceCHIPPOWERSTATE* State
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_EnablePowerManagement(
|
|
IN gckHARDWARE Hardware,
|
|
IN gctBOOL Enable
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_QueryPowerManagement(
|
|
IN gckHARDWARE Hardware,
|
|
OUT gctBOOL *Enable
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_SetGpuProfiler(
|
|
IN gckHARDWARE Hardware,
|
|
IN gctBOOL GpuProfiler
|
|
);
|
|
|
|
#if gcdENABLE_FSCALE_VAL_ADJUST
|
|
gceSTATUS
|
|
gckHARDWARE_SetFscaleValue(
|
|
IN gckHARDWARE Hardware,
|
|
IN gctUINT32 FscaleValue,
|
|
IN gctUINT32 ShaderFscaleValue
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_GetFscaleValue(
|
|
IN gckHARDWARE Hardware,
|
|
IN gctUINT * FscaleValue,
|
|
IN gctUINT * MinFscaleValue,
|
|
IN gctUINT * MaxFscaleValue
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_SetMinFscaleValue(
|
|
IN gckHARDWARE Hardware,
|
|
IN gctUINT MinFscaleValue
|
|
);
|
|
#endif
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_InitializeHardware(
|
|
IN gckHARDWARE Hardware
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_Reset(
|
|
IN gckHARDWARE Hardware
|
|
);
|
|
|
|
/* Check for Hardware features. */
|
|
gceSTATUS
|
|
gckHARDWARE_IsFeatureAvailable(
|
|
IN gckHARDWARE Hardware,
|
|
IN gceFEATURE Feature
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_DumpMMUException(
|
|
IN gckHARDWARE Hardware
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_DumpGPUState(
|
|
IN gckHARDWARE Hardware
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_InitDVFS(
|
|
IN gckHARDWARE Hardware
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_QueryLoad(
|
|
IN gckHARDWARE Hardware,
|
|
OUT gctUINT32 * Load
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_SetDVFSPeroid(
|
|
IN gckHARDWARE Hardware,
|
|
IN gctUINT32 Frequency
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_QueryStateTimer(
|
|
IN gckHARDWARE Hardware,
|
|
OUT gctUINT64_PTR On,
|
|
OUT gctUINT64_PTR Off,
|
|
OUT gctUINT64_PTR Idle,
|
|
OUT gctUINT64_PTR Suspend
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_Fence(
|
|
IN gckHARDWARE Hardware,
|
|
IN gceENGINE Engine,
|
|
IN gctPOINTER Logical,
|
|
IN gctUINT32 FenceAddress,
|
|
IN gctUINT64 FenceData,
|
|
IN OUT gctUINT32 * Bytes
|
|
);
|
|
|
|
/******************************************************************************\
|
|
***************************** gckINTERRUPT Object ******************************
|
|
\******************************************************************************/
|
|
|
|
typedef struct _gckINTERRUPT * gckINTERRUPT;
|
|
|
|
typedef gceSTATUS (* gctINTERRUPT_HANDLER)(
|
|
IN gckKERNEL Kernel
|
|
);
|
|
|
|
gceSTATUS
|
|
gckINTERRUPT_Construct(
|
|
IN gckKERNEL Kernel,
|
|
OUT gckINTERRUPT * Interrupt
|
|
);
|
|
|
|
gceSTATUS
|
|
gckINTERRUPT_Destroy(
|
|
IN gckINTERRUPT Interrupt
|
|
);
|
|
|
|
gceSTATUS
|
|
gckINTERRUPT_SetHandler(
|
|
IN gckINTERRUPT Interrupt,
|
|
IN OUT gctINT32_PTR Id,
|
|
IN gctINTERRUPT_HANDLER Handler
|
|
);
|
|
|
|
gceSTATUS
|
|
gckINTERRUPT_Notify(
|
|
IN gckINTERRUPT Interrupt,
|
|
IN gctBOOL Valid
|
|
);
|
|
|
|
/******************************************************************************\
|
|
********************************* gckMMU Object ********************************
|
|
\******************************************************************************/
|
|
|
|
/* Construct a new gckMMU object. */
|
|
gceSTATUS
|
|
gckMMU_Construct(
|
|
IN gckKERNEL Kernel,
|
|
IN gctSIZE_T MmuSize,
|
|
OUT gckMMU * Mmu
|
|
);
|
|
|
|
/* Destroy an gckMMU object. */
|
|
gceSTATUS
|
|
gckMMU_Destroy(
|
|
IN gckMMU Mmu
|
|
);
|
|
|
|
/* Allocate pages inside the MMU. */
|
|
gceSTATUS
|
|
gckMMU_AllocatePages(
|
|
IN gckMMU Mmu,
|
|
IN gctSIZE_T PageCount,
|
|
IN gcePAGE_TYPE PageType,
|
|
OUT gctPOINTER * PageTable,
|
|
OUT gctUINT32 * Address
|
|
);
|
|
|
|
gceSTATUS
|
|
gckMMU_AllocatePagesEx(
|
|
IN gckMMU Mmu,
|
|
IN gctSIZE_T PageCount,
|
|
IN gceVIDMEM_TYPE Type,
|
|
IN gcePAGE_TYPE PageType,
|
|
IN gctBOOL Secure,
|
|
OUT gctPOINTER * PageTable,
|
|
OUT gctUINT32 * Address
|
|
);
|
|
|
|
/* Remove a page table from the MMU. */
|
|
gceSTATUS
|
|
gckMMU_FreePages(
|
|
IN gckMMU Mmu,
|
|
IN gctBOOL Secure,
|
|
IN gcePAGE_TYPE PageType,
|
|
IN gctUINT32 Address,
|
|
IN gctPOINTER PageTable,
|
|
IN gctSIZE_T PageCount
|
|
);
|
|
|
|
/* Set the MMU page with info. */
|
|
gceSTATUS
|
|
gckMMU_SetPage(
|
|
IN gckMMU Mmu,
|
|
IN gctPHYS_ADDR_T PageAddress,
|
|
IN gcePAGE_TYPE PageType,
|
|
IN gctBOOL Writable,
|
|
IN gctUINT32 *PageEntry
|
|
);
|
|
|
|
gceSTATUS
|
|
gckMMU_Flush(
|
|
IN gckMMU Mmu,
|
|
IN gceVIDMEM_TYPE Type
|
|
);
|
|
|
|
gceSTATUS
|
|
gckMMU_DumpPageTableEntry(
|
|
IN gckMMU Mmu,
|
|
IN gceAREA_TYPE AreaType,
|
|
IN gctUINT32 Address
|
|
);
|
|
|
|
gceSTATUS
|
|
gckMMU_FillFlatMapping(
|
|
IN gckMMU Mmu,
|
|
IN gctUINT64 PhysBase,
|
|
IN gctSIZE_T Size,
|
|
IN gctBOOL Reserved,
|
|
IN gctBOOL AbleToShift,
|
|
OUT gctUINT32 *GpuBaseAddress
|
|
);
|
|
|
|
gceSTATUS
|
|
gckMMU_IsFlatMapped(
|
|
IN gckMMU Mmu,
|
|
IN gctUINT64 Physical,
|
|
IN gctUINT32 Address,
|
|
IN gctSIZE_T Bytes,
|
|
OUT gctBOOL *In
|
|
);
|
|
|
|
gceSTATUS
|
|
gckMMU_GetAreaType(
|
|
IN gckMMU Mmu,
|
|
IN gctUINT32 GpuAddress,
|
|
OUT gceAREA_TYPE *AreaType
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_QueryContextProfile(
|
|
IN gckHARDWARE Hardware,
|
|
IN gctBOOL Reset,
|
|
OUT gcsPROFILER_COUNTERS_PART1 * Counters_part1,
|
|
OUT gcsPROFILER_COUNTERS_PART2 * Counters_part2
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_UpdateContextProfile(
|
|
IN gckHARDWARE Hardware
|
|
);
|
|
|
|
gceSTATUS
|
|
gckHARDWARE_InitProfiler(
|
|
IN gckHARDWARE Hardware
|
|
);
|
|
|
|
gceSTATUS
|
|
gckOS_DetectProcessByName(
|
|
IN gctCONST_POINTER Name
|
|
);
|
|
|
|
void
|
|
gckOS_DumpParam(
|
|
void
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif /* __gc_hal_h_ */
|
|
|
|
|