1/* SPDX-License-Identifier: MIT */
2#ifndef __NVIF_IOCTL_H__
3#define __NVIF_IOCTL_H__
4
5#define NVIF_VERSION_LATEST                               0x0000000000000100ULL
6
7struct nvif_ioctl_v0 {
8	__u8  version;
9#define NVIF_IOCTL_V0_NOP                                                  0x00
10#define NVIF_IOCTL_V0_SCLASS                                               0x01
11#define NVIF_IOCTL_V0_NEW                                                  0x02
12#define NVIF_IOCTL_V0_DEL                                                  0x03
13#define NVIF_IOCTL_V0_MTHD                                                 0x04
14#define NVIF_IOCTL_V0_RD                                                   0x05
15#define NVIF_IOCTL_V0_WR                                                   0x06
16#define NVIF_IOCTL_V0_MAP                                                  0x07
17#define NVIF_IOCTL_V0_UNMAP                                                0x08
18	__u8  type;
19	__u8  pad02[4];
20#define NVIF_IOCTL_V0_OWNER_NVIF                                           0x00
21#define NVIF_IOCTL_V0_OWNER_ANY                                            0xff
22	__u8  owner;
23#define NVIF_IOCTL_V0_ROUTE_NVIF                                           0x00
24#define NVIF_IOCTL_V0_ROUTE_HIDDEN                                         0xff
25	__u8  route;
26	__u64 token;
27	__u64 object;
28	__u8  data[];		/* ioctl data (below) */
29};
30
31struct nvif_ioctl_nop_v0 {
32	__u64 version;
33};
34
35struct nvif_ioctl_sclass_v0 {
36	/* nvif_ioctl ... */
37	__u8  version;
38	__u8  count;
39	__u8  pad02[6];
40	struct nvif_ioctl_sclass_oclass_v0 {
41		__s32 oclass;
42		__s16 minver;
43		__s16 maxver;
44	} oclass[];
45};
46
47struct nvif_ioctl_new_v0 {
48	/* nvif_ioctl ... */
49	__u8  version;
50	__u8  pad01[6];
51	__u8  route;
52	__u64 token;
53	__u64 object;
54	__u32 handle;
55	__s32 oclass;
56	__u8  data[];		/* class data (class.h) */
57};
58
59struct nvif_ioctl_del {
60};
61
62struct nvif_ioctl_mthd_v0 {
63	/* nvif_ioctl ... */
64	__u8  version;
65	__u8  method;
66	__u8  pad02[6];
67	__u8  data[];		/* method data (class.h) */
68};
69
70struct nvif_ioctl_rd_v0 {
71	/* nvif_ioctl ... */
72	__u8  version;
73	__u8  size;
74	__u8  pad02[2];
75	__u32 data;
76	__u64 addr;
77};
78
79struct nvif_ioctl_wr_v0 {
80	/* nvif_ioctl ... */
81	__u8  version;
82	__u8  size;
83	__u8  pad02[2];
84	__u32 data;
85	__u64 addr;
86};
87
88struct nvif_ioctl_map_v0 {
89	/* nvif_ioctl ... */
90	__u8  version;
91#define NVIF_IOCTL_MAP_V0_IO                                               0x00
92#define NVIF_IOCTL_MAP_V0_VA                                               0x01
93	__u8  type;
94	__u8  pad02[6];
95	__u64 handle;
96	__u64 length;
97	__u8  data[];
98};
99
100struct nvif_ioctl_unmap {
101};
102#endif
103