Merge tag 'for-6.9/dm-vdo' of git://git.kernel.org/pub/scm/linux/kernel/git/device...
[linux-2.6-microblaze.git] / drivers / gpu / drm / nouveau / nouveau_abi16.h
1 /* SPDX-License-Identifier: MIT */
2 #ifndef __NOUVEAU_ABI16_H__
3 #define __NOUVEAU_ABI16_H__
4
5 #define ABI16_IOCTL_ARGS                                                       \
6         struct drm_device *dev, void *data, struct drm_file *file_priv
7
8 int nouveau_abi16_ioctl_getparam(ABI16_IOCTL_ARGS);
9 int nouveau_abi16_ioctl_channel_alloc(ABI16_IOCTL_ARGS);
10 int nouveau_abi16_ioctl_channel_free(ABI16_IOCTL_ARGS);
11 int nouveau_abi16_ioctl_grobj_alloc(ABI16_IOCTL_ARGS);
12 int nouveau_abi16_ioctl_notifierobj_alloc(ABI16_IOCTL_ARGS);
13 int nouveau_abi16_ioctl_gpuobj_free(ABI16_IOCTL_ARGS);
14
15 struct nouveau_abi16_ntfy {
16         struct nvif_object object;
17         struct list_head head;
18         struct nvkm_mm_node *node;
19 };
20
21 struct nouveau_abi16_chan {
22         struct list_head head;
23         struct nouveau_channel *chan;
24         struct nvif_object ce;
25         struct list_head notifiers;
26         struct nouveau_bo *ntfy;
27         struct nouveau_vma *ntfy_vma;
28         struct nvkm_mm  heap;
29         struct nouveau_sched *sched;
30 };
31
32 struct nouveau_abi16 {
33         struct nvif_device device;
34         struct list_head channels;
35         u64 handles;
36 };
37
38 struct nouveau_abi16 *nouveau_abi16_get(struct drm_file *);
39 int  nouveau_abi16_put(struct nouveau_abi16 *, int);
40 void nouveau_abi16_fini(struct nouveau_abi16 *);
41 s32  nouveau_abi16_swclass(struct nouveau_drm *);
42 int  nouveau_abi16_usif(struct drm_file *, void *data, u32 size);
43
44 #define NOUVEAU_GEM_DOMAIN_VRAM      (1 << 1)
45 #define NOUVEAU_GEM_DOMAIN_GART      (1 << 2)
46
47 struct drm_nouveau_grobj_alloc {
48         int      channel;
49         uint32_t handle;
50         int      class;
51 };
52
53 struct drm_nouveau_notifierobj_alloc {
54         uint32_t channel;
55         uint32_t handle;
56         uint32_t size;
57         uint32_t offset;
58 };
59
60 struct drm_nouveau_gpuobj_free {
61         int      channel;
62         uint32_t handle;
63 };
64
65 struct drm_nouveau_setparam {
66         uint64_t param;
67         uint64_t value;
68 };
69
70 #define DRM_IOCTL_NOUVEAU_SETPARAM           DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_SETPARAM, struct drm_nouveau_setparam)
71 #define DRM_IOCTL_NOUVEAU_GROBJ_ALLOC        DRM_IOW (DRM_COMMAND_BASE + DRM_NOUVEAU_GROBJ_ALLOC, struct drm_nouveau_grobj_alloc)
72 #define DRM_IOCTL_NOUVEAU_NOTIFIEROBJ_ALLOC  DRM_IOWR(DRM_COMMAND_BASE + DRM_NOUVEAU_NOTIFIEROBJ_ALLOC, struct drm_nouveau_notifierobj_alloc)
73 #define DRM_IOCTL_NOUVEAU_GPUOBJ_FREE        DRM_IOW (DRM_COMMAND_BASE + DRM_NOUVEAU_GPUOBJ_FREE, struct drm_nouveau_gpuobj_free)
74
75 #endif