XenevaOS
Loading...
Searching...
No Matches
nouveau_drm.h
Go to the documentation of this file.
1/*
2 * Copyright 2005 Stephane Marchesin.
3 * All Rights Reserved.
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice (including the next
13 * paragraph) shall be included in all copies or substantial portions of the
14 * Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 * OTHER DEALINGS IN THE SOFTWARE.
23 */
24
25#ifndef __NOUVEAU_DRM_H__
26#define __NOUVEAU_DRM_H__
27
28#define DRM_NOUVEAU_EVENT_NVIF 0x80000000
29
30#include "drm.h"
31
32#if defined(__cplusplus)
33extern "C" {
34#endif
35
36#define NOUVEAU_GETPARAM_PCI_VENDOR 3
37#define NOUVEAU_GETPARAM_PCI_DEVICE 4
38#define NOUVEAU_GETPARAM_BUS_TYPE 5
39#define NOUVEAU_GETPARAM_FB_SIZE 8
40#define NOUVEAU_GETPARAM_AGP_SIZE 9
41#define NOUVEAU_GETPARAM_CHIPSET_ID 11
42#define NOUVEAU_GETPARAM_VM_VRAM_BASE 12
43#define NOUVEAU_GETPARAM_GRAPH_UNITS 13
44#define NOUVEAU_GETPARAM_PTIMER_TIME 14
45#define NOUVEAU_GETPARAM_HAS_BO_USAGE 15
46#define NOUVEAU_GETPARAM_HAS_PAGEFLIP 16
47
48/*
49 * NOUVEAU_GETPARAM_EXEC_PUSH_MAX - query max pushes through getparam
50 *
51 * Query the maximum amount of IBs that can be pushed through a single
52 * &drm_nouveau_exec structure and hence a single &DRM_IOCTL_NOUVEAU_EXEC
53 * ioctl().
54 */
55#define NOUVEAU_GETPARAM_EXEC_PUSH_MAX 17
56
57/*
58 * NOUVEAU_GETPARAM_VRAM_BAR_SIZE - query bar size
59 *
60 * Query the VRAM BAR size.
61 */
62#define NOUVEAU_GETPARAM_VRAM_BAR_SIZE 18
63
64/*
65 * NOUVEAU_GETPARAM_VRAM_USED
66 *
67 * Get remaining VRAM size.
68 */
69#define NOUVEAU_GETPARAM_VRAM_USED 19
70
71/*
72 * NOUVEAU_GETPARAM_HAS_VMA_TILEMODE
73 *
74 * Query whether tile mode and PTE kind are accepted with VM allocs or not.
75 */
76#define NOUVEAU_GETPARAM_HAS_VMA_TILEMODE 20
77
82
83/*
84 * Those are used to support selecting the main engine used on Kepler.
85 * This goes into drm_nouveau_channel_alloc::tt_ctxdma_handle
86 */
87#define NOUVEAU_FIFO_ENGINE_GR 0x01
88#define NOUVEAU_FIFO_ENGINE_VP 0x02
89#define NOUVEAU_FIFO_ENGINE_PPP 0x04
90#define NOUVEAU_FIFO_ENGINE_BSP 0x08
91#define NOUVEAU_FIFO_ENGINE_CE 0x30
92
96
99
100 /* Notifier memory */
102
103 /* DRM-enforced subchannel assignments */
104 struct {
109};
110
114
121
126
127#define NOUVEAU_GEM_DOMAIN_CPU (1 << 0)
128#define NOUVEAU_GEM_DOMAIN_VRAM (1 << 1)
129#define NOUVEAU_GEM_DOMAIN_GART (1 << 2)
130#define NOUVEAU_GEM_DOMAIN_MAPPABLE (1 << 3)
131#define NOUVEAU_GEM_DOMAIN_COHERENT (1 << 4)
132/* The BO will never be shared via import or export. */
133#define NOUVEAU_GEM_DOMAIN_NO_SHARE (1 << 5)
134
135#define NOUVEAU_GEM_TILE_COMP 0x00030000 /* nv50-only */
136#define NOUVEAU_GEM_TILE_LAYOUT_MASK 0x0000ff00
137#define NOUVEAU_GEM_TILE_16BPP 0x00000001
138#define NOUVEAU_GEM_TILE_32BPP 0x00000002
139#define NOUVEAU_GEM_TILE_ZETA 0x00000004
140#define NOUVEAU_GEM_TILE_NONCONTIG 0x00000008
141
151
157
158#define NOUVEAU_GEM_MAX_BUFFERS 1024
164
173
174#define NOUVEAU_GEM_RELOC_LOW (1 << 0)
175#define NOUVEAU_GEM_RELOC_HIGH (1 << 1)
176#define NOUVEAU_GEM_RELOC_OR (1 << 2)
177#define NOUVEAU_GEM_MAX_RELOCS 1024
187
188#define NOUVEAU_GEM_MAX_PUSH 512
194#define NOUVEAU_GEM_PUSHBUF_NO_PREFETCH (1 << 23)
195};
196
211
212#define NOUVEAU_GEM_CPU_PREP_NOWAIT 0x00000001
213#define NOUVEAU_GEM_CPU_PREP_WRITE 0x00000004
218
222
236#define DRM_NOUVEAU_SYNC_SYNCOBJ 0x0
237#define DRM_NOUVEAU_SYNC_TIMELINE_SYNCOBJ 0x1
238#define DRM_NOUVEAU_SYNC_TYPE_MASK 0xf
250};
251
274
299#define DRM_NOUVEAU_VM_BIND_OP_MAP 0x0
300#define DRM_NOUVEAU_VM_BIND_OP_UNMAP 0x1
310#define DRM_NOUVEAU_VM_BIND_SPARSE (1 << 8)
333};
334
378
398#define DRM_NOUVEAU_EXEC_PUSH_NO_PREFETCH 0x1
399};
400
434
497
498#define DRM_NOUVEAU_GETPARAM 0x00
499#define DRM_NOUVEAU_SETPARAM 0x01 /* deprecated */
500#define DRM_NOUVEAU_CHANNEL_ALLOC 0x02
501#define DRM_NOUVEAU_CHANNEL_FREE 0x03
502#define DRM_NOUVEAU_GROBJ_ALLOC 0x04 /* deprecated */
503#define DRM_NOUVEAU_NOTIFIEROBJ_ALLOC 0x05 /* deprecated */
504#define DRM_NOUVEAU_GPUOBJ_FREE 0x06 /* deprecated */
505#define DRM_NOUVEAU_NVIF 0x07
506#define DRM_NOUVEAU_SVM_INIT 0x08
507#define DRM_NOUVEAU_SVM_BIND 0x09
508#define DRM_NOUVEAU_VM_INIT 0x10
509#define DRM_NOUVEAU_VM_BIND 0x11
510#define DRM_NOUVEAU_EXEC 0x12
511#define DRM_NOUVEAU_GET_ZCULL_INFO 0x13
512#define DRM_NOUVEAU_GEM_NEW 0x40
513#define DRM_NOUVEAU_GEM_PUSHBUF 0x41
514#define DRM_NOUVEAU_GEM_CPU_PREP 0x42
515#define DRM_NOUVEAU_GEM_CPU_FINI 0x43
516#define DRM_NOUVEAU_GEM_INFO 0x44
517
522
533
534#define NOUVEAU_SVM_BIND_COMMAND_SHIFT 0
535#define NOUVEAU_SVM_BIND_COMMAND_BITS 8
536#define NOUVEAU_SVM_BIND_COMMAND_MASK ((1 << 8) - 1)
537#define NOUVEAU_SVM_BIND_PRIORITY_SHIFT 8
538#define NOUVEAU_SVM_BIND_PRIORITY_BITS 8
539#define NOUVEAU_SVM_BIND_PRIORITY_MASK ((1 << 8) - 1)
540#define NOUVEAU_SVM_BIND_TARGET_SHIFT 16
541#define NOUVEAU_SVM_BIND_TARGET_BITS 32
542#define NOUVEAU_SVM_BIND_TARGET_MASK 0xffffffff
543
544/*
545 * Below is use to validate ioctl argument, userspace can also use it to make
546 * sure that no bit are set beyond known fields for a given kernel version.
547 */
548#define NOUVEAU_SVM_BIND_VALID_BITS 48
549#define NOUVEAU_SVM_BIND_VALID_MASK ((1ULL << NOUVEAU_SVM_BIND_VALID_BITS) - 1)
550
551
552/*
553 * NOUVEAU_BIND_COMMAND__MIGRATE: synchronous migrate to target memory.
554 * result: number of page successfuly migrate to the target memory.
555 */
556#define NOUVEAU_SVM_BIND_COMMAND__MIGRATE 0
557
558/*
559 * NOUVEAU_SVM_BIND_HEADER_TARGET__GPU_VRAM: target the GPU VRAM memory.
560 */
561#define NOUVEAU_SVM_BIND_TARGET__GPU_VRAM (1UL << 31)
562
563
564#define DRM_IOCTL_NOUVEAU_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GETPARAM, struct drm_nouveau_getparam)
565#define DRM_IOCTL_NOUVEAU_CHANNEL_ALLOC DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_CHANNEL_ALLOC, struct drm_nouveau_channel_alloc)
566#define DRM_IOCTL_NOUVEAU_CHANNEL_FREE DRM_IOW (DRM_COMMAND_BASE + DRM_NOUVEAU_CHANNEL_FREE, struct drm_nouveau_channel_free)
567
568#define DRM_IOCTL_NOUVEAU_SVM_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_SVM_INIT, struct drm_nouveau_svm_init)
569#define DRM_IOCTL_NOUVEAU_SVM_BIND DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_SVM_BIND, struct drm_nouveau_svm_bind)
570
571#define DRM_IOCTL_NOUVEAU_GEM_NEW DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_NEW, struct drm_nouveau_gem_new)
572#define DRM_IOCTL_NOUVEAU_GEM_PUSHBUF DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_PUSHBUF, struct drm_nouveau_gem_pushbuf)
573#define DRM_IOCTL_NOUVEAU_GEM_CPU_PREP DRM_IOW (DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_CPU_PREP, struct drm_nouveau_gem_cpu_prep)
574#define DRM_IOCTL_NOUVEAU_GEM_CPU_FINI DRM_IOW (DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_CPU_FINI, struct drm_nouveau_gem_cpu_fini)
575#define DRM_IOCTL_NOUVEAU_GEM_INFO DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_GEM_INFO, struct drm_nouveau_gem_info)
576
577#define DRM_IOCTL_NOUVEAU_VM_INIT DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_VM_INIT, struct drm_nouveau_vm_init)
578#define DRM_IOCTL_NOUVEAU_VM_BIND DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_VM_BIND, struct drm_nouveau_vm_bind)
579#define DRM_IOCTL_NOUVEAU_EXEC DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_EXEC, struct drm_nouveau_exec)
580
581#define DRM_IOCTL_NOUVEAU_GET_ZCULL_INFO DRM_IOR (DRM_COMMAND_BASE + DRM_NOUVEAU_GET_ZCULL_INFO, struct drm_nouveau_get_zcull_info)
582#if defined(__cplusplus)
583}
584#endif
585
586#endif /* __NOUVEAU_DRM_H__ */
int32_t __s32
Definition drm.h:41
uint32_t __u32
Definition drm.h:42
uint64_t __u64
Definition drm.h:44
Definition nouveau_drm.h:93
__u32 notifier_handle
Definition nouveau_drm.h:101
__u32 tt_ctxdma_handle
Definition nouveau_drm.h:95
__u32 fb_ctxdma_handle
Definition nouveau_drm.h:94
struct drm_nouveau_channel_alloc::@210 subchan[8]
__u32 handle
Definition nouveau_drm.h:105
__u32 grclass
Definition nouveau_drm.h:106
__u32 pushbuf_domains
Definition nouveau_drm.h:98
__s32 channel
Definition nouveau_drm.h:97
__u32 nr_subchan
Definition nouveau_drm.h:108
Definition nouveau_drm.h:111
__s32 channel
Definition nouveau_drm.h:112
Definition nouveau_drm.h:385
__u32 va_len
Definition nouveau_drm.h:393
__u64 va
Definition nouveau_drm.h:389
__u32 flags
Definition nouveau_drm.h:397
Definition nouveau_drm.h:404
__u32 wait_count
Definition nouveau_drm.h:416
__u64 push_ptr
Definition nouveau_drm.h:432
__u32 channel
Definition nouveau_drm.h:408
__u32 push_count
Definition nouveau_drm.h:412
__u64 wait_ptr
Definition nouveau_drm.h:424
__u64 sig_ptr
Definition nouveau_drm.h:428
__u32 sig_count
Definition nouveau_drm.h:420
Definition nouveau_drm.h:219
__u32 handle
Definition nouveau_drm.h:220
Definition nouveau_drm.h:214
__u32 handle
Definition nouveau_drm.h:215
__u32 flags
Definition nouveau_drm.h:216
Definition nouveau_drm.h:142
__u32 tile_flags
Definition nouveau_drm.h:149
__u32 domain
Definition nouveau_drm.h:144
__u64 size
Definition nouveau_drm.h:145
__u32 handle
Definition nouveau_drm.h:143
__u32 tile_mode
Definition nouveau_drm.h:148
__u64 map_handle
Definition nouveau_drm.h:147
__u64 offset
Definition nouveau_drm.h:146
Definition nouveau_drm.h:152
__u32 channel_hint
Definition nouveau_drm.h:154
__u32 align
Definition nouveau_drm.h:155
struct drm_nouveau_gem_info info
Definition nouveau_drm.h:153
Definition nouveau_drm.h:159
__u32 domain
Definition nouveau_drm.h:161
__u32 valid
Definition nouveau_drm.h:160
__u64 offset
Definition nouveau_drm.h:162
Definition nouveau_drm.h:165
__u32 handle
Definition nouveau_drm.h:167
__u64 user_priv
Definition nouveau_drm.h:166
struct drm_nouveau_gem_pushbuf_bo_presumed presumed
Definition nouveau_drm.h:171
__u32 write_domains
Definition nouveau_drm.h:169
__u32 read_domains
Definition nouveau_drm.h:168
__u32 valid_domains
Definition nouveau_drm.h:170
Definition nouveau_drm.h:189
__u64 offset
Definition nouveau_drm.h:192
__u64 length
Definition nouveau_drm.h:193
__u32 pad
Definition nouveau_drm.h:191
__u32 bo_index
Definition nouveau_drm.h:190
Definition nouveau_drm.h:178
__u32 bo_index
Definition nouveau_drm.h:181
__u32 flags
Definition nouveau_drm.h:182
__u32 reloc_bo_index
Definition nouveau_drm.h:179
__u32 vor
Definition nouveau_drm.h:184
__u32 tor
Definition nouveau_drm.h:185
__u32 reloc_bo_offset
Definition nouveau_drm.h:180
__u32 data
Definition nouveau_drm.h:183
Definition nouveau_drm.h:197
__u32 nr_relocs
Definition nouveau_drm.h:201
__u32 channel
Definition nouveau_drm.h:198
__u32 suffix0
Definition nouveau_drm.h:205
__u32 suffix1
Definition nouveau_drm.h:206
__u64 vram_available
Definition nouveau_drm.h:208
__u64 relocs
Definition nouveau_drm.h:203
__u32 nr_buffers
Definition nouveau_drm.h:199
__u32 nr_push
Definition nouveau_drm.h:202
__u64 gart_available
Definition nouveau_drm.h:209
__u64 buffers
Definition nouveau_drm.h:200
__u64 push
Definition nouveau_drm.h:204
Definition nouveau_drm.h:435
__u32 pixel_squares_by_aliquots
Definition nouveau_drm.h:450
__u32 ctxsw_size
Definition nouveau_drm.h:490
__u32 height_align_pixels
Definition nouveau_drm.h:445
__u32 subregion_width_align_pixels
Definition nouveau_drm.h:479
__u32 width_align_pixels
Definition nouveau_drm.h:440
__u32 subregion_count
Definition nouveau_drm.h:474
__u32 zcull_region_header_size
Definition nouveau_drm.h:464
__u32 zcull_subregion_header_size
Definition nouveau_drm.h:469
__u32 subregion_height_align_pixels
Definition nouveau_drm.h:484
__u32 zcull_region_byte_multiplier
Definition nouveau_drm.h:459
__u32 aliquot_total
Definition nouveau_drm.h:454
__u32 ctxsw_align
Definition nouveau_drm.h:495
Definition nouveau_drm.h:78
__u64 param
Definition nouveau_drm.h:79
__u64 value
Definition nouveau_drm.h:80
Definition nouveau_drm.h:122
__s32 channel
Definition nouveau_drm.h:123
__u32 handle
Definition nouveau_drm.h:124
Definition nouveau_drm.h:115
__u32 channel
Definition nouveau_drm.h:116
__u32 handle
Definition nouveau_drm.h:117
__u32 offset
Definition nouveau_drm.h:119
__u32 size
Definition nouveau_drm.h:118
Definition nouveau_drm.h:523
__u64 reserved1
Definition nouveau_drm.h:531
__u64 result
Definition nouveau_drm.h:529
__u64 va_end
Definition nouveau_drm.h:526
__u64 npages
Definition nouveau_drm.h:527
__u64 va_start
Definition nouveau_drm.h:525
__u64 stride
Definition nouveau_drm.h:528
__u64 reserved0
Definition nouveau_drm.h:530
__u64 header
Definition nouveau_drm.h:524
Definition nouveau_drm.h:518
__u64 unmanaged_addr
Definition nouveau_drm.h:519
__u64 unmanaged_size
Definition nouveau_drm.h:520
Definition nouveau_drm.h:229
__u32 handle
Definition nouveau_drm.h:242
__u32 flags
Definition nouveau_drm.h:235
__u64 timeline_value
Definition nouveau_drm.h:249
Definition nouveau_drm.h:281
__u64 range
Definition nouveau_drm.h:332
__u32 flags
Definition nouveau_drm.h:309
__u64 bo_offset
Definition nouveau_drm.h:328
__u64 addr
Definition nouveau_drm.h:324
__u32 handle
Definition nouveau_drm.h:314
__u32 op
Definition nouveau_drm.h:298
__u32 pad
Definition nouveau_drm.h:318
Definition nouveau_drm.h:338
__u32 flags
Definition nouveau_drm.h:355
__u64 wait_ptr
Definition nouveau_drm.h:368
__u64 sig_ptr
Definition nouveau_drm.h:372
__u32 wait_count
Definition nouveau_drm.h:360
__u64 op_ptr
Definition nouveau_drm.h:376
__u32 sig_count
Definition nouveau_drm.h:364
__u32 op_count
Definition nouveau_drm.h:342
Definition nouveau_drm.h:262
__u64 kernel_managed_size
Definition nouveau_drm.h:272
__u64 kernel_managed_addr
Definition nouveau_drm.h:267