Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/uapi/drm/tegra_drm.h
26282 views
1
/* SPDX-License-Identifier: MIT */
2
/* Copyright (c) 2012-2020 NVIDIA Corporation */
3
4
#ifndef _UAPI_TEGRA_DRM_H_
5
#define _UAPI_TEGRA_DRM_H_
6
7
#include "drm.h"
8
9
#if defined(__cplusplus)
10
extern "C" {
11
#endif
12
13
/* Tegra DRM legacy UAPI. Only enabled with STAGING */
14
15
#define DRM_TEGRA_GEM_CREATE_TILED (1 << 0)
16
#define DRM_TEGRA_GEM_CREATE_BOTTOM_UP (1 << 1)
17
18
/**
19
* struct drm_tegra_gem_create - parameters for the GEM object creation IOCTL
20
*/
21
struct drm_tegra_gem_create {
22
/**
23
* @size:
24
*
25
* The size, in bytes, of the buffer object to be created.
26
*/
27
__u64 size;
28
29
/**
30
* @flags:
31
*
32
* A bitmask of flags that influence the creation of GEM objects:
33
*
34
* DRM_TEGRA_GEM_CREATE_TILED
35
* Use the 16x16 tiling format for this buffer.
36
*
37
* DRM_TEGRA_GEM_CREATE_BOTTOM_UP
38
* The buffer has a bottom-up layout.
39
*/
40
__u32 flags;
41
42
/**
43
* @handle:
44
*
45
* The handle of the created GEM object. Set by the kernel upon
46
* successful completion of the IOCTL.
47
*/
48
__u32 handle;
49
};
50
51
/**
52
* struct drm_tegra_gem_mmap - parameters for the GEM mmap IOCTL
53
*/
54
struct drm_tegra_gem_mmap {
55
/**
56
* @handle:
57
*
58
* Handle of the GEM object to obtain an mmap offset for.
59
*/
60
__u32 handle;
61
62
/**
63
* @pad:
64
*
65
* Structure padding that may be used in the future. Must be 0.
66
*/
67
__u32 pad;
68
69
/**
70
* @offset:
71
*
72
* The mmap offset for the given GEM object. Set by the kernel upon
73
* successful completion of the IOCTL.
74
*/
75
__u64 offset;
76
};
77
78
/**
79
* struct drm_tegra_syncpt_read - parameters for the read syncpoint IOCTL
80
*/
81
struct drm_tegra_syncpt_read {
82
/**
83
* @id:
84
*
85
* ID of the syncpoint to read the current value from.
86
*/
87
__u32 id;
88
89
/**
90
* @value:
91
*
92
* The current syncpoint value. Set by the kernel upon successful
93
* completion of the IOCTL.
94
*/
95
__u32 value;
96
};
97
98
/**
99
* struct drm_tegra_syncpt_incr - parameters for the increment syncpoint IOCTL
100
*/
101
struct drm_tegra_syncpt_incr {
102
/**
103
* @id:
104
*
105
* ID of the syncpoint to increment.
106
*/
107
__u32 id;
108
109
/**
110
* @pad:
111
*
112
* Structure padding that may be used in the future. Must be 0.
113
*/
114
__u32 pad;
115
};
116
117
/**
118
* struct drm_tegra_syncpt_wait - parameters for the wait syncpoint IOCTL
119
*/
120
struct drm_tegra_syncpt_wait {
121
/**
122
* @id:
123
*
124
* ID of the syncpoint to wait on.
125
*/
126
__u32 id;
127
128
/**
129
* @thresh:
130
*
131
* Threshold value for which to wait.
132
*/
133
__u32 thresh;
134
135
/**
136
* @timeout:
137
*
138
* Timeout, in milliseconds, to wait.
139
*/
140
__u32 timeout;
141
142
/**
143
* @value:
144
*
145
* The new syncpoint value after the wait. Set by the kernel upon
146
* successful completion of the IOCTL.
147
*/
148
__u32 value;
149
};
150
151
#define DRM_TEGRA_NO_TIMEOUT (0xffffffff)
152
153
/**
154
* struct drm_tegra_open_channel - parameters for the open channel IOCTL
155
*/
156
struct drm_tegra_open_channel {
157
/**
158
* @client:
159
*
160
* The client ID for this channel.
161
*/
162
__u32 client;
163
164
/**
165
* @pad:
166
*
167
* Structure padding that may be used in the future. Must be 0.
168
*/
169
__u32 pad;
170
171
/**
172
* @context:
173
*
174
* The application context of this channel. Set by the kernel upon
175
* successful completion of the IOCTL. This context needs to be passed
176
* to the DRM_TEGRA_CHANNEL_CLOSE or the DRM_TEGRA_SUBMIT IOCTLs.
177
*/
178
__u64 context;
179
};
180
181
/**
182
* struct drm_tegra_close_channel - parameters for the close channel IOCTL
183
*/
184
struct drm_tegra_close_channel {
185
/**
186
* @context:
187
*
188
* The application context of this channel. This is obtained from the
189
* DRM_TEGRA_OPEN_CHANNEL IOCTL.
190
*/
191
__u64 context;
192
};
193
194
/**
195
* struct drm_tegra_get_syncpt - parameters for the get syncpoint IOCTL
196
*/
197
struct drm_tegra_get_syncpt {
198
/**
199
* @context:
200
*
201
* The application context identifying the channel for which to obtain
202
* the syncpoint ID.
203
*/
204
__u64 context;
205
206
/**
207
* @index:
208
*
209
* Index of the client syncpoint for which to obtain the ID.
210
*/
211
__u32 index;
212
213
/**
214
* @id:
215
*
216
* The ID of the given syncpoint. Set by the kernel upon successful
217
* completion of the IOCTL.
218
*/
219
__u32 id;
220
};
221
222
/**
223
* struct drm_tegra_get_syncpt_base - parameters for the get wait base IOCTL
224
*/
225
struct drm_tegra_get_syncpt_base {
226
/**
227
* @context:
228
*
229
* The application context identifying for which channel to obtain the
230
* wait base.
231
*/
232
__u64 context;
233
234
/**
235
* @syncpt:
236
*
237
* ID of the syncpoint for which to obtain the wait base.
238
*/
239
__u32 syncpt;
240
241
/**
242
* @id:
243
*
244
* The ID of the wait base corresponding to the client syncpoint. Set
245
* by the kernel upon successful completion of the IOCTL.
246
*/
247
__u32 id;
248
};
249
250
/**
251
* struct drm_tegra_syncpt - syncpoint increment operation
252
*/
253
struct drm_tegra_syncpt {
254
/**
255
* @id:
256
*
257
* ID of the syncpoint to operate on.
258
*/
259
__u32 id;
260
261
/**
262
* @incrs:
263
*
264
* Number of increments to perform for the syncpoint.
265
*/
266
__u32 incrs;
267
};
268
269
/**
270
* struct drm_tegra_cmdbuf - structure describing a command buffer
271
*/
272
struct drm_tegra_cmdbuf {
273
/**
274
* @handle:
275
*
276
* Handle to a GEM object containing the command buffer.
277
*/
278
__u32 handle;
279
280
/**
281
* @offset:
282
*
283
* Offset, in bytes, into the GEM object identified by @handle at
284
* which the command buffer starts.
285
*/
286
__u32 offset;
287
288
/**
289
* @words:
290
*
291
* Number of 32-bit words in this command buffer.
292
*/
293
__u32 words;
294
295
/**
296
* @pad:
297
*
298
* Structure padding that may be used in the future. Must be 0.
299
*/
300
__u32 pad;
301
};
302
303
/**
304
* struct drm_tegra_reloc - GEM object relocation structure
305
*/
306
struct drm_tegra_reloc {
307
struct {
308
/**
309
* @cmdbuf.handle:
310
*
311
* Handle to the GEM object containing the command buffer for
312
* which to perform this GEM object relocation.
313
*/
314
__u32 handle;
315
316
/**
317
* @cmdbuf.offset:
318
*
319
* Offset, in bytes, into the command buffer at which to
320
* insert the relocated address.
321
*/
322
__u32 offset;
323
} cmdbuf;
324
struct {
325
/**
326
* @target.handle:
327
*
328
* Handle to the GEM object to be relocated.
329
*/
330
__u32 handle;
331
332
/**
333
* @target.offset:
334
*
335
* Offset, in bytes, into the target GEM object at which the
336
* relocated data starts.
337
*/
338
__u32 offset;
339
} target;
340
341
/**
342
* @shift:
343
*
344
* The number of bits by which to shift relocated addresses.
345
*/
346
__u32 shift;
347
348
/**
349
* @pad:
350
*
351
* Structure padding that may be used in the future. Must be 0.
352
*/
353
__u32 pad;
354
};
355
356
/**
357
* struct drm_tegra_waitchk - wait check structure
358
*/
359
struct drm_tegra_waitchk {
360
/**
361
* @handle:
362
*
363
* Handle to the GEM object containing a command stream on which to
364
* perform the wait check.
365
*/
366
__u32 handle;
367
368
/**
369
* @offset:
370
*
371
* Offset, in bytes, of the location in the command stream to perform
372
* the wait check on.
373
*/
374
__u32 offset;
375
376
/**
377
* @syncpt:
378
*
379
* ID of the syncpoint to wait check.
380
*/
381
__u32 syncpt;
382
383
/**
384
* @thresh:
385
*
386
* Threshold value for which to check.
387
*/
388
__u32 thresh;
389
};
390
391
/**
392
* struct drm_tegra_submit - job submission structure
393
*/
394
struct drm_tegra_submit {
395
/**
396
* @context:
397
*
398
* The application context identifying the channel to use for the
399
* execution of this job.
400
*/
401
__u64 context;
402
403
/**
404
* @num_syncpts:
405
*
406
* The number of syncpoints operated on by this job. This defines the
407
* length of the array pointed to by @syncpts.
408
*/
409
__u32 num_syncpts;
410
411
/**
412
* @num_cmdbufs:
413
*
414
* The number of command buffers to execute as part of this job. This
415
* defines the length of the array pointed to by @cmdbufs.
416
*/
417
__u32 num_cmdbufs;
418
419
/**
420
* @num_relocs:
421
*
422
* The number of relocations to perform before executing this job.
423
* This defines the length of the array pointed to by @relocs.
424
*/
425
__u32 num_relocs;
426
427
/**
428
* @num_waitchks:
429
*
430
* The number of wait checks to perform as part of this job. This
431
* defines the length of the array pointed to by @waitchks.
432
*/
433
__u32 num_waitchks;
434
435
/**
436
* @waitchk_mask:
437
*
438
* Bitmask of valid wait checks.
439
*/
440
__u32 waitchk_mask;
441
442
/**
443
* @timeout:
444
*
445
* Timeout, in milliseconds, before this job is cancelled.
446
*/
447
__u32 timeout;
448
449
/**
450
* @syncpts:
451
*
452
* A pointer to an array of &struct drm_tegra_syncpt structures that
453
* specify the syncpoint operations performed as part of this job.
454
* The number of elements in the array must be equal to the value
455
* given by @num_syncpts.
456
*/
457
__u64 syncpts;
458
459
/**
460
* @cmdbufs:
461
*
462
* A pointer to an array of &struct drm_tegra_cmdbuf structures that
463
* define the command buffers to execute as part of this job. The
464
* number of elements in the array must be equal to the value given
465
* by @num_syncpts.
466
*/
467
__u64 cmdbufs;
468
469
/**
470
* @relocs:
471
*
472
* A pointer to an array of &struct drm_tegra_reloc structures that
473
* specify the relocations that need to be performed before executing
474
* this job. The number of elements in the array must be equal to the
475
* value given by @num_relocs.
476
*/
477
__u64 relocs;
478
479
/**
480
* @waitchks:
481
*
482
* A pointer to an array of &struct drm_tegra_waitchk structures that
483
* specify the wait checks to be performed while executing this job.
484
* The number of elements in the array must be equal to the value
485
* given by @num_waitchks.
486
*/
487
__u64 waitchks;
488
489
/**
490
* @fence:
491
*
492
* The threshold of the syncpoint associated with this job after it
493
* has been completed. Set by the kernel upon successful completion of
494
* the IOCTL. This can be used with the DRM_TEGRA_SYNCPT_WAIT IOCTL to
495
* wait for this job to be finished.
496
*/
497
__u32 fence;
498
499
/**
500
* @reserved:
501
*
502
* This field is reserved for future use. Must be 0.
503
*/
504
__u32 reserved[5];
505
};
506
507
#define DRM_TEGRA_GEM_TILING_MODE_PITCH 0
508
#define DRM_TEGRA_GEM_TILING_MODE_TILED 1
509
#define DRM_TEGRA_GEM_TILING_MODE_BLOCK 2
510
511
/**
512
* struct drm_tegra_gem_set_tiling - parameters for the set tiling IOCTL
513
*/
514
struct drm_tegra_gem_set_tiling {
515
/**
516
* @handle:
517
*
518
* Handle to the GEM object for which to set the tiling parameters.
519
*/
520
__u32 handle;
521
522
/**
523
* @mode:
524
*
525
* The tiling mode to set. Must be one of:
526
*
527
* DRM_TEGRA_GEM_TILING_MODE_PITCH
528
* pitch linear format
529
*
530
* DRM_TEGRA_GEM_TILING_MODE_TILED
531
* 16x16 tiling format
532
*
533
* DRM_TEGRA_GEM_TILING_MODE_BLOCK
534
* 16Bx2 tiling format
535
*/
536
__u32 mode;
537
538
/**
539
* @value:
540
*
541
* The value to set for the tiling mode parameter.
542
*/
543
__u32 value;
544
545
/**
546
* @pad:
547
*
548
* Structure padding that may be used in the future. Must be 0.
549
*/
550
__u32 pad;
551
};
552
553
/**
554
* struct drm_tegra_gem_get_tiling - parameters for the get tiling IOCTL
555
*/
556
struct drm_tegra_gem_get_tiling {
557
/**
558
* @handle:
559
*
560
* Handle to the GEM object for which to query the tiling parameters.
561
*/
562
__u32 handle;
563
564
/**
565
* @mode:
566
*
567
* The tiling mode currently associated with the GEM object. Set by
568
* the kernel upon successful completion of the IOCTL.
569
*/
570
__u32 mode;
571
572
/**
573
* @value:
574
*
575
* The tiling mode parameter currently associated with the GEM object.
576
* Set by the kernel upon successful completion of the IOCTL.
577
*/
578
__u32 value;
579
580
/**
581
* @pad:
582
*
583
* Structure padding that may be used in the future. Must be 0.
584
*/
585
__u32 pad;
586
};
587
588
#define DRM_TEGRA_GEM_BOTTOM_UP (1 << 0)
589
#define DRM_TEGRA_GEM_FLAGS (DRM_TEGRA_GEM_BOTTOM_UP)
590
591
/**
592
* struct drm_tegra_gem_set_flags - parameters for the set flags IOCTL
593
*/
594
struct drm_tegra_gem_set_flags {
595
/**
596
* @handle:
597
*
598
* Handle to the GEM object for which to set the flags.
599
*/
600
__u32 handle;
601
602
/**
603
* @flags:
604
*
605
* The flags to set for the GEM object.
606
*/
607
__u32 flags;
608
};
609
610
/**
611
* struct drm_tegra_gem_get_flags - parameters for the get flags IOCTL
612
*/
613
struct drm_tegra_gem_get_flags {
614
/**
615
* @handle:
616
*
617
* Handle to the GEM object for which to query the flags.
618
*/
619
__u32 handle;
620
621
/**
622
* @flags:
623
*
624
* The flags currently associated with the GEM object. Set by the
625
* kernel upon successful completion of the IOCTL.
626
*/
627
__u32 flags;
628
};
629
630
#define DRM_TEGRA_GEM_CREATE 0x00
631
#define DRM_TEGRA_GEM_MMAP 0x01
632
#define DRM_TEGRA_SYNCPT_READ 0x02
633
#define DRM_TEGRA_SYNCPT_INCR 0x03
634
#define DRM_TEGRA_SYNCPT_WAIT 0x04
635
#define DRM_TEGRA_OPEN_CHANNEL 0x05
636
#define DRM_TEGRA_CLOSE_CHANNEL 0x06
637
#define DRM_TEGRA_GET_SYNCPT 0x07
638
#define DRM_TEGRA_SUBMIT 0x08
639
#define DRM_TEGRA_GET_SYNCPT_BASE 0x09
640
#define DRM_TEGRA_GEM_SET_TILING 0x0a
641
#define DRM_TEGRA_GEM_GET_TILING 0x0b
642
#define DRM_TEGRA_GEM_SET_FLAGS 0x0c
643
#define DRM_TEGRA_GEM_GET_FLAGS 0x0d
644
645
#define DRM_IOCTL_TEGRA_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_CREATE, struct drm_tegra_gem_create)
646
#define DRM_IOCTL_TEGRA_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_MMAP, struct drm_tegra_gem_mmap)
647
#define DRM_IOCTL_TEGRA_SYNCPT_READ DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_READ, struct drm_tegra_syncpt_read)
648
#define DRM_IOCTL_TEGRA_SYNCPT_INCR DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_INCR, struct drm_tegra_syncpt_incr)
649
#define DRM_IOCTL_TEGRA_SYNCPT_WAIT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SYNCPT_WAIT, struct drm_tegra_syncpt_wait)
650
#define DRM_IOCTL_TEGRA_OPEN_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_OPEN_CHANNEL, struct drm_tegra_open_channel)
651
#define DRM_IOCTL_TEGRA_CLOSE_CHANNEL DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_CLOSE_CHANNEL, struct drm_tegra_close_channel)
652
#define DRM_IOCTL_TEGRA_GET_SYNCPT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_SYNCPT, struct drm_tegra_get_syncpt)
653
#define DRM_IOCTL_TEGRA_SUBMIT DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_SUBMIT, struct drm_tegra_submit)
654
#define DRM_IOCTL_TEGRA_GET_SYNCPT_BASE DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GET_SYNCPT_BASE, struct drm_tegra_get_syncpt_base)
655
#define DRM_IOCTL_TEGRA_GEM_SET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_SET_TILING, struct drm_tegra_gem_set_tiling)
656
#define DRM_IOCTL_TEGRA_GEM_GET_TILING DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_GET_TILING, struct drm_tegra_gem_get_tiling)
657
#define DRM_IOCTL_TEGRA_GEM_SET_FLAGS DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_SET_FLAGS, struct drm_tegra_gem_set_flags)
658
#define DRM_IOCTL_TEGRA_GEM_GET_FLAGS DRM_IOWR(DRM_COMMAND_BASE + DRM_TEGRA_GEM_GET_FLAGS, struct drm_tegra_gem_get_flags)
659
660
/* New Tegra DRM UAPI */
661
662
/*
663
* Reported by the driver in the `capabilities` field.
664
*
665
* DRM_TEGRA_CHANNEL_CAP_CACHE_COHERENT: If set, the engine is cache coherent
666
* with regard to the system memory.
667
*/
668
#define DRM_TEGRA_CHANNEL_CAP_CACHE_COHERENT (1 << 0)
669
670
struct drm_tegra_channel_open {
671
/**
672
* @host1x_class: [in]
673
*
674
* Host1x class of the engine that will be programmed using this
675
* channel.
676
*/
677
__u32 host1x_class;
678
679
/**
680
* @flags: [in]
681
*
682
* Flags.
683
*/
684
__u32 flags;
685
686
/**
687
* @context: [out]
688
*
689
* Opaque identifier corresponding to the opened channel.
690
*/
691
__u32 context;
692
693
/**
694
* @version: [out]
695
*
696
* Version of the engine hardware. This can be used by userspace
697
* to determine how the engine needs to be programmed.
698
*/
699
__u32 version;
700
701
/**
702
* @capabilities: [out]
703
*
704
* Flags describing the hardware capabilities.
705
*/
706
__u32 capabilities;
707
__u32 padding;
708
};
709
710
struct drm_tegra_channel_close {
711
/**
712
* @context: [in]
713
*
714
* Identifier of the channel to close.
715
*/
716
__u32 context;
717
__u32 padding;
718
};
719
720
/*
721
* Mapping flags that can be used to influence how the mapping is created.
722
*
723
* DRM_TEGRA_CHANNEL_MAP_READ: create mapping that allows HW read access
724
* DRM_TEGRA_CHANNEL_MAP_WRITE: create mapping that allows HW write access
725
*/
726
#define DRM_TEGRA_CHANNEL_MAP_READ (1 << 0)
727
#define DRM_TEGRA_CHANNEL_MAP_WRITE (1 << 1)
728
#define DRM_TEGRA_CHANNEL_MAP_READ_WRITE (DRM_TEGRA_CHANNEL_MAP_READ | \
729
DRM_TEGRA_CHANNEL_MAP_WRITE)
730
731
struct drm_tegra_channel_map {
732
/**
733
* @context: [in]
734
*
735
* Identifier of the channel to which make memory available for.
736
*/
737
__u32 context;
738
739
/**
740
* @handle: [in]
741
*
742
* GEM handle of the memory to map.
743
*/
744
__u32 handle;
745
746
/**
747
* @flags: [in]
748
*
749
* Flags.
750
*/
751
__u32 flags;
752
753
/**
754
* @mapping: [out]
755
*
756
* Identifier corresponding to the mapping, to be used for
757
* relocations or unmapping later.
758
*/
759
__u32 mapping;
760
};
761
762
struct drm_tegra_channel_unmap {
763
/**
764
* @context: [in]
765
*
766
* Channel identifier of the channel to unmap memory from.
767
*/
768
__u32 context;
769
770
/**
771
* @mapping: [in]
772
*
773
* Mapping identifier of the memory mapping to unmap.
774
*/
775
__u32 mapping;
776
};
777
778
/* Submission */
779
780
/**
781
* Specify that bit 39 of the patched-in address should be set to switch
782
* swizzling between Tegra and non-Tegra sector layout on systems that store
783
* surfaces in system memory in non-Tegra sector layout.
784
*/
785
#define DRM_TEGRA_SUBMIT_RELOC_SECTOR_LAYOUT (1 << 0)
786
787
struct drm_tegra_submit_buf {
788
/**
789
* @mapping: [in]
790
*
791
* Identifier of the mapping to use in the submission.
792
*/
793
__u32 mapping;
794
795
/**
796
* @flags: [in]
797
*
798
* Flags.
799
*/
800
__u32 flags;
801
802
/**
803
* Information for relocation patching.
804
*/
805
struct {
806
/**
807
* @target_offset: [in]
808
*
809
* Offset from the start of the mapping of the data whose
810
* address is to be patched into the gather.
811
*/
812
__u64 target_offset;
813
814
/**
815
* @gather_offset_words: [in]
816
*
817
* Offset in words from the start of the gather data to
818
* where the address should be patched into.
819
*/
820
__u32 gather_offset_words;
821
822
/**
823
* @shift: [in]
824
*
825
* Number of bits the address should be shifted right before
826
* patching in.
827
*/
828
__u32 shift;
829
} reloc;
830
};
831
832
/**
833
* Execute `words` words of Host1x opcodes specified in the `gather_data_ptr`
834
* buffer. Each GATHER_UPTR command uses successive words from the buffer.
835
*/
836
#define DRM_TEGRA_SUBMIT_CMD_GATHER_UPTR 0
837
/**
838
* Wait for a syncpoint to reach a value before continuing with further
839
* commands.
840
*/
841
#define DRM_TEGRA_SUBMIT_CMD_WAIT_SYNCPT 1
842
/**
843
* Wait for a syncpoint to reach a value before continuing with further
844
* commands. The threshold is calculated relative to the start of the job.
845
*/
846
#define DRM_TEGRA_SUBMIT_CMD_WAIT_SYNCPT_RELATIVE 2
847
848
struct drm_tegra_submit_cmd_gather_uptr {
849
__u32 words;
850
__u32 reserved[3];
851
};
852
853
struct drm_tegra_submit_cmd_wait_syncpt {
854
__u32 id;
855
__u32 value;
856
__u32 reserved[2];
857
};
858
859
struct drm_tegra_submit_cmd {
860
/**
861
* @type: [in]
862
*
863
* Command type to execute. One of the DRM_TEGRA_SUBMIT_CMD*
864
* defines.
865
*/
866
__u32 type;
867
868
/**
869
* @flags: [in]
870
*
871
* Flags.
872
*/
873
__u32 flags;
874
875
union {
876
struct drm_tegra_submit_cmd_gather_uptr gather_uptr;
877
struct drm_tegra_submit_cmd_wait_syncpt wait_syncpt;
878
__u32 reserved[4];
879
};
880
};
881
882
struct drm_tegra_submit_syncpt {
883
/**
884
* @id: [in]
885
*
886
* ID of the syncpoint that the job will increment.
887
*/
888
__u32 id;
889
890
/**
891
* @flags: [in]
892
*
893
* Flags.
894
*/
895
__u32 flags;
896
897
/**
898
* @increments: [in]
899
*
900
* Number of times the job will increment this syncpoint.
901
*/
902
__u32 increments;
903
904
/**
905
* @value: [out]
906
*
907
* Value the syncpoint will have once the job has completed all
908
* its specified syncpoint increments.
909
*
910
* Note that the kernel may increment the syncpoint before or after
911
* the job. These increments are not reflected in this field.
912
*
913
* If the job hangs or times out, not all of the increments may
914
* get executed.
915
*/
916
__u32 value;
917
};
918
919
struct drm_tegra_channel_submit {
920
/**
921
* @context: [in]
922
*
923
* Identifier of the channel to submit this job to.
924
*/
925
__u32 context;
926
927
/**
928
* @num_bufs: [in]
929
*
930
* Number of elements in the `bufs_ptr` array.
931
*/
932
__u32 num_bufs;
933
934
/**
935
* @num_cmds: [in]
936
*
937
* Number of elements in the `cmds_ptr` array.
938
*/
939
__u32 num_cmds;
940
941
/**
942
* @gather_data_words: [in]
943
*
944
* Number of 32-bit words in the `gather_data_ptr` array.
945
*/
946
__u32 gather_data_words;
947
948
/**
949
* @bufs_ptr: [in]
950
*
951
* Pointer to an array of drm_tegra_submit_buf structures.
952
*/
953
__u64 bufs_ptr;
954
955
/**
956
* @cmds_ptr: [in]
957
*
958
* Pointer to an array of drm_tegra_submit_cmd structures.
959
*/
960
__u64 cmds_ptr;
961
962
/**
963
* @gather_data_ptr: [in]
964
*
965
* Pointer to an array of Host1x opcodes to be used by GATHER_UPTR
966
* commands.
967
*/
968
__u64 gather_data_ptr;
969
970
/**
971
* @syncobj_in: [in]
972
*
973
* Handle for DRM syncobj that will be waited before submission.
974
* Ignored if zero.
975
*/
976
__u32 syncobj_in;
977
978
/**
979
* @syncobj_out: [in]
980
*
981
* Handle for DRM syncobj that will have its fence replaced with
982
* the job's completion fence. Ignored if zero.
983
*/
984
__u32 syncobj_out;
985
986
/**
987
* @syncpt_incr: [in,out]
988
*
989
* Information about the syncpoint the job will increment.
990
*/
991
struct drm_tegra_submit_syncpt syncpt;
992
};
993
994
struct drm_tegra_syncpoint_allocate {
995
/**
996
* @id: [out]
997
*
998
* ID of allocated syncpoint.
999
*/
1000
__u32 id;
1001
__u32 padding;
1002
};
1003
1004
struct drm_tegra_syncpoint_free {
1005
/**
1006
* @id: [in]
1007
*
1008
* ID of syncpoint to free.
1009
*/
1010
__u32 id;
1011
__u32 padding;
1012
};
1013
1014
struct drm_tegra_syncpoint_wait {
1015
/**
1016
* @timeout: [in]
1017
*
1018
* Absolute timestamp at which the wait will time out.
1019
*/
1020
__s64 timeout_ns;
1021
1022
/**
1023
* @id: [in]
1024
*
1025
* ID of syncpoint to wait on.
1026
*/
1027
__u32 id;
1028
1029
/**
1030
* @threshold: [in]
1031
*
1032
* Threshold to wait for.
1033
*/
1034
__u32 threshold;
1035
1036
/**
1037
* @value: [out]
1038
*
1039
* Value of the syncpoint upon wait completion.
1040
*/
1041
__u32 value;
1042
1043
__u32 padding;
1044
};
1045
1046
#define DRM_IOCTL_TEGRA_CHANNEL_OPEN DRM_IOWR(DRM_COMMAND_BASE + 0x10, struct drm_tegra_channel_open)
1047
#define DRM_IOCTL_TEGRA_CHANNEL_CLOSE DRM_IOWR(DRM_COMMAND_BASE + 0x11, struct drm_tegra_channel_close)
1048
#define DRM_IOCTL_TEGRA_CHANNEL_MAP DRM_IOWR(DRM_COMMAND_BASE + 0x12, struct drm_tegra_channel_map)
1049
#define DRM_IOCTL_TEGRA_CHANNEL_UNMAP DRM_IOWR(DRM_COMMAND_BASE + 0x13, struct drm_tegra_channel_unmap)
1050
#define DRM_IOCTL_TEGRA_CHANNEL_SUBMIT DRM_IOWR(DRM_COMMAND_BASE + 0x14, struct drm_tegra_channel_submit)
1051
1052
#define DRM_IOCTL_TEGRA_SYNCPOINT_ALLOCATE DRM_IOWR(DRM_COMMAND_BASE + 0x20, struct drm_tegra_syncpoint_allocate)
1053
#define DRM_IOCTL_TEGRA_SYNCPOINT_FREE DRM_IOWR(DRM_COMMAND_BASE + 0x21, struct drm_tegra_syncpoint_free)
1054
#define DRM_IOCTL_TEGRA_SYNCPOINT_WAIT DRM_IOWR(DRM_COMMAND_BASE + 0x22, struct drm_tegra_syncpoint_wait)
1055
1056
#if defined(__cplusplus)
1057
}
1058
#endif
1059
1060
#endif
1061
1062