diff options
Diffstat (limited to 'drivers/mxc/amd-gpu/include/api/gsl_types.h')
-rw-r--r-- | drivers/mxc/amd-gpu/include/api/gsl_types.h | 478 |
1 files changed, 478 insertions, 0 deletions
diff --git a/drivers/mxc/amd-gpu/include/api/gsl_types.h b/drivers/mxc/amd-gpu/include/api/gsl_types.h new file mode 100644 index 000000000000..99f389deee84 --- /dev/null +++ b/drivers/mxc/amd-gpu/include/api/gsl_types.h @@ -0,0 +1,478 @@ +/* Copyright (c) 2008-2010, Code Aurora Forum. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Code Aurora Forum nor + * the names of its contributors may be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef __GSL_TYPES_H +#define __GSL_TYPES_H + +#include "stddef.h" + + +////////////////////////////////////////////////////////////////////////////// +// status +////////////////////////////////////////////////////////////////////////////// +#define GSL_SUCCESS OS_SUCCESS +#define GSL_FAILURE OS_FAILURE +#define GSL_FAILURE_SYSTEMERROR OS_FAILURE_SYSTEMERROR +#define GSL_FAILURE_DEVICEERROR OS_FAILURE_DEVICEERROR +#define GSL_FAILURE_OUTOFMEM OS_FAILURE_OUTOFMEM +#define GSL_FAILURE_BADPARAM OS_FAILURE_BADPARAM +#define GSL_FAILURE_OFFSETINVALID OS_FAILURE_OFFSETINVALID +#define GSL_FAILURE_NOTSUPPORTED OS_FAILURE_NOTSUPPORTED +#define GSL_FAILURE_NOMOREAVAILABLE OS_FAILURE_NOMOREAVAILABLE +#define GSL_FAILURE_NOTINITIALIZED OS_FAILURE_NOTINITIALIZED +#define GSL_FAILURE_ALREADYINITIALIZED OS_FAILURE_ALREADYINITIALIZED +#define GSL_FAILURE_TIMEOUT OS_FAILURE_TIMEOUT + + +////////////////////////////////////////////////////////////////////////////// +// memory allocation flags +////////////////////////////////////////////////////////////////////////////// +#define GSL_MEMFLAGS_ANY 0x00000000 // dont care + +#define GSL_MEMFLAGS_CHANNELANY 0x00000000 +#define GSL_MEMFLAGS_CHANNEL1 0x00000000 +#define GSL_MEMFLAGS_CHANNEL2 0x00000001 +#define GSL_MEMFLAGS_CHANNEL3 0x00000002 +#define GSL_MEMFLAGS_CHANNEL4 0x00000003 + +#define GSL_MEMFLAGS_BANKANY 0x00000000 +#define GSL_MEMFLAGS_BANK1 0x00000010 +#define GSL_MEMFLAGS_BANK2 0x00000020 +#define GSL_MEMFLAGS_BANK3 0x00000040 +#define GSL_MEMFLAGS_BANK4 0x00000080 + +#define GSL_MEMFLAGS_DIRANY 0x00000000 +#define GSL_MEMFLAGS_DIRTOP 0x00000100 +#define GSL_MEMFLAGS_DIRBOT 0x00000200 + +#define GSL_MEMFLAGS_APERTUREANY 0x00000000 +#define GSL_MEMFLAGS_EMEM 0x00000000 +#define GSL_MEMFLAGS_CONPHYS 0x00001000 + +#define GSL_MEMFLAGS_ALIGNANY 0x00000000 // minimum alignment is 32 bytes +#define GSL_MEMFLAGS_ALIGN32 0x00000000 +#define GSL_MEMFLAGS_ALIGN64 0x00060000 +#define GSL_MEMFLAGS_ALIGN128 0x00070000 +#define GSL_MEMFLAGS_ALIGN256 0x00080000 +#define GSL_MEMFLAGS_ALIGN512 0x00090000 +#define GSL_MEMFLAGS_ALIGN1K 0x000A0000 +#define GSL_MEMFLAGS_ALIGN2K 0x000B0000 +#define GSL_MEMFLAGS_ALIGN4K 0x000C0000 +#define GSL_MEMFLAGS_ALIGN8K 0x000D0000 +#define GSL_MEMFLAGS_ALIGN16K 0x000E0000 +#define GSL_MEMFLAGS_ALIGN32K 0x000F0000 +#define GSL_MEMFLAGS_ALIGN64K 0x00100000 +#define GSL_MEMFLAGS_ALIGNPAGE GSL_MEMFLAGS_ALIGN4K + +#define GSL_MEMFLAGS_GPUREADWRITE 0x00000000 +#define GSL_MEMFLAGS_GPUREADONLY 0x01000000 +#define GSL_MEMFLAGS_GPUWRITEONLY 0x02000000 +#define GSL_MEMFLAGS_GPUNOACCESS 0x04000000 + +#define GSL_MEMFLAGS_FORCEPAGESIZE 0x40000000 +#define GSL_MEMFLAGS_STRICTREQUEST 0x80000000 // fail the alloc if the flags cannot be honored + +#define GSL_MEMFLAGS_CHANNEL_MASK 0x0000000F +#define GSL_MEMFLAGS_BANK_MASK 0x000000F0 +#define GSL_MEMFLAGS_DIR_MASK 0x00000F00 +#define GSL_MEMFLAGS_APERTURE_MASK 0x0000F000 +#define GSL_MEMFLAGS_ALIGN_MASK 0x00FF0000 +#define GSL_MEMFLAGS_GPUAP_MASK 0x0F000000 + +#define GSL_MEMFLAGS_CHANNEL_SHIFT 0 +#define GSL_MEMFLAGS_BANK_SHIFT 4 +#define GSL_MEMFLAGS_DIR_SHIFT 8 +#define GSL_MEMFLAGS_APERTURE_SHIFT 12 +#define GSL_MEMFLAGS_ALIGN_SHIFT 16 +#define GSL_MEMFLAGS_GPUAP_SHIFT 24 + + +////////////////////////////////////////////////////////////////////////////// +// debug flags +////////////////////////////////////////////////////////////////////////////// +#define GSL_DBGFLAGS_ALL 0xFFFFFFFF +#define GSL_DBGFLAGS_DEVICE 0x00000001 +#define GSL_DBGFLAGS_CTXT 0x00000002 +#define GSL_DBGFLAGS_MEMMGR 0x00000004 +#define GSL_DBGFLAGS_MMU 0x00000008 +#define GSL_DBGFLAGS_POWER 0x00000010 +#define GSL_DBGFLAGS_IRQ 0x00000020 +#define GSL_DBGFLAGS_BIST 0x00000040 +#define GSL_DBGFLAGS_PM4 0x00000080 +#define GSL_DBGFLAGS_PM4MEM 0x00000100 +#define GSL_DBGFLAGS_PM4CHECK 0x00000200 +#define GSL_DBGFLAGS_DUMPX 0x00000400 +#define GSL_DBGFLAGS_DUMPX_WITHOUT_IFH 0x00000800 +#define GSL_DBGFLAGS_IFH 0x00001000 +#define GSL_DBGFLAGS_NULL 0x00002000 + + +////////////////////////////////////////////////////////////////////////////// +// generic flag values +////////////////////////////////////////////////////////////////////////////// +#define GSL_FLAGS_NORMALMODE 0x00000000 +#define GSL_FLAGS_SAFEMODE 0x00000001 +#define GSL_FLAGS_INITIALIZED0 0x00000002 +#define GSL_FLAGS_INITIALIZED 0x00000004 +#define GSL_FLAGS_STARTED 0x00000008 +#define GSL_FLAGS_ACTIVE 0x00000010 +#define GSL_FLAGS_RESERVED0 0x00000020 +#define GSL_FLAGS_RESERVED1 0x00000040 +#define GSL_FLAGS_RESERVED2 0x00000080 + + +////////////////////////////////////////////////////////////////////////////// +// power flags +////////////////////////////////////////////////////////////////////////////// +#define GSL_PWRFLAGS_POWER_OFF 0x00000001 +#define GSL_PWRFLAGS_POWER_ON 0x00000002 +#define GSL_PWRFLAGS_CLK_ON 0x00000004 +#define GSL_PWRFLAGS_CLK_OFF 0x00000008 +#define GSL_PWRFLAGS_OVERRIDE_ON 0x00000010 +#define GSL_PWRFLAGS_OVERRIDE_OFF 0x00000020 + +////////////////////////////////////////////////////////////////////////////// +// DMI flags +////////////////////////////////////////////////////////////////////////////// +#define GSL_DMIFLAGS_ENABLE_SINGLE 0x00000001 // Single buffered DMI +#define GSL_DMIFLAGS_ENABLE_DOUBLE 0x00000002 // Double buffered DMI +#define GSL_DMIFLAGS_ENABLE_TRIPLE 0x00000004 // Triple buffered DMI +#define GSL_DMIFLAGS_DISABLE 0x00000008 +#define GSL_DMIFLAGS_NEXT_BUFFER 0x00000010 + +////////////////////////////////////////////////////////////////////////////// +// cache flags +////////////////////////////////////////////////////////////////////////////// +#define GSL_CACHEFLAGS_CLEAN 0x00000001 /* flush cache */ +#define GSL_CACHEFLAGS_INVALIDATE 0x00000002 /* invalidate cache */ +#define GSL_CACHEFLAGS_WRITECLEAN 0x00000004 /* flush write cache */ + + +////////////////////////////////////////////////////////////////////////////// +// context +////////////////////////////////////////////////////////////////////////////// +#define GSL_CONTEXT_MAX 20 +#define GSL_CONTEXT_NONE 0 +#define GSL_CONTEXT_SAVE_GMEM 1 +#define GSL_CONTEXT_NO_GMEM_ALLOC 2 + + +////////////////////////////////////////////////////////////////////////////// +// other +////////////////////////////////////////////////////////////////////////////// +#define GSL_TIMEOUT_NONE 0 +#define GSL_TIMEOUT_DEFAULT 0xFFFFFFFF + +#ifdef _LINUX +#define GSL_PAGESIZE PAGE_SIZE +#define GSL_PAGESIZE_SHIFT PAGE_SHIFT +#else +#define GSL_PAGESIZE 0x1000 +#define GSL_PAGESIZE_SHIFT 12 +#endif + +////////////////////////////////////////////////////////////////////////////// +// types +////////////////////////////////////////////////////////////////////////////// +typedef unsigned int gsl_devhandle_t; +typedef unsigned int gsl_ctxthandle_t; +typedef int gsl_timestamp_t; +typedef unsigned int gsl_flags_t; +typedef unsigned int gpuaddr_t; + +// --------- +// device id +// --------- +typedef enum _gsl_deviceid_t +{ + GSL_DEVICE_ANY = 0, + GSL_DEVICE_YAMATO = 1, + GSL_DEVICE_G12 = 2, + GSL_DEVICE_MAX = 2, + + GSL_DEVICE_FOOBAR = 0x7FFFFFFF +} gsl_deviceid_t; + +// ---------------- +// chip revision id +// ---------------- +// +// coreid:8 majorrev:8 minorrev:8 patch:8 +// +// coreid = 0x00 = YAMATO_DX +// coreid = 0x80 = G12 +// + +#define COREID(x) ((((unsigned int)x & 0xFF) << 24)) +#define MAJORID(x) ((((unsigned int)x & 0xFF) << 16)) +#define MINORID(x) ((((unsigned int)x & 0xFF) << 8)) +#define PATCHID(x) ((((unsigned int)x & 0xFF) << 0)) + +typedef enum _gsl_chipid_t +{ + GSL_CHIPID_YAMATODX_REV13 = (COREID(0x00) | MAJORID(0x01) | MINORID(0x03) | PATCHID(0x00)), + GSL_CHIPID_YAMATODX_REV14 = (COREID(0x00) | MAJORID(0x01) | MINORID(0x04) | PATCHID(0x00)), + GSL_CHIPID_YAMATODX_REV20 = (COREID(0x00) | MAJORID(0x02) | MINORID(0x00) | PATCHID(0x00)), + GSL_CHIPID_YAMATODX_REV21 = (COREID(0x00) | MAJORID(0x02) | MINORID(0x01) | PATCHID(0x00)), + GSL_CHIPID_YAMATODX_REV211 = (COREID(0x00) | MAJORID(0x02) | MINORID(0x01) | PATCHID(0x01)), + GSL_CHIPID_YAMATODX_REV22 = (COREID(0x00) | MAJORID(0x02) | MINORID(0x02) | PATCHID(0x00)), + GSL_CHIPID_YAMATODX_REV23 = (COREID(0x00) | MAJORID(0x02) | MINORID(0x03) | PATCHID(0x00)), + GSL_CHIPID_YAMATODX_REV231 = (COREID(0x00) | MAJORID(0x02) | MINORID(0x03) | PATCHID(0x01)), + GSL_CHIPID_YAMATODX_REV24 = (COREID(0x00) | MAJORID(0x02) | MINORID(0x04) | PATCHID(0x00)), + GSL_CHIPID_YAMATODX_REV25 = (COREID(0x00) | MAJORID(0x02) | MINORID(0x05) | PATCHID(0x00)), + GSL_CHIPID_YAMATODX_REV251 = (COREID(0x00) | MAJORID(0x02) | MINORID(0x05) | PATCHID(0x01)), + GSL_CHIPID_G12_REV00 = (int)(COREID(0x80) | MAJORID(0x00) | MINORID(0x00) | PATCHID(0x00)), + GSL_CHIPID_ERROR = (int)0xFFFFFFFF + +} gsl_chipid_t; + +#undef COREID +#undef MAJORID +#undef MINORID +#undef PATCHID + +// ----------- +// device info +// ----------- +typedef struct _gsl_devinfo_t { + + gsl_deviceid_t device_id; // ID of this device + gsl_chipid_t chip_id; + int mmu_enabled; // mmu address translation enabled + unsigned int gmem_gpubaseaddr; + void * gmem_hostbaseaddr; // if gmem_hostbaseaddr is NULL, we would know its not mapped into mmio space + unsigned int gmem_sizebytes; + +} gsl_devinfo_t; + +// ------------------- +// device memory store +// ------------------- +typedef struct _gsl_devmemstore_t { + volatile unsigned int soptimestamp; + unsigned int sbz; + volatile unsigned int eoptimestamp; + unsigned int sbz2; +} gsl_devmemstore_t; + +#define GSL_DEVICE_MEMSTORE_OFFSET(field) offsetof(gsl_devmemstore_t, field) + +// ----------- +// aperture id +// ----------- +typedef enum _gsl_apertureid_t +{ + GSL_APERTURE_EMEM = (GSL_MEMFLAGS_EMEM), + GSL_APERTURE_PHYS = (GSL_MEMFLAGS_CONPHYS >> GSL_MEMFLAGS_APERTURE_SHIFT), + GSL_APERTURE_MMU = (GSL_APERTURE_EMEM | 0x10000000), + GSL_APERTURE_MAX = 2, + + GSL_APERTURE_FOOBAR = 0x7FFFFFFF +} gsl_apertureid_t; + +// ---------- +// channel id +// ---------- +typedef enum _gsl_channelid_t +{ + GSL_CHANNEL_1 = (GSL_MEMFLAGS_CHANNEL1 >> GSL_MEMFLAGS_CHANNEL_SHIFT), + GSL_CHANNEL_2 = (GSL_MEMFLAGS_CHANNEL2 >> GSL_MEMFLAGS_CHANNEL_SHIFT), + GSL_CHANNEL_3 = (GSL_MEMFLAGS_CHANNEL3 >> GSL_MEMFLAGS_CHANNEL_SHIFT), + GSL_CHANNEL_4 = (GSL_MEMFLAGS_CHANNEL4 >> GSL_MEMFLAGS_CHANNEL_SHIFT), + GSL_CHANNEL_MAX = 4, + + GSL_CHANNEL_FOOBAR = 0x7FFFFFFF +} gsl_channelid_t; + +// ---------------------- +// page access permission +// ---------------------- +typedef enum _gsl_ap_t +{ + GSL_AP_NULL = 0x0, + GSL_AP_R = 0x1, + GSL_AP_W = 0x2, + GSL_AP_RW = 0x3, + GSL_AP_X = 0x4, + GSL_AP_RWX = 0x5, + GSL_AP_MAX = 0x6, + + GSL_AP_FOOBAR = 0x7FFFFFFF +} gsl_ap_t; + +// ------------- +// memory region +// ------------- +typedef struct _gsl_memregion_t { + unsigned char *mmio_virt_base; + unsigned int mmio_phys_base; + gpuaddr_t gpu_base; + unsigned int sizebytes; +} gsl_memregion_t; + +// ------------------------ +// shared memory allocation +// ------------------------ +typedef struct _gsl_memdesc_t { + void *hostptr; + gpuaddr_t gpuaddr; + int size; + unsigned int priv; // private + unsigned int priv2; // private + +} gsl_memdesc_t; + +// --------------------------------- +// physical page scatter/gatter list +// --------------------------------- +typedef struct _gsl_scatterlist_t { + int contiguous; // flag whether pages on the list are physically contiguous + unsigned int num; + unsigned int *pages; +} gsl_scatterlist_t; + +// -------------- +// mem free queue +// -------------- +// +// this could be compressed down into the just the memdesc for the node +// +typedef struct _gsl_memnode_t { + gsl_timestamp_t timestamp; + gsl_memdesc_t memdesc; + unsigned int pid; + struct _gsl_memnode_t *next; +} gsl_memnode_t; + +typedef struct _gsl_memqueue_t { + gsl_memnode_t *head; + gsl_memnode_t *tail; +} gsl_memqueue_t; + +// ------------ +// timestamp id +// ------------ +typedef enum _gsl_timestamp_type_t +{ + GSL_TIMESTAMP_CONSUMED = 1, // start-of-pipeline timestamp + GSL_TIMESTAMP_RETIRED = 2, // end-of-pipeline timestamp + GSL_TIMESTAMP_MAX = 2, + + GSL_TIMESTAMP_FOOBAR = 0x7FFFFFFF +} gsl_timestamp_type_t; + +// ------------ +// context type +// ------------ +typedef enum _gsl_context_type_t +{ + GSL_CONTEXT_TYPE_GENERIC = 1, + GSL_CONTEXT_TYPE_OPENGL = 2, + GSL_CONTEXT_TYPE_OPENVG = 3, + + GSL_CONTEXT_TYPE_FOOBAR = 0x7FFFFFFF +} gsl_context_type_t; + +// --------- +// rectangle +// --------- +typedef struct _gsl_rect_t { + unsigned int x; + unsigned int y; + unsigned int width; + unsigned int height; +} gsl_rect_t; + +// ----------------------- +// pixel buffer descriptor +// ----------------------- +typedef struct _gsl_buffer_desc_t { + gsl_memdesc_t data; + unsigned int stride_bytes; + unsigned int bpp; + unsigned int enabled; +} gsl_buffer_desc_t; + +// --------------------- +// command window target +// --------------------- +typedef enum _gsl_cmdwindow_t +{ + GSL_CMDWINDOW_MIN = 0x00000000, + GSL_CMDWINDOW_2D = 0x00000000, + GSL_CMDWINDOW_3D = 0x00000001, // legacy + GSL_CMDWINDOW_MMU = 0x00000002, + GSL_CMDWINDOW_ARBITER = 0x000000FF, + GSL_CMDWINDOW_MAX = 0x000000FF, + + GSL_CMDWINDOW_FOOBAR = 0x7FFFFFFF +} gsl_cmdwindow_t; + +// ------------ +// interrupt id +// ------------ +typedef enum _gsl_intrid_t +{ + GSL_INTR_YDX_MH_AXI_READ_ERROR = 0, + GSL_INTR_YDX_MH_AXI_WRITE_ERROR, + GSL_INTR_YDX_MH_MMU_PAGE_FAULT, + + GSL_INTR_YDX_CP_SW_INT, + GSL_INTR_YDX_CP_T0_PACKET_IN_IB, + GSL_INTR_YDX_CP_OPCODE_ERROR, + GSL_INTR_YDX_CP_PROTECTED_MODE_ERROR, + GSL_INTR_YDX_CP_RESERVED_BIT_ERROR, + GSL_INTR_YDX_CP_IB_ERROR, + GSL_INTR_YDX_CP_IB2_INT, + GSL_INTR_YDX_CP_IB1_INT, + GSL_INTR_YDX_CP_RING_BUFFER, + + GSL_INTR_YDX_RBBM_READ_ERROR, + GSL_INTR_YDX_RBBM_DISPLAY_UPDATE, + GSL_INTR_YDX_RBBM_GUI_IDLE, + + GSL_INTR_YDX_SQ_PS_WATCHDOG, + GSL_INTR_YDX_SQ_VS_WATCHDOG, + + GSL_INTR_G12_MH, + GSL_INTR_G12_G2D, + GSL_INTR_G12_FIFO, +#ifndef _Z180 + GSL_INTR_G12_FBC, +#endif // _Z180 + + GSL_INTR_G12_MH_AXI_READ_ERROR, + GSL_INTR_G12_MH_AXI_WRITE_ERROR, + GSL_INTR_G12_MH_MMU_PAGE_FAULT, + + GSL_INTR_COUNT, + + GSL_INTR_FOOBAR = 0x7FFFFFFF +} gsl_intrid_t; + +#endif // __GSL_TYPES_H |