blob: 38b2b06627fcd65fadc5f76e87463da2accf4507 [file] [log] [blame] [edit]
/****************************************************************************
*
* Copyright (c) 2005 - 2014 by Vivante Corp. All rights reserved.
*
* The material in this file is confidential and contains trade secrets
* of Vivante Corporation. This is proprietary information owned by
* Vivante Corporation. No part of this work may be disclosed,
* reproduced, copied, transmitted, or used in any way for any purpose,
* without the express written permission of Vivante Corporation.
*
*****************************************************************************/
#ifndef __gc_hal_driver_h_
#define __gc_hal_driver_h_
#include "gc_hal_enum.h"
#include "gc_hal_types.h"
#if gcdENABLE_VG
#include "gc_hal_driver_vg.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
/******************************************************************************\
******************************* I/O Control Codes ******************************
\******************************************************************************/
#define gcvHAL_CLASS "galcore"
#define IOCTL_GCHAL_INTERFACE 30000
#define IOCTL_GCHAL_KERNEL_INTERFACE 30001
#define IOCTL_GCHAL_TERMINATE 30002
#undef CONFIG_ANDROID_RESERVED_MEMORY_ACCOUNT
/******************************************************************************\
********************************* Command Codes ********************************
\******************************************************************************/
typedef enum _gceHAL_COMMAND_CODES
{
/* Generic query. */
gcvHAL_QUERY_VIDEO_MEMORY,
gcvHAL_QUERY_CHIP_IDENTITY,
/* Contiguous memory. */
gcvHAL_ALLOCATE_NON_PAGED_MEMORY,
gcvHAL_FREE_NON_PAGED_MEMORY,
gcvHAL_ALLOCATE_CONTIGUOUS_MEMORY,
gcvHAL_FREE_CONTIGUOUS_MEMORY,
/* Video memory allocation. */
gcvHAL_ALLOCATE_VIDEO_MEMORY, /* Enforced alignment. */
gcvHAL_ALLOCATE_LINEAR_VIDEO_MEMORY, /* No alignment. */
gcvHAL_RELEASE_VIDEO_MEMORY,
/* Physical-to-logical mapping. */
gcvHAL_MAP_MEMORY,
gcvHAL_UNMAP_MEMORY,
/* Logical-to-physical mapping. */
gcvHAL_MAP_USER_MEMORY,
gcvHAL_UNMAP_USER_MEMORY,
/* Surface lock/unlock. */
gcvHAL_LOCK_VIDEO_MEMORY,
gcvHAL_UNLOCK_VIDEO_MEMORY,
/* Event queue. */
gcvHAL_EVENT_COMMIT,
gcvHAL_USER_SIGNAL,
gcvHAL_SIGNAL,
gcvHAL_WRITE_DATA,
gcvHAL_COMMIT,
gcvHAL_STALL,
gcvHAL_READ_REGISTER,
gcvHAL_WRITE_REGISTER,
gcvHAL_GET_PROFILE_SETTING,
gcvHAL_SET_PROFILE_SETTING,
gcvHAL_READ_ALL_PROFILE_REGISTERS,
gcvHAL_PROFILE_REGISTERS_2D,
#if VIVANTE_PROFILER_PERDRAW
gcvHAL_READ_PROFILER_REGISTER_SETTING,
#endif
/* Power management. */
gcvHAL_SET_POWER_MANAGEMENT_STATE,
gcvHAL_QUERY_POWER_MANAGEMENT_STATE,
gcvHAL_GET_BASE_ADDRESS,
gcvHAL_SET_IDLE, /* reserved */
/* Queries. */
gcvHAL_QUERY_KERNEL_SETTINGS,
/* Reset. */
gcvHAL_RESET,
/* Map physical address into handle. */
gcvHAL_MAP_PHYSICAL,
/* Debugger stuff. */
gcvHAL_DEBUG,
/* Cache stuff. */
gcvHAL_CACHE,
/* TimeStamp */
gcvHAL_TIMESTAMP,
/* Database. */
gcvHAL_DATABASE,
/* Version. */
gcvHAL_VERSION,
/* Chip info */
gcvHAL_CHIP_INFO,
/* Process attaching/detaching. */
gcvHAL_ATTACH,
gcvHAL_DETACH,
/* Composition. */
gcvHAL_COMPOSE,
/* Set timeOut value */
gcvHAL_SET_TIMEOUT,
/* Frame database. */
gcvHAL_GET_FRAME_INFO,
gcvHAL_QUERY_COMMAND_BUFFER,
gcvHAL_COMMIT_DONE,
/* GPU and event dump */
gcvHAL_DUMP_GPU_STATE,
gcvHAL_DUMP_EVENT,
/* Virtual command buffer. */
gcvHAL_ALLOCATE_VIRTUAL_COMMAND_BUFFER,
gcvHAL_FREE_VIRTUAL_COMMAND_BUFFER,
/* FSCALE_VAL. */
gcvHAL_SET_FSCALE_VALUE,
gcvHAL_GET_FSCALE_VALUE,
gcvHAL_NAME_VIDEO_MEMORY,
gcvHAL_IMPORT_VIDEO_MEMORY,
/* Reset time stamp. */
gcvHAL_QUERY_RESET_TIME_STAMP,
/* Multi-GPU read/write. */
gcvHAL_READ_REGISTER_EX,
gcvHAL_WRITE_REGISTER_EX,
/* Sync point operations. */
gcvHAL_SYNC_POINT,
/* Create native fence and return its fd. */
gcvHAL_CREATE_NATIVE_FENCE,
/* Destory MMU. */
gcvHAL_DESTROY_MMU,
/* Shared buffer. */
gcvHAL_SHBUF,
/* Config power management. */
gcvHAL_CONFIG_POWER_MANAGEMENT,
/* Connect a video node to an OS native fd. */
gcvHAL_GET_VIDEO_MEMORY_FD,
}
gceHAL_COMMAND_CODES;
/******************************************************************************\
****************************** Interface Structure *****************************
\******************************************************************************/
#define gcdMAX_PROFILE_FILE_NAME 128
/* Kernel settings. */
typedef struct _gcsKERNEL_SETTINGS
{
/* Used RealTime signal between kernel and user. */
gctINT signal;
}
gcsKERNEL_SETTINGS;
/* gcvHAL_QUERY_CHIP_IDENTITY */
typedef struct _gcsHAL_QUERY_CHIP_IDENTITY * gcsHAL_QUERY_CHIP_IDENTITY_PTR;
typedef struct _gcsHAL_QUERY_CHIP_IDENTITY
{
/* Chip model. */
gceCHIPMODEL chipModel;
/* Revision value.*/
gctUINT32 chipRevision;
/* Supported feature fields. */
gctUINT32 chipFeatures;
/* Supported minor feature fields. */
gctUINT32 chipMinorFeatures;
/* Supported minor feature 1 fields. */
gctUINT32 chipMinorFeatures1;
/* Supported minor feature 2 fields. */
gctUINT32 chipMinorFeatures2;
/* Supported minor feature 3 fields. */
gctUINT32 chipMinorFeatures3;
/* Supported minor feature 4 fields. */
gctUINT32 chipMinorFeatures4;
/* Supported minor feature 5 fields. */
gctUINT32 chipMinorFeatures5;
/* Number of streams supported. */
gctUINT32 streamCount;
/* Total number of temporary registers per thread. */
gctUINT32 registerMax;
/* Maximum number of threads. */
gctUINT32 threadCount;
/* Number of shader cores. */
gctUINT32 shaderCoreCount;
/* Size of the vertex cache. */
gctUINT32 vertexCacheSize;
/* Number of entries in the vertex output buffer. */
gctUINT32 vertexOutputBufferSize;
/* Number of pixel pipes. */
gctUINT32 pixelPipes;
/* Number of instructions. */
gctUINT32 instructionCount;
/* Number of constants. */
gctUINT32 numConstants;
/* Buffer size */
gctUINT32 bufferSize;
/* Number of varyings */
gctUINT32 varyingsCount;
/* Supertile layout style in hardware */
gctUINT32 superTileMode;
#if gcdMULTI_GPU
/* Number of 3D GPUs */
gctUINT32 gpuCoreCount;
#endif
/* Special control bits for 2D chip. */
gctUINT32 chip2DControl;
/* Product ID */
gctUINT32 productID;
}
gcsHAL_QUERY_CHIP_IDENTITY;
/* gcvHAL_COMPOSE. */
typedef struct _gcsHAL_COMPOSE * gcsHAL_COMPOSE_PTR;
typedef struct _gcsHAL_COMPOSE
{
/* Composition state buffer. */
gctUINT64 physical;
gctUINT64 logical;
gctUINT offset;
gctUINT size;
/* Composition end signal. */
gctUINT64 process;
gctUINT64 signal;
/* User signals. */
gctUINT64 userProcess;
gctUINT64 userSignal1;
gctUINT64 userSignal2;
#if defined(__QNXNTO__)
/* Client pulse side-channel connection ID. */
gctINT32 coid;
/* Set by server. */
gctINT32 rcvid;
#endif
}
gcsHAL_COMPOSE;
typedef struct _gcsHAL_INTERFACE
{
/* Command code. */
gceHAL_COMMAND_CODES command;
/* Hardware type. */
gceHARDWARE_TYPE hardwareType;
/* Status value. */
gceSTATUS status;
/* Handle to this interface channel. */
gctUINT64 handle;
/* Pid of the client. */
gctUINT32 pid;
/* Union of command structures. */
union _u
{
/* gcvHAL_GET_BASE_ADDRESS */
struct _gcsHAL_GET_BASE_ADDRESS
{
/* Physical memory address of internal memory. */
OUT gctUINT32 baseAddress;
}
GetBaseAddress;
/* gcvHAL_QUERY_VIDEO_MEMORY */
struct _gcsHAL_QUERY_VIDEO_MEMORY
{
/* Physical memory address of internal memory. Just a name. */
OUT gctUINT32 internalPhysical;
/* Size in bytes of internal memory. */
OUT gctUINT64 internalSize;
/* Physical memory address of external memory. Just a name. */
OUT gctUINT32 externalPhysical;
/* Size in bytes of external memory.*/
OUT gctUINT64 externalSize;
/* Physical memory address of contiguous memory. Just a name. */
OUT gctUINT32 contiguousPhysical;
/* Size in bytes of contiguous memory.*/
OUT gctUINT64 contiguousSize;
}
QueryVideoMemory;
/* gcvHAL_QUERY_CHIP_IDENTITY */
gcsHAL_QUERY_CHIP_IDENTITY QueryChipIdentity;
/* gcvHAL_MAP_MEMORY */
struct _gcsHAL_MAP_MEMORY
{
/* Physical memory address to map. Just a name on Linux/Qnx. */
IN gctUINT32 physical;
/* Number of bytes in physical memory to map. */
IN gctUINT64 bytes;
/* Address of mapped memory. */
OUT gctUINT64 logical;
}
MapMemory;
/* gcvHAL_UNMAP_MEMORY */
struct _gcsHAL_UNMAP_MEMORY
{
/* Physical memory address to unmap. Just a name on Linux/Qnx. */
IN gctUINT32 physical;
/* Number of bytes in physical memory to unmap. */
IN gctUINT64 bytes;
/* Address of mapped memory to unmap. */
IN gctUINT64 logical;
}
UnmapMemory;
/* gcvHAL_ALLOCATE_LINEAR_VIDEO_MEMORY */
struct _gcsHAL_ALLOCATE_LINEAR_VIDEO_MEMORY
{
/* Number of bytes to allocate. */
IN OUT gctUINT bytes;
/* Buffer alignment. */
IN gctUINT alignment;
/* Type of allocation. */
IN gceSURF_TYPE type;
/* Flag of allocation. */
IN gctUINT32 flag;
/* Memory pool to allocate from. */
IN OUT gcePOOL pool;
/* Allocated video memory. */
OUT gctUINT32 node;
}
AllocateLinearVideoMemory;
/* gcvHAL_ALLOCATE_VIDEO_MEMORY */
struct _gcsHAL_ALLOCATE_VIDEO_MEMORY
{
/* Width of rectangle to allocate. */
IN OUT gctUINT width;
/* Height of rectangle to allocate. */
IN OUT gctUINT height;
/* Depth of rectangle to allocate. */
IN gctUINT depth;
/* Format rectangle to allocate in gceSURF_FORMAT. */
IN gceSURF_FORMAT format;
/* Type of allocation. */
IN gceSURF_TYPE type;
/* Memory pool to allocate from. */
IN OUT gcePOOL pool;
/* Allocated video memory. */
OUT gctUINT32 node;
}
AllocateVideoMemory;
/* gcvHAL_RELEASE_VIDEO_MEMORY */
struct _gcsHAL_RELEASE_VIDEO_MEMORY
{
/* Allocated video memory. */
IN gctUINT32 node;
#ifdef __QNXNTO__
/* TODO: This is part of the unlock - why is it here? */
/* Mapped logical address to unmap in user space. */
OUT gctUINT64 memory;
/* Number of bytes to allocated. */
OUT gctUINT64 bytes;
#endif
}
ReleaseVideoMemory;
/* gcvHAL_LOCK_VIDEO_MEMORY */
struct _gcsHAL_LOCK_VIDEO_MEMORY
{
/* Allocated video memory. */
IN gctUINT32 node;
/* Cache configuration. */
/* Only gcvPOOL_CONTIGUOUS and gcvPOOL_VIRUTAL
** can be configured */
IN gctBOOL cacheable;
/* Hardware specific address. */
OUT gctUINT32 address;
/* Mapped logical address. */
OUT gctUINT64 memory;
/* Customer priviate handle*/
OUT gctUINT32 gid;
/* Bus address of a contiguous video node. */
OUT gctUINT64 physicalAddress;
}
LockVideoMemory;
/* gcvHAL_UNLOCK_VIDEO_MEMORY */
struct _gcsHAL_UNLOCK_VIDEO_MEMORY
{
/* Allocated video memory. */
IN gctUINT64 node;
/* Type of surface. */
IN gceSURF_TYPE type;
/* Flag to unlock surface asynchroneously. */
IN OUT gctBOOL asynchroneous;
}
UnlockVideoMemory;
/* gcvHAL_ALLOCATE_NON_PAGED_MEMORY */
struct _gcsHAL_ALLOCATE_NON_PAGED_MEMORY
{
/* Number of bytes to allocate. */
IN OUT gctUINT64 bytes;
/* Physical address of allocation. Just a name. */
OUT gctUINT32 physical;
/* Logical address of allocation. */
OUT gctUINT64 logical;
}
AllocateNonPagedMemory;
/* gcvHAL_FREE_NON_PAGED_MEMORY */
struct _gcsHAL_FREE_NON_PAGED_MEMORY
{
/* Number of bytes allocated. */
IN gctUINT64 bytes;
/* Physical address of allocation. Just a name. */
IN gctUINT32 physical;
/* Logical address of allocation. */
IN gctUINT64 logical;
}
FreeNonPagedMemory;
/* gcvHAL_ALLOCATE_NON_PAGED_MEMORY */
struct _gcsHAL_ALLOCATE_VIRTUAL_COMMAND_BUFFER
{
/* Number of bytes to allocate. */
IN OUT gctUINT64 bytes;
/* Physical address of allocation. Just a name. */
OUT gctUINT32 physical;
/* Logical address of allocation. */
OUT gctUINT64 logical;
}
AllocateVirtualCommandBuffer;
/* gcvHAL_FREE_NON_PAGED_MEMORY */
struct _gcsHAL_FREE_VIRTUAL_COMMAND_BUFFER
{
/* Number of bytes allocated. */
IN gctUINT64 bytes;
/* Physical address of allocation. Just a name. */
IN gctUINT32 physical;
/* Logical address of allocation. */
IN gctUINT64 logical;
}
FreeVirtualCommandBuffer;
/* gcvHAL_EVENT_COMMIT. */
struct _gcsHAL_EVENT_COMMIT
{
/* Event queue in gcsQUEUE. */
IN gctUINT64 queue;
#if gcdMULTI_GPU
IN gceCORE_3D_MASK chipEnable;
IN gceMULTI_GPU_MODE gpuMode;
#endif
}
Event;
/* gcvHAL_COMMIT */
struct _gcsHAL_COMMIT
{
/* Context buffer object gckCONTEXT. */
IN gctUINT64 context;
/* Command buffer gcoCMDBUF. */
IN gctUINT64 commandBuffer;
/* State delta buffer in gcsSTATE_DELTA. */
gctUINT64 delta;
/* Event queue in gcsQUEUE. */
IN gctUINT64 queue;
#if gcdMULTI_GPU
IN gceCORE_3D_MASK chipEnable;
IN gceMULTI_GPU_MODE gpuMode;
#endif
}
Commit;
/* gcvHAL_MAP_USER_MEMORY */
struct _gcsHAL_MAP_USER_MEMORY
{
/* Base address of user memory to map. */
IN gctUINT64 memory;
/* Physical address of user memory to map. */
IN gctUINT32 physical;
/* Size of user memory in bytes to map. */
IN gctUINT64 size;
/* Info record required by gcvHAL_UNMAP_USER_MEMORY. Just a name. */
OUT gctUINT32 info;
/* Physical address of mapped memory. */
OUT gctUINT32 address;
}
MapUserMemory;
/* gcvHAL_UNMAP_USER_MEMORY */
struct _gcsHAL_UNMAP_USER_MEMORY
{
/* Base address of user memory to unmap. */
IN gctUINT64 memory;
/* Size of user memory in bytes to unmap. */
IN gctUINT64 size;
/* Info record returned by gcvHAL_MAP_USER_MEMORY. Just a name. */
IN gctUINT32 info;
/* Physical address of mapped memory as returned by
gcvHAL_MAP_USER_MEMORY. */
IN gctUINT32 address;
}
UnmapUserMemory;
#if !USE_NEW_LINUX_SIGNAL
/* gcsHAL_USER_SIGNAL */
struct _gcsHAL_USER_SIGNAL
{
/* Command. */
gceUSER_SIGNAL_COMMAND_CODES command;
/* Signal ID. */
IN OUT gctINT id;
/* Reset mode. */
IN gctBOOL manualReset;
/* Wait timedout. */
IN gctUINT32 wait;
/* State. */
IN gctBOOL state;
}
UserSignal;
#endif
/* gcvHAL_SIGNAL. */
struct _gcsHAL_SIGNAL
{
/* Signal handle to signal gctSIGNAL. */
IN gctUINT64 signal;
/* Reserved gctSIGNAL. */
IN gctUINT64 auxSignal;
/* Process owning the signal gctHANDLE. */
IN gctUINT64 process;
#if defined(__QNXNTO__)
/* Client pulse side-channel connection ID. Set by client in gcoOS_CreateSignal. */
IN gctINT32 coid;
/* Set by server. */
IN gctINT32 rcvid;
#endif
/* Event generated from where of pipeline */
IN gceKERNEL_WHERE fromWhere;
}
Signal;
/* gcvHAL_WRITE_DATA. */
struct _gcsHAL_WRITE_DATA
{
/* Address to write data to. */
IN gctUINT32 address;
/* Data to write. */
IN gctUINT32 data;
}
WriteData;
/* gcvHAL_ALLOCATE_CONTIGUOUS_MEMORY */
struct _gcsHAL_ALLOCATE_CONTIGUOUS_MEMORY
{
/* Number of bytes to allocate. */
IN OUT gctUINT64 bytes;
/* Hardware address of allocation. */
OUT gctUINT32 address;
/* Physical address of allocation. Just a name. */
OUT gctUINT32 physical;
/* Logical address of allocation. */
OUT gctUINT64 logical;
}
AllocateContiguousMemory;
/* gcvHAL_FREE_CONTIGUOUS_MEMORY */
struct _gcsHAL_FREE_CONTIGUOUS_MEMORY
{
/* Number of bytes allocated. */
IN gctUINT64 bytes;
/* Physical address of allocation. Just a name. */
IN gctUINT32 physical;
/* Logical address of allocation. */
IN gctUINT64 logical;
}
FreeContiguousMemory;
/* gcvHAL_READ_REGISTER */
struct _gcsHAL_READ_REGISTER
{
/* Logical address of memory to write data to. */
IN gctUINT32 address;
/* Data read. */
OUT gctUINT32 data;
}
ReadRegisterData;
/* gcvHAL_WRITE_REGISTER */
struct _gcsHAL_WRITE_REGISTER
{
/* Logical address of memory to write data to. */
IN gctUINT32 address;
/* Data read. */
IN gctUINT32 data;
}
WriteRegisterData;
#if gcdMULTI_GPU
/* gcvHAL_READ_REGISTER_EX */
struct _gcsHAL_READ_REGISTER_EX
{
/* Logical address of memory to write data to. */
IN gctUINT32 address;
IN gctUINT32 coreSelect;
/* Data read. */
OUT gctUINT32 data[gcdMULTI_GPU];
}
ReadRegisterDataEx;
/* gcvHAL_WRITE_REGISTER_EX */
struct _gcsHAL_WRITE_REGISTER_EX
{
/* Logical address of memory to write data to. */
IN gctUINT32 address;
IN gctUINT32 coreSelect;
/* Data read. */
IN gctUINT32 data[gcdMULTI_GPU];
}
WriteRegisterDataEx;
#endif
#if VIVANTE_PROFILER
/* gcvHAL_GET_PROFILE_SETTING */
struct _gcsHAL_GET_PROFILE_SETTING
{
/* Enable profiling */
OUT gctBOOL enable;
}
GetProfileSetting;
/* gcvHAL_SET_PROFILE_SETTING */
struct _gcsHAL_SET_PROFILE_SETTING
{
/* Enable profiling */
IN gctBOOL enable;
}
SetProfileSetting;
#if VIVANTE_PROFILER_PERDRAW
/* gcvHAL_READ_PROFILER_REGISTER_SETTING */
struct _gcsHAL_READ_PROFILER_REGISTER_SETTING
{
/*Should Clear Register*/
IN gctBOOL bclear;
}
SetProfilerRegisterClear;
#endif
/* gcvHAL_READ_ALL_PROFILE_REGISTERS */
struct _gcsHAL_READ_ALL_PROFILE_REGISTERS
{
#if VIVANTE_PROFILER_CONTEXT
/* Context buffer object gckCONTEXT. Just a name. */
IN gctUINT32 context;
#endif
/* Data read. */
OUT gcsPROFILER_COUNTERS counters;
}
RegisterProfileData;
/* gcvHAL_PROFILE_REGISTERS_2D */
struct _gcsHAL_PROFILE_REGISTERS_2D
{
/* Data read in gcs2D_PROFILE. */
OUT gctUINT64 hwProfile2D;
}
RegisterProfileData2D;
#endif
/* Power management. */
/* gcvHAL_SET_POWER_MANAGEMENT_STATE */
struct _gcsHAL_SET_POWER_MANAGEMENT
{
/* Data read. */
IN gceCHIPPOWERSTATE state;
}
SetPowerManagement;
/* gcvHAL_QUERY_POWER_MANAGEMENT_STATE */
struct _gcsHAL_QUERY_POWER_MANAGEMENT
{
/* Data read. */
OUT gceCHIPPOWERSTATE state;
/* Idle query. */
OUT gctBOOL isIdle;
}
QueryPowerManagement;
/* gcvHAL_QUERY_KERNEL_SETTINGS */
struct _gcsHAL_QUERY_KERNEL_SETTINGS
{
/* Settings.*/
OUT gcsKERNEL_SETTINGS settings;
}
QueryKernelSettings;
/* gcvHAL_MAP_PHYSICAL */
struct _gcsHAL_MAP_PHYSICAL
{
/* gcvTRUE to map, gcvFALSE to unmap. */
IN gctBOOL map;
/* Physical address. */
IN OUT gctUINT64 physical;
}
MapPhysical;
/* gcvHAL_DEBUG */
struct _gcsHAL_DEBUG
{
/* If gcvTRUE, set the debug information. */
IN gctBOOL set;
IN gctUINT32 level;
IN gctUINT32 zones;
IN gctBOOL enable;
IN gceDEBUG_MESSAGE_TYPE type;
IN gctUINT32 messageSize;
/* Message to print if not empty. */
IN gctCHAR message[80];
}
Debug;
/* gcvHAL_CACHE */
struct _gcsHAL_CACHE
{
IN gceCACHEOPERATION operation;
IN gctUINT64 process;
IN gctUINT64 logical;
IN gctUINT64 bytes;
IN gctUINT32 node;
}
Cache;
/* gcvHAL_TIMESTAMP */
struct _gcsHAL_TIMESTAMP
{
/* Timer select. */
IN gctUINT32 timer;
/* Timer request type (0-stop, 1-start, 2-send delta). */
IN gctUINT32 request;
/* Result of delta time in microseconds. */
OUT gctINT32 timeDelta;
}
TimeStamp;
/* gcvHAL_DATABASE */
struct _gcsHAL_DATABASE
{
/* Set to gcvTRUE if you want to query a particular process ID.
** Set to gcvFALSE to query the last detached process. */
IN gctBOOL validProcessID;
/* Process ID to query. */
IN gctUINT32 processID;
/* Information. */
OUT gcuDATABASE_INFO vidMem;
OUT gcuDATABASE_INFO nonPaged;
OUT gcuDATABASE_INFO contiguous;
OUT gcuDATABASE_INFO gpuIdle;
/* Detail information about video memory. */
OUT gcuDATABASE_INFO vidMemPool[3];
}
Database;
/* gcvHAL_VERSION */
struct _gcsHAL_VERSION
{
/* Major version: N.n.n. */
OUT gctINT32 major;
/* Minor version: n.N.n. */
OUT gctINT32 minor;
/* Patch version: n.n.N. */
OUT gctINT32 patch;
/* Build version. */
OUT gctUINT32 build;
}
Version;
/* gcvHAL_CHIP_INFO */
struct _gcsHAL_CHIP_INFO
{
/* Chip count. */
OUT gctINT32 count;
/* Chip types. */
OUT gceHARDWARE_TYPE types[gcdCHIP_COUNT];
}
ChipInfo;
/* gcvHAL_ATTACH */
struct _gcsHAL_ATTACH
{
/* Handle of context buffer object. */
OUT gctUINT32 context;
/* Number of states in the buffer. */
OUT gctUINT64 stateCount;
/* Map context buffer to user or not. */
IN gctBOOL map;
/* Physical of context buffer. */
OUT gctUINT32 physicals[2];
/* Physical of context buffer. */
OUT gctUINT64 logicals[2];
/* Bytes of context buffer. */
OUT gctUINT32 bytes;
}
Attach;
/* gcvHAL_DETACH */
struct _gcsHAL_DETACH
{
/* Context buffer object gckCONTEXT. Just a name. */
IN gctUINT32 context;
}
Detach;
/* gcvHAL_COMPOSE. */
gcsHAL_COMPOSE Compose;
/* gcvHAL_GET_FRAME_INFO. */
struct _gcsHAL_GET_FRAME_INFO
{
/* gcsHAL_FRAME_INFO* */
OUT gctUINT64 frameInfo;
}
GetFrameInfo;
/* gcvHAL_SET_TIME_OUT. */
struct _gcsHAL_SET_TIMEOUT
{
gctUINT32 timeOut;
}
SetTimeOut;
#if gcdENABLE_VG
/* gcvHAL_COMMIT */
struct _gcsHAL_VGCOMMIT
{
/* Context buffer. gcsVGCONTEXT_PTR */
IN gctUINT64 context;
/* Command queue. gcsVGCMDQUEUE_PTR */
IN gctUINT64 queue;
/* Number of entries in the queue. */
IN gctUINT entryCount;
/* Task table. gcsTASK_MASTER_TABLE_PTR */
IN gctUINT64 taskTable;
}
VGCommit;
/* gcvHAL_QUERY_COMMAND_BUFFER */
struct _gcsHAL_QUERY_COMMAND_BUFFER
{
/* Command buffer attributes. */
OUT gcsCOMMAND_BUFFER_INFO information;
}
QueryCommandBuffer;
#endif
struct _gcsHAL_SET_FSCALE_VALUE
{
IN gctUINT value;
}
SetFscaleValue;
struct _gcsHAL_GET_FSCALE_VALUE
{
OUT gctUINT value;
OUT gctUINT minValue;
OUT gctUINT maxValue;
}
GetFscaleValue;
struct _gcsHAL_NAME_VIDEO_MEMORY
{
IN gctUINT32 handle;
OUT gctUINT32 name;
}
NameVideoMemory;
struct _gcsHAL_IMPORT_VIDEO_MEMORY
{
IN gctUINT32 name;
OUT gctUINT32 handle;
}
ImportVideoMemory;
struct _gcsHAL_QUERY_RESET_TIME_STAMP
{
OUT gctUINT64 timeStamp;
}
QueryResetTimeStamp;
struct _gcsHAL_SYNC_POINT
{
/* Command. */
gceSYNC_POINT_COMMAND_CODES command;
/* Sync point. */
IN OUT gctUINT64 syncPoint;
/* From where. */
IN gceKERNEL_WHERE fromWhere;
/* Signaled state. */
OUT gctBOOL state;
}
SyncPoint;
struct _gcsHAL_CREATE_NATIVE_FENCE
{
/* Signal id to dup. */
IN gctUINT64 syncPoint;
/* Native fence file descriptor. */
OUT gctINT fenceFD;
}
CreateNativeFence;
struct _gcsHAL_DESTROY_MMU
{
/* Mmu object. */
IN gctUINT64 mmu;
}
DestroyMmu;
struct _gcsHAL_SHBUF
{
gceSHBUF_COMMAND_CODES command;
/* Shared buffer. */
IN OUT gctUINT64 id;
/* User data to be shared. */
IN gctUINT64 data;
/* Data size. */
IN OUT gctUINT32 bytes;
}
ShBuf;
struct _gcsHAL_CONFIG_POWER_MANAGEMENT
{
IN gctBOOL enable;
}
ConfigPowerManagement;
struct _gcsHAL_GET_VIDEO_MEMORY_FD
{
IN gctUINT32 handle;
OUT gctINT fd;
}
GetVideoMemoryFd;
}
u;
}
gcsHAL_INTERFACE;
#ifdef __cplusplus
}
#endif
#endif /* __gc_hal_driver_h_ */