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#define NVIF_IOCTL_V0_NTFY_NEW                                             0x09
19#define NVIF_IOCTL_V0_NTFY_DEL                                             0x0a
20#define NVIF_IOCTL_V0_NTFY_GET                                             0x0b
21#define NVIF_IOCTL_V0_NTFY_PUT                                             0x0c
22	__u8  type;
23	__u8  pad02[4];
24#define NVIF_IOCTL_V0_OWNER_NVIF                                           0x00
25#define NVIF_IOCTL_V0_OWNER_ANY                                            0xff
26	__u8  owner;
27#define NVIF_IOCTL_V0_ROUTE_NVIF                                           0x00
28#define NVIF_IOCTL_V0_ROUTE_HIDDEN                                         0xff
29	__u8  route;
30	__u64 token;
31	__u64 object;
32	__u8  data[];		/* ioctl data (below) */
33};
34
35struct nvif_ioctl_nop_v0 {
36	__u64 version;
37};
38
39struct nvif_ioctl_sclass_v0 {
40	/* nvif_ioctl ... */
41	__u8  version;
42	__u8  count;
43	__u8  pad02[6];
44	struct nvif_ioctl_sclass_oclass_v0 {
45		__s32 oclass;
46		__s16 minver;
47		__s16 maxver;
48	} oclass[];
49};
50
51struct nvif_ioctl_new_v0 {
52	/* nvif_ioctl ... */
53	__u8  version;
54	__u8  pad01[6];
55	__u8  route;
56	__u64 token;
57	__u64 object;
58	__u32 handle;
59	__s32 oclass;
60	__u8  data[];		/* class data (class.h) */
61};
62
63struct nvif_ioctl_del {
64};
65
66struct nvif_ioctl_rd_v0 {
67	/* nvif_ioctl ... */
68	__u8  version;
69	__u8  size;
70	__u8  pad02[2];
71	__u32 data;
72	__u64 addr;
73};
74
75struct nvif_ioctl_wr_v0 {
76	/* nvif_ioctl ... */
77	__u8  version;
78	__u8  size;
79	__u8  pad02[2];
80	__u32 data;
81	__u64 addr;
82};
83
84struct nvif_ioctl_map_v0 {
85	/* nvif_ioctl ... */
86	__u8  version;
87#define NVIF_IOCTL_MAP_V0_IO                                               0x00
88#define NVIF_IOCTL_MAP_V0_VA                                               0x01
89	__u8  type;
90	__u8  pad02[6];
91	__u64 handle;
92	__u64 length;
93	__u8  data[];
94};
95
96struct nvif_ioctl_unmap {
97};
98
99struct nvif_ioctl_ntfy_new_v0 {
100	/* nvif_ioctl ... */
101	__u8  version;
102	__u8  event;
103	__u8  index;
104	__u8  pad03[5];
105	__u8  data[];		/* event request data (event.h) */
106};
107
108struct nvif_ioctl_ntfy_del_v0 {
109	/* nvif_ioctl ... */
110	__u8  version;
111	__u8  index;
112	__u8  pad02[6];
113};
114
115struct nvif_ioctl_ntfy_get_v0 {
116	/* nvif_ioctl ... */
117	__u8  version;
118	__u8  index;
119	__u8  pad02[6];
120};
121
122struct nvif_ioctl_ntfy_put_v0 {
123	/* nvif_ioctl ... */
124	__u8  version;
125	__u8  index;
126	__u8  pad02[6];
127};
128
129struct nvif_ioctl_mthd_v0 {
130	/* nvif_ioctl ... */
131	__u8  version;
132	__u8  method;
133	__u8  pad02[6];
134	__u8  data[];		/* method data (class.h) */
135};
136
137#endif
138