xref: /OK3568_Linux_fs/kernel/drivers/gpu/arm/midgard/mali_kbase_uku.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * (C) COPYRIGHT 2008-2017 ARM Limited. All rights reserved.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * This program is free software and is provided to you under the terms of the
6*4882a593Smuzhiyun  * GNU General Public License version 2 as published by the Free Software
7*4882a593Smuzhiyun  * Foundation, and any use by you of this program is subject to the terms
8*4882a593Smuzhiyun  * of such GNU licence.
9*4882a593Smuzhiyun  *
10*4882a593Smuzhiyun  * A copy of the licence is included with the program, and can also be obtained
11*4882a593Smuzhiyun  * from Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
12*4882a593Smuzhiyun  * Boston, MA  02110-1301, USA.
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  */
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #ifndef _KBASE_UKU_H_
21*4882a593Smuzhiyun #define _KBASE_UKU_H_
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun #include "mali_uk.h"
24*4882a593Smuzhiyun #include "mali_base_kernel.h"
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun /* This file needs to support being included from kernel and userside (which use different defines) */
27*4882a593Smuzhiyun #if defined(CONFIG_MALI_ERROR_INJECT) || MALI_ERROR_INJECT_ON
28*4882a593Smuzhiyun #define SUPPORT_MALI_ERROR_INJECT
29*4882a593Smuzhiyun #endif /* defined(CONFIG_MALI_ERROR_INJECT) || MALI_ERROR_INJECT_ON */
30*4882a593Smuzhiyun #if defined(CONFIG_MALI_NO_MALI)
31*4882a593Smuzhiyun #define SUPPORT_MALI_NO_MALI
32*4882a593Smuzhiyun #elif defined(MALI_NO_MALI)
33*4882a593Smuzhiyun #if MALI_NO_MALI
34*4882a593Smuzhiyun #define SUPPORT_MALI_NO_MALI
35*4882a593Smuzhiyun #endif
36*4882a593Smuzhiyun #endif
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun #if defined(SUPPORT_MALI_NO_MALI) || defined(SUPPORT_MALI_ERROR_INJECT)
39*4882a593Smuzhiyun #include "backend/gpu/mali_kbase_model_dummy.h"
40*4882a593Smuzhiyun #endif
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun #include "mali_kbase_gpuprops_types.h"
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun /*
45*4882a593Smuzhiyun  * 10.1:
46*4882a593Smuzhiyun  * - Do mmap in kernel for SAME_VA memory allocations rather then
47*4882a593Smuzhiyun  *   calling back into the kernel as a 2nd stage of the allocation request.
48*4882a593Smuzhiyun  *
49*4882a593Smuzhiyun  * 10.2:
50*4882a593Smuzhiyun  * - Add KBASE_FUNC_MEM_JIT_INIT which allows clients to request a custom VA
51*4882a593Smuzhiyun  *   region for use with JIT (ignored on 32-bit platforms)
52*4882a593Smuzhiyun  *
53*4882a593Smuzhiyun  * 10.3:
54*4882a593Smuzhiyun  * - base_jd_core_req typedef-ed to u32 (instead of to u16)
55*4882a593Smuzhiyun  * - two flags added: BASE_JD_REQ_SKIP_CACHE_STAT / _END
56*4882a593Smuzhiyun  *
57*4882a593Smuzhiyun  * 10.4:
58*4882a593Smuzhiyun  * - Removed KBASE_FUNC_EXT_BUFFER_LOCK used only in internal tests
59*4882a593Smuzhiyun  *
60*4882a593Smuzhiyun  * 10.5:
61*4882a593Smuzhiyun  * - Reverted to performing mmap in user space so that tools like valgrind work.
62*4882a593Smuzhiyun  *
63*4882a593Smuzhiyun  * 10.6:
64*4882a593Smuzhiyun  * - Add flags input variable to KBASE_FUNC_TLSTREAM_ACQUIRE
65*4882a593Smuzhiyun  */
66*4882a593Smuzhiyun #define BASE_UK_VERSION_MAJOR 10
67*4882a593Smuzhiyun #define BASE_UK_VERSION_MINOR 6
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun #define LINUX_UK_BASE_MAGIC 0x80
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun struct kbase_uk_mem_alloc {
72*4882a593Smuzhiyun 	union uk_header header;
73*4882a593Smuzhiyun 	/* IN */
74*4882a593Smuzhiyun 	u64 va_pages;
75*4882a593Smuzhiyun 	u64 commit_pages;
76*4882a593Smuzhiyun 	u64 extent;
77*4882a593Smuzhiyun 	/* IN/OUT */
78*4882a593Smuzhiyun 	u64 flags;
79*4882a593Smuzhiyun 	/* OUT */
80*4882a593Smuzhiyun 	u64 gpu_va;
81*4882a593Smuzhiyun 	u16 va_alignment;
82*4882a593Smuzhiyun 	u8  padding[6];
83*4882a593Smuzhiyun };
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun struct kbase_uk_mem_free {
86*4882a593Smuzhiyun 	union uk_header header;
87*4882a593Smuzhiyun 	/* IN */
88*4882a593Smuzhiyun 	u64 gpu_addr;
89*4882a593Smuzhiyun 	/* OUT */
90*4882a593Smuzhiyun };
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun struct kbase_uk_mem_alias {
93*4882a593Smuzhiyun 	union uk_header header;
94*4882a593Smuzhiyun 	/* IN/OUT */
95*4882a593Smuzhiyun 	u64 flags;
96*4882a593Smuzhiyun 	/* IN */
97*4882a593Smuzhiyun 	u64 stride;
98*4882a593Smuzhiyun 	u64 nents;
99*4882a593Smuzhiyun 	union kbase_pointer ai;
100*4882a593Smuzhiyun 	/* OUT */
101*4882a593Smuzhiyun 	u64         gpu_va;
102*4882a593Smuzhiyun 	u64         va_pages;
103*4882a593Smuzhiyun };
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun struct kbase_uk_mem_import {
106*4882a593Smuzhiyun 	union uk_header header;
107*4882a593Smuzhiyun 	/* IN */
108*4882a593Smuzhiyun 	union kbase_pointer phandle;
109*4882a593Smuzhiyun 	u32 type;
110*4882a593Smuzhiyun 	u32 padding;
111*4882a593Smuzhiyun 	/* IN/OUT */
112*4882a593Smuzhiyun 	u64         flags;
113*4882a593Smuzhiyun 	/* OUT */
114*4882a593Smuzhiyun 	u64 gpu_va;
115*4882a593Smuzhiyun 	u64         va_pages;
116*4882a593Smuzhiyun };
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun struct kbase_uk_mem_flags_change {
119*4882a593Smuzhiyun 	union uk_header header;
120*4882a593Smuzhiyun 	/* IN */
121*4882a593Smuzhiyun 	u64 gpu_va;
122*4882a593Smuzhiyun 	u64 flags;
123*4882a593Smuzhiyun 	u64 mask;
124*4882a593Smuzhiyun };
125*4882a593Smuzhiyun 
126*4882a593Smuzhiyun struct kbase_uk_job_submit {
127*4882a593Smuzhiyun 	union uk_header header;
128*4882a593Smuzhiyun 	/* IN */
129*4882a593Smuzhiyun 	union kbase_pointer addr;
130*4882a593Smuzhiyun 	u32 nr_atoms;
131*4882a593Smuzhiyun 	u32 stride;		/* bytes between atoms, i.e. sizeof(base_jd_atom_v2) */
132*4882a593Smuzhiyun 	/* OUT */
133*4882a593Smuzhiyun };
134*4882a593Smuzhiyun 
135*4882a593Smuzhiyun struct kbase_uk_post_term {
136*4882a593Smuzhiyun 	union uk_header header;
137*4882a593Smuzhiyun };
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun struct kbase_uk_sync_now {
140*4882a593Smuzhiyun 	union uk_header header;
141*4882a593Smuzhiyun 
142*4882a593Smuzhiyun 	/* IN */
143*4882a593Smuzhiyun 	struct base_syncset sset;
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun 	/* OUT */
146*4882a593Smuzhiyun };
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun struct kbase_uk_hwcnt_setup {
149*4882a593Smuzhiyun 	union uk_header header;
150*4882a593Smuzhiyun 
151*4882a593Smuzhiyun 	/* IN */
152*4882a593Smuzhiyun 	u64 dump_buffer;
153*4882a593Smuzhiyun 	u32 jm_bm;
154*4882a593Smuzhiyun 	u32 shader_bm;
155*4882a593Smuzhiyun 	u32 tiler_bm;
156*4882a593Smuzhiyun 	u32 unused_1; /* keep for backwards compatibility */
157*4882a593Smuzhiyun 	u32 mmu_l2_bm;
158*4882a593Smuzhiyun 	u32 padding;
159*4882a593Smuzhiyun 	/* OUT */
160*4882a593Smuzhiyun };
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun /**
163*4882a593Smuzhiyun  * struct kbase_uk_hwcnt_reader_setup - User/Kernel space data exchange structure
164*4882a593Smuzhiyun  * @header:       UK structure header
165*4882a593Smuzhiyun  * @buffer_count: requested number of dumping buffers
166*4882a593Smuzhiyun  * @jm_bm:        counters selection bitmask (JM)
167*4882a593Smuzhiyun  * @shader_bm:    counters selection bitmask (Shader)
168*4882a593Smuzhiyun  * @tiler_bm:     counters selection bitmask (Tiler)
169*4882a593Smuzhiyun  * @mmu_l2_bm:    counters selection bitmask (MMU_L2)
170*4882a593Smuzhiyun  * @fd:           dumping notification file descriptor
171*4882a593Smuzhiyun  *
172*4882a593Smuzhiyun  * This structure sets up HWC dumper/reader for this context.
173*4882a593Smuzhiyun  * Multiple instances can be created for single context.
174*4882a593Smuzhiyun  */
175*4882a593Smuzhiyun struct kbase_uk_hwcnt_reader_setup {
176*4882a593Smuzhiyun 	union uk_header header;
177*4882a593Smuzhiyun 
178*4882a593Smuzhiyun 	/* IN */
179*4882a593Smuzhiyun 	u32 buffer_count;
180*4882a593Smuzhiyun 	u32 jm_bm;
181*4882a593Smuzhiyun 	u32 shader_bm;
182*4882a593Smuzhiyun 	u32 tiler_bm;
183*4882a593Smuzhiyun 	u32 mmu_l2_bm;
184*4882a593Smuzhiyun 
185*4882a593Smuzhiyun 	/* OUT */
186*4882a593Smuzhiyun 	s32 fd;
187*4882a593Smuzhiyun };
188*4882a593Smuzhiyun 
189*4882a593Smuzhiyun struct kbase_uk_hwcnt_dump {
190*4882a593Smuzhiyun 	union uk_header header;
191*4882a593Smuzhiyun };
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun struct kbase_uk_hwcnt_clear {
194*4882a593Smuzhiyun 	union uk_header header;
195*4882a593Smuzhiyun };
196*4882a593Smuzhiyun 
197*4882a593Smuzhiyun struct kbase_uk_fence_validate {
198*4882a593Smuzhiyun 	union uk_header header;
199*4882a593Smuzhiyun 	/* IN */
200*4882a593Smuzhiyun 	s32 fd;
201*4882a593Smuzhiyun 	u32 padding;
202*4882a593Smuzhiyun 	/* OUT */
203*4882a593Smuzhiyun };
204*4882a593Smuzhiyun 
205*4882a593Smuzhiyun struct kbase_uk_stream_create {
206*4882a593Smuzhiyun 	union uk_header header;
207*4882a593Smuzhiyun 	/* IN */
208*4882a593Smuzhiyun 	char name[32];
209*4882a593Smuzhiyun 	/* OUT */
210*4882a593Smuzhiyun 	s32 fd;
211*4882a593Smuzhiyun 	u32 padding;
212*4882a593Smuzhiyun };
213*4882a593Smuzhiyun 
214*4882a593Smuzhiyun struct kbase_uk_gpuprops {
215*4882a593Smuzhiyun 	union uk_header header;
216*4882a593Smuzhiyun 
217*4882a593Smuzhiyun 	/* IN */
218*4882a593Smuzhiyun 	struct mali_base_gpu_props props;
219*4882a593Smuzhiyun 	/* OUT */
220*4882a593Smuzhiyun };
221*4882a593Smuzhiyun 
222*4882a593Smuzhiyun struct kbase_uk_mem_query {
223*4882a593Smuzhiyun 	union uk_header header;
224*4882a593Smuzhiyun 	/* IN */
225*4882a593Smuzhiyun 	u64 gpu_addr;
226*4882a593Smuzhiyun #define KBASE_MEM_QUERY_COMMIT_SIZE  1
227*4882a593Smuzhiyun #define KBASE_MEM_QUERY_VA_SIZE      2
228*4882a593Smuzhiyun #define KBASE_MEM_QUERY_FLAGS        3
229*4882a593Smuzhiyun 	u64         query;
230*4882a593Smuzhiyun 	/* OUT */
231*4882a593Smuzhiyun 	u64         value;
232*4882a593Smuzhiyun };
233*4882a593Smuzhiyun 
234*4882a593Smuzhiyun struct kbase_uk_mem_commit {
235*4882a593Smuzhiyun 	union uk_header header;
236*4882a593Smuzhiyun 	/* IN */
237*4882a593Smuzhiyun 	u64 gpu_addr;
238*4882a593Smuzhiyun 	u64         pages;
239*4882a593Smuzhiyun 	/* OUT */
240*4882a593Smuzhiyun 	u32 result_subcode;
241*4882a593Smuzhiyun 	u32 padding;
242*4882a593Smuzhiyun };
243*4882a593Smuzhiyun 
244*4882a593Smuzhiyun struct kbase_uk_find_cpu_offset {
245*4882a593Smuzhiyun 	union uk_header header;
246*4882a593Smuzhiyun 	/* IN */
247*4882a593Smuzhiyun 	u64 gpu_addr;
248*4882a593Smuzhiyun 	u64 cpu_addr;
249*4882a593Smuzhiyun 	u64 size;
250*4882a593Smuzhiyun 	/* OUT */
251*4882a593Smuzhiyun 	u64 offset;
252*4882a593Smuzhiyun };
253*4882a593Smuzhiyun 
254*4882a593Smuzhiyun #define KBASE_GET_VERSION_BUFFER_SIZE 64
255*4882a593Smuzhiyun struct kbase_uk_get_ddk_version {
256*4882a593Smuzhiyun 	union uk_header header;
257*4882a593Smuzhiyun 	/* OUT */
258*4882a593Smuzhiyun 	char version_buffer[KBASE_GET_VERSION_BUFFER_SIZE];
259*4882a593Smuzhiyun 	u32 version_string_size;
260*4882a593Smuzhiyun 	u32 padding;
261*4882a593Smuzhiyun 	u32 rk_version;
262*4882a593Smuzhiyun };
263*4882a593Smuzhiyun 
264*4882a593Smuzhiyun struct kbase_uk_disjoint_query {
265*4882a593Smuzhiyun 	union uk_header header;
266*4882a593Smuzhiyun 	/* OUT */
267*4882a593Smuzhiyun 	u32 counter;
268*4882a593Smuzhiyun 	u32 padding;
269*4882a593Smuzhiyun };
270*4882a593Smuzhiyun 
271*4882a593Smuzhiyun struct kbase_uk_set_flags {
272*4882a593Smuzhiyun 	union uk_header header;
273*4882a593Smuzhiyun 	/* IN */
274*4882a593Smuzhiyun 	u32 create_flags;
275*4882a593Smuzhiyun 	u32 padding;
276*4882a593Smuzhiyun };
277*4882a593Smuzhiyun 
278*4882a593Smuzhiyun #if MALI_UNIT_TEST
279*4882a593Smuzhiyun #define TEST_ADDR_COUNT 4
280*4882a593Smuzhiyun #define KBASE_TEST_BUFFER_SIZE 128
281*4882a593Smuzhiyun struct kbase_exported_test_data {
282*4882a593Smuzhiyun 	u64 test_addr[TEST_ADDR_COUNT];		/**< memory address */
283*4882a593Smuzhiyun 	u32 test_addr_pages[TEST_ADDR_COUNT];		/**<  memory size in pages */
284*4882a593Smuzhiyun 	union kbase_pointer kctx;				/**<  base context created by process */
285*4882a593Smuzhiyun 	union kbase_pointer mm;				/**< pointer to process address space */
286*4882a593Smuzhiyun 	u8 buffer1[KBASE_TEST_BUFFER_SIZE];   /**<  unit test defined parameter */
287*4882a593Smuzhiyun 	u8 buffer2[KBASE_TEST_BUFFER_SIZE];   /**<  unit test defined parameter */
288*4882a593Smuzhiyun };
289*4882a593Smuzhiyun 
290*4882a593Smuzhiyun struct kbase_uk_set_test_data {
291*4882a593Smuzhiyun 	union uk_header header;
292*4882a593Smuzhiyun 	/* IN */
293*4882a593Smuzhiyun 	struct kbase_exported_test_data test_data;
294*4882a593Smuzhiyun };
295*4882a593Smuzhiyun 
296*4882a593Smuzhiyun #endif				/* MALI_UNIT_TEST */
297*4882a593Smuzhiyun 
298*4882a593Smuzhiyun #ifdef SUPPORT_MALI_ERROR_INJECT
299*4882a593Smuzhiyun struct kbase_uk_error_params {
300*4882a593Smuzhiyun 	union uk_header header;
301*4882a593Smuzhiyun 	/* IN */
302*4882a593Smuzhiyun 	struct kbase_error_params params;
303*4882a593Smuzhiyun };
304*4882a593Smuzhiyun #endif				/* SUPPORT_MALI_ERROR_INJECT */
305*4882a593Smuzhiyun 
306*4882a593Smuzhiyun #ifdef SUPPORT_MALI_NO_MALI
307*4882a593Smuzhiyun struct kbase_uk_model_control_params {
308*4882a593Smuzhiyun 	union uk_header header;
309*4882a593Smuzhiyun 	/* IN */
310*4882a593Smuzhiyun 	struct kbase_model_control_params params;
311*4882a593Smuzhiyun };
312*4882a593Smuzhiyun #endif				/* SUPPORT_MALI_NO_MALI */
313*4882a593Smuzhiyun 
314*4882a593Smuzhiyun #ifdef BASE_LEGACY_UK8_SUPPORT
315*4882a593Smuzhiyun struct kbase_uk_keep_gpu_powered {
316*4882a593Smuzhiyun 	union uk_header header;
317*4882a593Smuzhiyun 	u32       enabled;
318*4882a593Smuzhiyun 	u32       padding;
319*4882a593Smuzhiyun };
320*4882a593Smuzhiyun #endif /* BASE_LEGACY_UK8_SUPPORT */
321*4882a593Smuzhiyun 
322*4882a593Smuzhiyun struct kbase_uk_profiling_controls {
323*4882a593Smuzhiyun 	union uk_header header;
324*4882a593Smuzhiyun 	u32 profiling_controls[FBDUMP_CONTROL_MAX];
325*4882a593Smuzhiyun };
326*4882a593Smuzhiyun 
327*4882a593Smuzhiyun struct kbase_uk_debugfs_mem_profile_add {
328*4882a593Smuzhiyun 	union uk_header header;
329*4882a593Smuzhiyun 	u32 len;
330*4882a593Smuzhiyun 	u32 padding;
331*4882a593Smuzhiyun 	union kbase_pointer buf;
332*4882a593Smuzhiyun };
333*4882a593Smuzhiyun 
334*4882a593Smuzhiyun struct kbase_uk_context_id {
335*4882a593Smuzhiyun 	union uk_header header;
336*4882a593Smuzhiyun 	/* OUT */
337*4882a593Smuzhiyun 	int id;
338*4882a593Smuzhiyun };
339*4882a593Smuzhiyun 
340*4882a593Smuzhiyun /**
341*4882a593Smuzhiyun  * struct kbase_uk_tlstream_acquire - User/Kernel space data exchange structure
342*4882a593Smuzhiyun  * @header: UK structure header
343*4882a593Smuzhiyun  * @flags:  timeline stream flags
344*4882a593Smuzhiyun  * @fd:     timeline stream file descriptor
345*4882a593Smuzhiyun  *
346*4882a593Smuzhiyun  * This structure is used when performing a call to acquire kernel side timeline
347*4882a593Smuzhiyun  * stream file descriptor.
348*4882a593Smuzhiyun  */
349*4882a593Smuzhiyun struct kbase_uk_tlstream_acquire {
350*4882a593Smuzhiyun 	union uk_header header;
351*4882a593Smuzhiyun 	/* IN */
352*4882a593Smuzhiyun 	u32 flags;
353*4882a593Smuzhiyun 	/* OUT */
354*4882a593Smuzhiyun 	s32  fd;
355*4882a593Smuzhiyun };
356*4882a593Smuzhiyun 
357*4882a593Smuzhiyun /**
358*4882a593Smuzhiyun  * struct kbase_uk_tlstream_acquire_v10_4 - User/Kernel space data exchange
359*4882a593Smuzhiyun  *                                          structure
360*4882a593Smuzhiyun  * @header: UK structure header
361*4882a593Smuzhiyun  * @fd:     timeline stream file descriptor
362*4882a593Smuzhiyun  *
363*4882a593Smuzhiyun  * This structure is used when performing a call to acquire kernel side timeline
364*4882a593Smuzhiyun  * stream file descriptor.
365*4882a593Smuzhiyun  */
366*4882a593Smuzhiyun struct kbase_uk_tlstream_acquire_v10_4 {
367*4882a593Smuzhiyun 	union uk_header header;
368*4882a593Smuzhiyun 	/* IN */
369*4882a593Smuzhiyun 	/* OUT */
370*4882a593Smuzhiyun 	s32  fd;
371*4882a593Smuzhiyun };
372*4882a593Smuzhiyun 
373*4882a593Smuzhiyun /**
374*4882a593Smuzhiyun  * struct kbase_uk_tlstream_flush - User/Kernel space data exchange structure
375*4882a593Smuzhiyun  * @header: UK structure header
376*4882a593Smuzhiyun  *
377*4882a593Smuzhiyun  * This structure is used when performing a call to flush kernel side
378*4882a593Smuzhiyun  * timeline streams.
379*4882a593Smuzhiyun  */
380*4882a593Smuzhiyun struct kbase_uk_tlstream_flush {
381*4882a593Smuzhiyun 	union uk_header header;
382*4882a593Smuzhiyun 	/* IN */
383*4882a593Smuzhiyun 	/* OUT */
384*4882a593Smuzhiyun };
385*4882a593Smuzhiyun 
386*4882a593Smuzhiyun #if MALI_UNIT_TEST
387*4882a593Smuzhiyun /**
388*4882a593Smuzhiyun  * struct kbase_uk_tlstream_test - User/Kernel space data exchange structure
389*4882a593Smuzhiyun  * @header:    UK structure header
390*4882a593Smuzhiyun  * @tpw_count: number of trace point writers in each context
391*4882a593Smuzhiyun  * @msg_delay: time delay between tracepoints from one writer in milliseconds
392*4882a593Smuzhiyun  * @msg_count: number of trace points written by one writer
393*4882a593Smuzhiyun  * @aux_msg:   if non-zero aux messages will be included
394*4882a593Smuzhiyun  *
395*4882a593Smuzhiyun  * This structure is used when performing a call to start timeline stream test
396*4882a593Smuzhiyun  * embedded in kernel.
397*4882a593Smuzhiyun  */
398*4882a593Smuzhiyun struct kbase_uk_tlstream_test {
399*4882a593Smuzhiyun 	union uk_header header;
400*4882a593Smuzhiyun 	/* IN */
401*4882a593Smuzhiyun 	u32 tpw_count;
402*4882a593Smuzhiyun 	u32 msg_delay;
403*4882a593Smuzhiyun 	u32 msg_count;
404*4882a593Smuzhiyun 	u32 aux_msg;
405*4882a593Smuzhiyun 	/* OUT */
406*4882a593Smuzhiyun };
407*4882a593Smuzhiyun 
408*4882a593Smuzhiyun /**
409*4882a593Smuzhiyun  * struct kbase_uk_tlstream_stats - User/Kernel space data exchange structure
410*4882a593Smuzhiyun  * @header:          UK structure header
411*4882a593Smuzhiyun  * @bytes_collected: number of bytes read by user
412*4882a593Smuzhiyun  * @bytes_generated: number of bytes generated by tracepoints
413*4882a593Smuzhiyun  *
414*4882a593Smuzhiyun  * This structure is used when performing a call to obtain timeline stream
415*4882a593Smuzhiyun  * statistics.
416*4882a593Smuzhiyun  */
417*4882a593Smuzhiyun struct kbase_uk_tlstream_stats {
418*4882a593Smuzhiyun 	union uk_header header; /**< UK structure header. */
419*4882a593Smuzhiyun 	/* IN */
420*4882a593Smuzhiyun 	/* OUT */
421*4882a593Smuzhiyun 	u32 bytes_collected;
422*4882a593Smuzhiyun 	u32 bytes_generated;
423*4882a593Smuzhiyun };
424*4882a593Smuzhiyun #endif /* MALI_UNIT_TEST */
425*4882a593Smuzhiyun 
426*4882a593Smuzhiyun /**
427*4882a593Smuzhiyun  * struct struct kbase_uk_prfcnt_value for the KBASE_FUNC_SET_PRFCNT_VALUES ioctl
428*4882a593Smuzhiyun  * @header:          UK structure header
429*4882a593Smuzhiyun  * @data:            Counter samples for the dummy model
430*4882a593Smuzhiyun  * @size:............Size of the counter sample data
431*4882a593Smuzhiyun  */
432*4882a593Smuzhiyun struct kbase_uk_prfcnt_values {
433*4882a593Smuzhiyun 	union uk_header header;
434*4882a593Smuzhiyun 	/* IN */
435*4882a593Smuzhiyun 	u32 *data;
436*4882a593Smuzhiyun 	u32 size;
437*4882a593Smuzhiyun };
438*4882a593Smuzhiyun 
439*4882a593Smuzhiyun /**
440*4882a593Smuzhiyun  * struct kbase_uk_soft_event_update - User/Kernel space data exchange structure
441*4882a593Smuzhiyun  * @header:     UK structure header
442*4882a593Smuzhiyun  * @evt:        the GPU address containing the event
443*4882a593Smuzhiyun  * @new_status: the new event status, must be either BASE_JD_SOFT_EVENT_SET or
444*4882a593Smuzhiyun  *              BASE_JD_SOFT_EVENT_RESET
445*4882a593Smuzhiyun  * @flags:      reserved for future uses, must be set to 0
446*4882a593Smuzhiyun  *
447*4882a593Smuzhiyun  * This structure is used to update the status of a software event. If the
448*4882a593Smuzhiyun  * event's status is set to BASE_JD_SOFT_EVENT_SET, any job currently waiting
449*4882a593Smuzhiyun  * on this event will complete.
450*4882a593Smuzhiyun  */
451*4882a593Smuzhiyun struct kbase_uk_soft_event_update {
452*4882a593Smuzhiyun 	union uk_header header;
453*4882a593Smuzhiyun 	/* IN */
454*4882a593Smuzhiyun 	u64 evt;
455*4882a593Smuzhiyun 	u32 new_status;
456*4882a593Smuzhiyun 	u32 flags;
457*4882a593Smuzhiyun };
458*4882a593Smuzhiyun 
459*4882a593Smuzhiyun /**
460*4882a593Smuzhiyun  * struct kbase_uk_mem_jit_init - User/Kernel space data exchange structure
461*4882a593Smuzhiyun  * @header:     UK structure header
462*4882a593Smuzhiyun  * @va_pages:   Number of virtual pages required for JIT
463*4882a593Smuzhiyun  *
464*4882a593Smuzhiyun  * This structure is used when requesting initialization of JIT.
465*4882a593Smuzhiyun  */
466*4882a593Smuzhiyun struct kbase_uk_mem_jit_init {
467*4882a593Smuzhiyun 	union uk_header header;
468*4882a593Smuzhiyun 	/* IN */
469*4882a593Smuzhiyun 	u64 va_pages;
470*4882a593Smuzhiyun };
471*4882a593Smuzhiyun 
472*4882a593Smuzhiyun enum kbase_uk_function_id {
473*4882a593Smuzhiyun 	KBASE_FUNC_MEM_ALLOC = (UK_FUNC_ID + 0),
474*4882a593Smuzhiyun 	KBASE_FUNC_MEM_IMPORT = (UK_FUNC_ID + 1),
475*4882a593Smuzhiyun 	KBASE_FUNC_MEM_COMMIT = (UK_FUNC_ID + 2),
476*4882a593Smuzhiyun 	KBASE_FUNC_MEM_QUERY = (UK_FUNC_ID + 3),
477*4882a593Smuzhiyun 	KBASE_FUNC_MEM_FREE = (UK_FUNC_ID + 4),
478*4882a593Smuzhiyun 	KBASE_FUNC_MEM_FLAGS_CHANGE = (UK_FUNC_ID + 5),
479*4882a593Smuzhiyun 	KBASE_FUNC_MEM_ALIAS = (UK_FUNC_ID + 6),
480*4882a593Smuzhiyun 
481*4882a593Smuzhiyun #ifdef BASE_LEGACY_UK6_SUPPORT
482*4882a593Smuzhiyun 	KBASE_FUNC_JOB_SUBMIT_UK6 = (UK_FUNC_ID + 7),
483*4882a593Smuzhiyun #endif /* BASE_LEGACY_UK6_SUPPORT */
484*4882a593Smuzhiyun 
485*4882a593Smuzhiyun 	KBASE_FUNC_SYNC  = (UK_FUNC_ID + 8),
486*4882a593Smuzhiyun 
487*4882a593Smuzhiyun 	KBASE_FUNC_POST_TERM = (UK_FUNC_ID + 9),
488*4882a593Smuzhiyun 
489*4882a593Smuzhiyun 	KBASE_FUNC_HWCNT_SETUP = (UK_FUNC_ID + 10),
490*4882a593Smuzhiyun 	KBASE_FUNC_HWCNT_DUMP = (UK_FUNC_ID + 11),
491*4882a593Smuzhiyun 	KBASE_FUNC_HWCNT_CLEAR = (UK_FUNC_ID + 12),
492*4882a593Smuzhiyun 
493*4882a593Smuzhiyun 	KBASE_FUNC_GPU_PROPS_REG_DUMP = (UK_FUNC_ID + 14),
494*4882a593Smuzhiyun 
495*4882a593Smuzhiyun 	KBASE_FUNC_FIND_CPU_OFFSET = (UK_FUNC_ID + 15),
496*4882a593Smuzhiyun 
497*4882a593Smuzhiyun 	KBASE_FUNC_GET_VERSION = (UK_FUNC_ID + 16),
498*4882a593Smuzhiyun 	KBASE_FUNC_SET_FLAGS = (UK_FUNC_ID + 18),
499*4882a593Smuzhiyun 
500*4882a593Smuzhiyun 	KBASE_FUNC_SET_TEST_DATA = (UK_FUNC_ID + 19),
501*4882a593Smuzhiyun 	KBASE_FUNC_INJECT_ERROR = (UK_FUNC_ID + 20),
502*4882a593Smuzhiyun 	KBASE_FUNC_MODEL_CONTROL = (UK_FUNC_ID + 21),
503*4882a593Smuzhiyun 
504*4882a593Smuzhiyun #ifdef BASE_LEGACY_UK8_SUPPORT
505*4882a593Smuzhiyun 	KBASE_FUNC_KEEP_GPU_POWERED = (UK_FUNC_ID + 22),
506*4882a593Smuzhiyun #endif /* BASE_LEGACY_UK8_SUPPORT */
507*4882a593Smuzhiyun 
508*4882a593Smuzhiyun 	KBASE_FUNC_FENCE_VALIDATE = (UK_FUNC_ID + 23),
509*4882a593Smuzhiyun 	KBASE_FUNC_STREAM_CREATE = (UK_FUNC_ID + 24),
510*4882a593Smuzhiyun 	KBASE_FUNC_GET_PROFILING_CONTROLS = (UK_FUNC_ID + 25),
511*4882a593Smuzhiyun 	KBASE_FUNC_SET_PROFILING_CONTROLS = (UK_FUNC_ID + 26),
512*4882a593Smuzhiyun 					    /* to be used only for testing
513*4882a593Smuzhiyun 					    * purposes, otherwise these controls
514*4882a593Smuzhiyun 					    * are set through gator API */
515*4882a593Smuzhiyun 
516*4882a593Smuzhiyun 	KBASE_FUNC_DEBUGFS_MEM_PROFILE_ADD = (UK_FUNC_ID + 27),
517*4882a593Smuzhiyun 	KBASE_FUNC_JOB_SUBMIT = (UK_FUNC_ID + 28),
518*4882a593Smuzhiyun 	KBASE_FUNC_DISJOINT_QUERY = (UK_FUNC_ID + 29),
519*4882a593Smuzhiyun 
520*4882a593Smuzhiyun 	KBASE_FUNC_GET_CONTEXT_ID = (UK_FUNC_ID + 31),
521*4882a593Smuzhiyun 
522*4882a593Smuzhiyun 	KBASE_FUNC_TLSTREAM_ACQUIRE_V10_4 = (UK_FUNC_ID + 32),
523*4882a593Smuzhiyun #if MALI_UNIT_TEST
524*4882a593Smuzhiyun 	KBASE_FUNC_TLSTREAM_TEST = (UK_FUNC_ID + 33),
525*4882a593Smuzhiyun 	KBASE_FUNC_TLSTREAM_STATS = (UK_FUNC_ID + 34),
526*4882a593Smuzhiyun #endif /* MALI_UNIT_TEST */
527*4882a593Smuzhiyun 	KBASE_FUNC_TLSTREAM_FLUSH = (UK_FUNC_ID + 35),
528*4882a593Smuzhiyun 
529*4882a593Smuzhiyun 	KBASE_FUNC_HWCNT_READER_SETUP = (UK_FUNC_ID + 36),
530*4882a593Smuzhiyun 
531*4882a593Smuzhiyun #ifdef SUPPORT_MALI_NO_MALI
532*4882a593Smuzhiyun 	KBASE_FUNC_SET_PRFCNT_VALUES = (UK_FUNC_ID + 37),
533*4882a593Smuzhiyun #endif
534*4882a593Smuzhiyun 
535*4882a593Smuzhiyun 	KBASE_FUNC_SOFT_EVENT_UPDATE = (UK_FUNC_ID + 38),
536*4882a593Smuzhiyun 
537*4882a593Smuzhiyun 	KBASE_FUNC_MEM_JIT_INIT = (UK_FUNC_ID + 39),
538*4882a593Smuzhiyun 
539*4882a593Smuzhiyun 	KBASE_FUNC_TLSTREAM_ACQUIRE = (UK_FUNC_ID + 40),
540*4882a593Smuzhiyun 
541*4882a593Smuzhiyun 	KBASE_FUNC_MAX
542*4882a593Smuzhiyun };
543*4882a593Smuzhiyun 
544*4882a593Smuzhiyun #endif				/* _KBASE_UKU_H_ */
545*4882a593Smuzhiyun 
546