1 /****************************************************************************
3 * Copyright (C) 2005 - 2011 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 *****************************************************************************/
24 #ifndef __gc_hal_kernel_device_h_
25 #define __gc_hal_kernel_device_h_
28 #define gcdkREPORT_VIDMEM_LEAK 0
30 #define gcdkREPORT_VIDMEM_LEAK 1
33 /******************************************************************************\
34 ******************************* gckGALDEVICE Structure *******************************
35 \******************************************************************************/
37 typedef struct _gckGALDEVICE
41 gckKERNEL kernels
[gcdCORE_COUNT
];
44 gctSIZE_T internalSize
;
45 gctPHYS_ADDR internalPhysical
;
46 gctPOINTER internalLogical
;
47 gckVIDMEM internalVidMem
;
48 gctSIZE_T externalSize
;
49 gctPHYS_ADDR externalPhysical
;
50 gctPOINTER externalLogical
;
51 gckVIDMEM externalVidMem
;
52 gckVIDMEM contiguousVidMem
;
53 gctPOINTER contiguousBase
;
54 gctPHYS_ADDR contiguousPhysical
;
55 gctSIZE_T contiguousSize
;
56 gctBOOL contiguousMapped
;
57 gctPOINTER contiguousMappedUser
;
58 gctSIZE_T systemMemorySize
;
59 gctUINT32 systemMemoryBaseAddress
;
60 gctPOINTER registerBases
[gcdCORE_COUNT
];
61 gctSIZE_T registerSizes
[gcdCORE_COUNT
];
62 gctUINT32 baseAddress
;
63 gctUINT32 requestedRegisterMemBases
[gcdCORE_COUNT
];
64 gctSIZE_T requestedRegisterMemSizes
[gcdCORE_COUNT
];
65 gctUINT32 requestedContiguousBase
;
66 gctSIZE_T requestedContiguousSize
;
69 gctINT irqLines
[gcdCORE_COUNT
];
70 gctBOOL isrInitializeds
[gcdCORE_COUNT
];
71 gctBOOL dataReadys
[gcdCORE_COUNT
];
73 /* Thread management. */
74 struct task_struct
*threadCtxts
[gcdCORE_COUNT
];
75 struct semaphore semas
[gcdCORE_COUNT
];
76 gctBOOL threadInitializeds
[gcdCORE_COUNT
];
79 /* Signal management. */
83 gceCORE coreMapping
[8];
85 #if gcdPOWEROFF_TIMEOUT
86 struct task_struct
*pmThreadCtxts
;
87 gctBOOL pmThreadInitializeds
;
92 typedef struct _gcsHAL_PRIVATE_DATA
95 gctPOINTER mappedMemory
;
96 gctPOINTER contiguousLogical
;
97 /* The process opening the device may not be the same as the one that closes it. */
100 gcsHAL_PRIVATE_DATA
, * gcsHAL_PRIVATE_DATA_PTR
;
102 gceSTATUS
gckGALDEVICE_Setup_ISR(
103 IN gckGALDEVICE Device
106 gceSTATUS
gckGALDEVICE_Setup_ISR_2D(
107 IN gckGALDEVICE Device
110 gceSTATUS
gckGALDEVICE_Setup_ISR_VG(
111 IN gckGALDEVICE Device
114 gceSTATUS
gckGALDEVICE_Release_ISR(
115 IN gckGALDEVICE Device
118 gceSTATUS
gckGALDEVICE_Release_ISR_2D(
119 IN gckGALDEVICE Device
122 gceSTATUS
gckGALDEVICE_Release_ISR_VG(
123 IN gckGALDEVICE Device
126 gceSTATUS
gckGALDEVICE_Start_Threads(
127 IN gckGALDEVICE Device
130 gceSTATUS
gckGALDEVICE_Stop_Threads(
134 gceSTATUS
gckGALDEVICE_Start(
135 IN gckGALDEVICE Device
138 gceSTATUS
gckGALDEVICE_Stop(
142 gceSTATUS
gckGALDEVICE_Construct(
144 IN gctUINT32 RegisterMemBase
,
145 IN gctSIZE_T RegisterMemSize
,
147 IN gctUINT32 RegisterMemBase2D
,
148 IN gctSIZE_T RegisterMemSize2D
,
150 IN gctUINT32 RegisterMemBaseVG
,
151 IN gctSIZE_T RegisterMemSizeVG
,
152 IN gctUINT32 ContiguousBase
,
153 IN gctSIZE_T ContiguousSize
,
154 IN gctSIZE_T BankSize
,
156 IN gctINT Compression
,
157 IN gctUINT32 PhysBaseAddr
,
158 IN gctUINT32 PhysSize
,
160 OUT gckGALDEVICE
*Device
163 gceSTATUS
gckGALDEVICE_Destroy(
164 IN gckGALDEVICE Device
167 #endif /* __gc_hal_kernel_device_h_ */