Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/include/drm-uapi/tegra_drm.h
4547 views
1
/*
2
* Copyright (c) 2012-2013, NVIDIA CORPORATION. All rights reserved.
3
*
4
* Permission is hereby granted, free of charge, to any person obtaining a
5
* copy of this software and associated documentation files (the "Software"),
6
* to deal in the Software without restriction, including without limitation
7
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
* and/or sell copies of the Software, and to permit persons to whom the
9
* Software is furnished to do so, subject to the following conditions:
10
*
11
* The above copyright notice and this permission notice shall be included in
12
* all copies or substantial portions of the Software.
13
*
14
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20
* OTHER DEALINGS IN THE SOFTWARE.
21
*/
22
23
#ifndef _TEGRA_DRM_H_
24
#define _TEGRA_DRM_H_
25
26
#include "drm.h"
27
28
#if defined(__cplusplus)
29
extern "C" {
30
#endif
31
32
#define DRM_TEGRA_GEM_CREATE_TILED (1 << 0)
33
#define DRM_TEGRA_GEM_CREATE_BOTTOM_UP (1 << 1)
34
35
/**
36
* struct drm_tegra_gem_create - parameters for the GEM object creation IOCTL
37
*/
38
struct drm_tegra_gem_create {
39
/**
40
* @size:
41
*
42
* The size, in bytes, of the buffer object to be created.
43
*/
44
__u64 size;
45
46
/**
47
* @flags:
48
*
49
* A bitmask of flags that influence the creation of GEM objects:
50
*
51
* DRM_TEGRA_GEM_CREATE_TILED
52
* Use the 16x16 tiling format for this buffer.
53
*
54
* DRM_TEGRA_GEM_CREATE_BOTTOM_UP
55
* The buffer has a bottom-up layout.
56
*/
57
__u32 flags;
58
59
/**
60
* @handle:
61
*
62
* The handle of the created GEM object. Set by the kernel upon
63
* successful completion of the IOCTL.
64
*/
65
__u32 handle;
66
};
67
68
/**
69
* struct drm_tegra_gem_mmap - parameters for the GEM mmap IOCTL
70
*/
71
struct drm_tegra_gem_mmap {
72
/**
73
* @handle:
74
*
75
* Handle of the GEM object to obtain an mmap offset for.
76
*/
77
__u32 handle;
78
79
/**
80
* @pad:
81
*
82
* Structure padding that may be used in the future. Must be 0.
83
*/
84
__u32 pad;
85
86
/**
87
* @offset:
88
*
89
* The mmap offset for the given GEM object. Set by the kernel upon
90
* successful completion of the IOCTL.
91
*/
92
__u64 offset;
93
};
94
95
/**
96
* struct drm_tegra_syncpt_read - parameters for the read syncpoint IOCTL
97
*/
98
struct drm_tegra_syncpt_read {
99
/**
100
* @id:
101
*
102
* ID of the syncpoint to read the current value from.
103
*/
104
__u32 id;
105
106
/**
107
* @value:
108
*
109
* The current syncpoint value. Set by the kernel upon successful
110
* completion of the IOCTL.
111
*/
112
__u32 value;
113
};
114
115
/**
116
* struct drm_tegra_syncpt_incr - parameters for the increment syncpoint IOCTL
117
*/
118
struct drm_tegra_syncpt_incr {
119
/**
120
* @id:
121
*
122
* ID of the syncpoint to increment.
123
*/
124
__u32 id;
125
126
/**
127
* @pad:
128
*
129
* Structure padding that may be used in the future. Must be 0.
130
*/
131
__u32 pad;
132
};
133
134
/**
135
* struct drm_tegra_syncpt_wait - parameters for the wait syncpoint IOCTL
136
*/
137
struct drm_tegra_syncpt_wait {
138
/**
139
* @id:
140
*
141
* ID of the syncpoint to wait on.
142
*/
143
__u32 id;
144
145
/**
146
* @thresh:
147
*
148
* Threshold value for which to wait.
149
*/
150
__u32 thresh;
151
152
/**
153
* @timeout:
154
*
155
* Timeout, in milliseconds, to wait.
156
*/
157
__u32 timeout;
158
159
/**
160
* @value:
161
*
162
* The new syncpoint value after the wait. Set by the kernel upon
163
* successful completion of the IOCTL.
164
*/
165
__u32 value;
166
};
167
168
#define DRM_TEGRA_NO_TIMEOUT (0xffffffff)
169
170
/**
171
* struct drm_tegra_open_channel - parameters for the open channel IOCTL
172
*/
173
struct drm_tegra_open_channel {
174
/**
175
* @client:
176
*
177
* The client ID for this channel.
178
*/
179
__u32 client;
180
181
/**
182
* @pad:
183
*
184
* Structure padding that may be used in the future. Must be 0.
185
*/
186
__u32 pad;
187
188
/**
189
* @context:
190
*
191
* The application context of this channel. Set by the kernel upon
192
* successful completion of the IOCTL. This context needs to be passed
193
* to the DRM_TEGRA_CHANNEL_CLOSE or the DRM_TEGRA_SUBMIT IOCTLs.
194
*/
195
__u64 context;
196
};
197
198
/**
199
* struct drm_tegra_close_channel - parameters for the close channel IOCTL
200
*/
201
struct drm_tegra_close_channel {
202
/**
203
* @context:
204
*
205
* The application context of this channel. This is obtained from the
206
* DRM_TEGRA_OPEN_CHANNEL IOCTL.
207
*/
208
__u64 context;
209
};
210
211
/**
212
* struct drm_tegra_get_syncpt - parameters for the get syncpoint IOCTL
213
*/
214
struct drm_tegra_get_syncpt {
215
/**
216
* @context:
217
*
218
* The application context identifying the channel for which to obtain
219
* the syncpoint ID.
220
*/
221
__u64 context;
222
223
/**
224
* @index:
225
*
226
* Index of the client syncpoint for which to obtain the ID.
227
*/
228
__u32 index;
229
230
/**
231
* @id:
232
*
233
* The ID of the given syncpoint. Set by the kernel upon successful
234
* completion of the IOCTL.
235
*/
236
__u32 id;
237
};
238
239
/**
240
* struct drm_tegra_get_syncpt_base - parameters for the get wait base IOCTL
241
*/
242
struct drm_tegra_get_syncpt_base {
243
/**
244
* @context:
245
*
246
* The application context identifying for which channel to obtain the
247
* wait base.
248
*/
249
__u64 context;
250
251
/**
252
* @syncpt:
253
*
254
* ID of the syncpoint for which to obtain the wait base.
255
*/
256
__u32 syncpt;
257
258
/**
259
* @id:
260
*
261
* The ID of the wait base corresponding to the client syncpoint. Set
262
* by the kernel upon successful completion of the IOCTL.
263
*/
264
__u32 id;
265
};
266
267
/**
268
* struct drm_tegra_syncpt - syncpoint increment operation
269
*/
270
struct drm_tegra_syncpt {
271
/**
272
* @id:
273
*
274
* ID of the syncpoint to operate on.
275
*/
276
__u32 id;
277
278
/**
279
* @incrs:
280
*
281
* Number of increments to perform for the syncpoint.
282
*/
283
__u32 incrs;
284
};
285
286
/**
287
* struct drm_tegra_cmdbuf - structure describing a command buffer
288
*/
289
struct drm_tegra_cmdbuf {
290
/**
291
* @handle:
292
*
293
* Handle to a GEM object containing the command buffer.
294
*/
295
__u32 handle;
296
297
/**
298
* @offset:
299
*
300
* Offset, in bytes, into the GEM object identified by @handle at
301
* which the command buffer starts.
302
*/
303
__u32 offset;
304
305
/**
306
* @words:
307
*
308
* Number of 32-bit words in this command buffer.
309
*/
310
__u32 words;
311
312
/**
313
* @pad:
314
*
315
* Structure padding that may be used in the future. Must be 0.
316
*/
317
__u32 pad;
318
};
319
320
/**
321
* struct drm_tegra_reloc - GEM object relocation structure
322
*/
323
struct drm_tegra_reloc {
324
struct {
325
/**
326
* @cmdbuf.handle:
327
*
328
* Handle to the GEM object containing the command buffer for
329
* which to perform this GEM object relocation.
330
*/
331
__u32 handle;
332
333
/**
334
* @cmdbuf.offset:
335
*
336
* Offset, in bytes, into the command buffer at which to
337
* insert the relocated address.
338
*/
339
__u32 offset;
340
} cmdbuf;
341
struct {
342
/**
343
* @target.handle:
344
*
345
* Handle to the GEM object to be relocated.
346
*/
347
__u32 handle;
348
349
/**
350
* @target.offset:
351
*
352
* Offset, in bytes, into the target GEM object at which the
353
* relocated data starts.
354
*/
355
__u32 offset;
356
} target;
357
358
/**
359
* @shift:
360
*
361
* The number of bits by which to shift relocated addresses.
362
*/
363
__u32 shift;
364
365
/**
366
* @pad:
367
*
368
* Structure padding that may be used in the future. Must be 0.
369
*/
370
__u32 pad;
371
};
372
373
/**
374
* struct drm_tegra_waitchk - wait check structure
375
*/
376
struct drm_tegra_waitchk {
377
/**
378
* @handle:
379
*
380
* Handle to the GEM object containing a command stream on which to
381
* perform the wait check.
382
*/
383
__u32 handle;
384
385
/**
386
* @offset:
387
*
388
* Offset, in bytes, of the location in the command stream to perform
389
* the wait check on.
390
*/
391
__u32 offset;
392
393
/**
394
* @syncpt:
395
*
396
* ID of the syncpoint to wait check.
397
*/
398
__u32 syncpt;
399
400
/**
401
* @thresh:
402
*
403
* Threshold value for which to check.
404
*/
405
__u32 thresh;
406
};
407
408
/**
409
* struct drm_tegra_submit - job submission structure
410
*/
411
struct drm_tegra_submit {
412
/**
413
* @context:
414
*
415
* The application context identifying the channel to use for the
416
* execution of this job.
417
*/
418
__u64 context;
419
420
/**
421
* @num_syncpts:
422
*
423
* The number of syncpoints operated on by this job. This defines the
424
* length of the array pointed to by @syncpts.
425
*/
426
__u32 num_syncpts;
427
428
/**
429
* @num_cmdbufs:
430
*
431
* The number of command buffers to execute as part of this job. This
432
* defines the length of the array pointed to by @cmdbufs.
433
*/
434
__u32 num_cmdbufs;
435
436
/**
437
* @num_relocs:
438
*
439
* The number of relocations to perform before executing this job.
440
* This defines the length of the array pointed to by @relocs.
441
*/
442
__u32 num_relocs;
443
444
/**
445
* @num_waitchks:
446
*
447
* The number of wait checks to perform as part of this job. This
448
* defines the length of the array pointed to by @waitchks.
449
*/
450
__u32 num_waitchks;
451
452
/**
453
* @waitchk_mask:
454
*
455
* Bitmask of valid wait checks.
456
*/
457
__u32 waitchk_mask;
458
459
/**
460
* @timeout:
461
*
462
* Timeout, in milliseconds, before this job is cancelled.
463
*/
464
__u32 timeout;
465
466
/**
467
* @syncpts:
468
*
469
* A pointer to an array of &struct drm_tegra_syncpt structures that
470
* specify the syncpoint operations performed as part of this job.
471
* The number of elements in the array must be equal to the value
472
* given by @num_syncpts.
473
*/
474
__u64 syncpts;
475
476
/**
477
* @cmdbufs:
478
*
479
* A pointer to an array of &struct drm_tegra_cmdbuf structures that
480
* define the command buffers to execute as part of this job. The
481
* number of elements in the array must be equal to the value given
482
* by @num_syncpts.
483
*/
484
__u64 cmdbufs;
485
486
/**
487
* @relocs:
488
*
489
* A pointer to an array of &struct drm_tegra_reloc structures that
490
* specify the relocations that need to be performed before executing
491
* this job. The number of elements in the array must be equal to the
492
* value given by @num_relocs.
493
*/
494
__u64 relocs;
495
496
/**
497
* @waitchks:
498
*
499
* A pointer to an array of &struct drm_tegra_waitchk structures that
500
* specify the wait checks to be performed while executing this job.
501
* The number of elements in the array must be equal to the value
502
* given by @num_waitchks.
503
*/
504
__u64 waitchks;
505
506
/**
507
* @fence:
508
*
509
* The threshold of the syncpoint associated with this job after it
510
* has been completed. Set by the kernel upon successful completion of
511
* the IOCTL. This can be used with the DRM_TEGRA_SYNCPT_WAIT IOCTL to
512
* wait for this job to be finished.
513
*/
514
__u32 fence;
515
516
/**
517
* @reserved:
518
*
519
* This field is reserved for future use. Must be 0.
520
*/
521
__u32 reserved[5];
522
};
523
524
#define DRM_TEGRA_GEM_TILING_MODE_PITCH 0
525
#define DRM_TEGRA_GEM_TILING_MODE_TILED 1
526
#define DRM_TEGRA_GEM_TILING_MODE_BLOCK 2
527
528
/**
529
* struct drm_tegra_gem_set_tiling - parameters for the set tiling IOCTL
530
*/
531
struct drm_tegra_gem_set_tiling {
532
/**
533
* @handle:
534
*
535
* Handle to the GEM object for which to set the tiling parameters.
536
*/
537
__u32 handle;
538
539
/**
540
* @mode:
541
*
542
* The tiling mode to set. Must be one of:
543
*
544
* DRM_TEGRA_GEM_TILING_MODE_PITCH
545
* pitch linear format
546
*
547
* DRM_TEGRA_GEM_TILING_MODE_TILED
548
* 16x16 tiling format
549
*
550
* DRM_TEGRA_GEM_TILING_MODE_BLOCK
551
* 16Bx2 tiling format
552
*/
553
__u32 mode;
554
555
/**
556
* @value:
557
*
558
* The value to set for the tiling mode parameter.
559
*/
560
__u32 value;
561
562
/**
563
* @pad:
564
*
565
* Structure padding that may be used in the future. Must be 0.
566
*/
567
__u32 pad;
568
};
569
570
/**
571
* struct drm_tegra_gem_get_tiling - parameters for the get tiling IOCTL
572
*/
573
struct drm_tegra_gem_get_tiling {
574
/**
575
* @handle:
576
*
577
* Handle to the GEM object for which to query the tiling parameters.
578
*/
579
__u32 handle;
580
581
/**
582
* @mode:
583
*
584
* The tiling mode currently associated with the GEM object. Set by
585
* the kernel upon successful completion of the IOCTL.
586
*/
587
__u32 mode;
588
589
/**
590
* @value:
591
*
592
* The tiling mode parameter currently associated with the GEM object.
593
* Set by the kernel upon successful completion of the IOCTL.
594
*/
595
__u32 value;
596
597
/**
598
* @pad:
599
*
600
* Structure padding that may be used in the future. Must be 0.
601
*/
602
__u32 pad;
603
};
604
605
#define DRM_TEGRA_GEM_BOTTOM_UP (1 << 0)
606
#define DRM_TEGRA_GEM_FLAGS (DRM_TEGRA_GEM_BOTTOM_UP)
607
608
/**
609
* struct drm_tegra_gem_set_flags - parameters for the set flags IOCTL
610
*/
611
struct drm_tegra_gem_set_flags {
612
/**
613
* @handle:
614
*
615
* Handle to the GEM object for which to set the flags.
616
*/
617
__u32 handle;
618
619
/**
620
* @flags:
621
*
622
* The flags to set for the GEM object.
623
*/
624
__u32 flags;
625
};
626
627
/**
628
* struct drm_tegra_gem_get_flags - parameters for the get flags IOCTL
629
*/
630
struct drm_tegra_gem_get_flags {
631
/**
632
* @handle:
633
*
634
* Handle to the GEM object for which to query the flags.
635
*/
636
__u32 handle;
637
638
/**
639
* @flags:
640
*
641
* The flags currently associated with the GEM object. Set by the
642
* kernel upon successful completion of the IOCTL.
643
*/
644
__u32 flags;
645
};
646
647
#define DRM_TEGRA_GEM_CREATE 0x00
648
#define DRM_TEGRA_GEM_MMAP 0x01
649
#define DRM_TEGRA_SYNCPT_READ 0x02
650
#define DRM_TEGRA_SYNCPT_INCR 0x03
651
#define DRM_TEGRA_SYNCPT_WAIT 0x04
652
#define DRM_TEGRA_OPEN_CHANNEL 0x05
653
#define DRM_TEGRA_CLOSE_CHANNEL 0x06
654
#define DRM_TEGRA_GET_SYNCPT 0x07
655
#define DRM_TEGRA_SUBMIT 0x08
656
#define DRM_TEGRA_GET_SYNCPT_BASE 0x09
657
#define DRM_TEGRA_GEM_SET_TILING 0x0a
658
#define DRM_TEGRA_GEM_GET_TILING 0x0b
659
#define DRM_TEGRA_GEM_SET_FLAGS 0x0c
660
#define DRM_TEGRA_GEM_GET_FLAGS 0x0d
661
662
#define DRM_IOCTL_TEGRA_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_CREATE, struct drm_tegra_gem_create)
663
#define DRM_IOCTL_TEGRA_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_MMAP, struct drm_tegra_gem_mmap)
664
#define DRM_IOCTL_TEGRA_SYNCPT_READ DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_READ, struct drm_tegra_syncpt_read)
665
#define DRM_IOCTL_TEGRA_SYNCPT_INCR DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_INCR, struct drm_tegra_syncpt_incr)
666
#define DRM_IOCTL_TEGRA_SYNCPT_WAIT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_WAIT, struct drm_tegra_syncpt_wait)
667
#define DRM_IOCTL_TEGRA_OPEN_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_OPEN_CHANNEL, struct drm_tegra_open_channel)
668
#define DRM_IOCTL_TEGRA_CLOSE_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_CLOSE_CHANNEL, struct drm_tegra_close_channel)
669
#define DRM_IOCTL_TEGRA_GET_SYNCPT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_SYNCPT, struct drm_tegra_get_syncpt)
670
#define DRM_IOCTL_TEGRA_SUBMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SUBMIT, struct drm_tegra_submit)
671
#define DRM_IOCTL_TEGRA_GET_SYNCPT_BASE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_SYNCPT_BASE, struct drm_tegra_get_syncpt_base)
672
#define DRM_IOCTL_TEGRA_GEM_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_SET_TILING, struct drm_tegra_gem_set_tiling)
673
#define DRM_IOCTL_TEGRA_GEM_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_GET_TILING, struct drm_tegra_gem_get_tiling)
674
#define DRM_IOCTL_TEGRA_GEM_SET_FLAGS DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_SET_FLAGS, struct drm_tegra_gem_set_flags)
675
#define DRM_IOCTL_TEGRA_GEM_GET_FLAGS DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_GET_FLAGS, struct drm_tegra_gem_get_flags)
676
677
#if defined(__cplusplus)
678
}
679
#endif
680
681
#endif
682
683