1 /*	$NetBSD: ioctl.h,v 1.6 2021/12/19 10:51:56 riastradh Exp $	*/
2 
3 /* SPDX-License-Identifier: MIT */
4 #ifndef __NVIF_IOCTL_H__
5 #define __NVIF_IOCTL_H__
6 
7 #define NVIF_VERSION_LATEST                               0x0000000000000100ULL
8 
9 struct nvif_ioctl_v0 {
10 	__u8  version;
11 #define NVIF_IOCTL_V0_NOP                                                  0x00
12 #define NVIF_IOCTL_V0_SCLASS                                               0x01
13 #define NVIF_IOCTL_V0_NEW                                                  0x02
14 #define NVIF_IOCTL_V0_DEL                                                  0x03
15 #define NVIF_IOCTL_V0_MTHD                                                 0x04
16 #define NVIF_IOCTL_V0_RD                                                   0x05
17 #define NVIF_IOCTL_V0_WR                                                   0x06
18 #define NVIF_IOCTL_V0_MAP                                                  0x07
19 #define NVIF_IOCTL_V0_UNMAP                                                0x08
20 #define NVIF_IOCTL_V0_NTFY_NEW                                             0x09
21 #define NVIF_IOCTL_V0_NTFY_DEL                                             0x0a
22 #define NVIF_IOCTL_V0_NTFY_GET                                             0x0b
23 #define NVIF_IOCTL_V0_NTFY_PUT                                             0x0c
24 #ifdef __NetBSD__
25 /* XXX Kludge for NetBSD kernel-only use.  */
26 #define NVIF_IOCTL_V0_MAP_NETBSD                                           0x0d
27 #endif
28 	__u8  type;
29 	__u8  pad02[4];
30 #define NVIF_IOCTL_V0_OWNER_NVIF                                           0x00
31 #define NVIF_IOCTL_V0_OWNER_ANY                                            0xff
32 	__u8  owner;
33 #define NVIF_IOCTL_V0_ROUTE_NVIF                                           0x00
34 #define NVIF_IOCTL_V0_ROUTE_HIDDEN                                         0xff
35 	__u8  route;
36 	__u64 token;
37 	__u64 object;
38 	__u8  data[];		/* ioctl data (below) */
39 };
40 
41 struct nvif_ioctl_nop_v0 {
42 	__u64 version;
43 };
44 
45 struct nvif_ioctl_sclass_v0 {
46 	/* nvif_ioctl ... */
47 	__u8  version;
48 	__u8  count;
49 	__u8  pad02[6];
50 	struct nvif_ioctl_sclass_oclass_v0 {
51 		__s32 oclass;
52 		__s16 minver;
53 		__s16 maxver;
54 	} oclass[];
55 };
56 
57 struct nvif_ioctl_new_v0 {
58 	/* nvif_ioctl ... */
59 	__u8  version;
60 	__u8  pad01[6];
61 	__u8  route;
62 	__u64 token;
63 	__u64 object;
64 	__u32 handle;
65 	__s32 oclass;
66 	__u8  data[];		/* class data (class.h) */
67 };
68 
69 struct nvif_ioctl_del {
70 };
71 
72 struct nvif_ioctl_rd_v0 {
73 	/* nvif_ioctl ... */
74 	__u8  version;
75 	__u8  size;
76 	__u8  pad02[2];
77 	__u32 data;
78 	__u64 addr;
79 };
80 
81 struct nvif_ioctl_wr_v0 {
82 	/* nvif_ioctl ... */
83 	__u8  version;
84 	__u8  size;
85 	__u8  pad02[2];
86 	__u32 data;
87 	__u64 addr;
88 };
89 
90 struct nvif_ioctl_map_v0 {
91 	/* nvif_ioctl ... */
92 	__u8  version;
93 #define NVIF_IOCTL_MAP_V0_IO                                               0x00
94 #define NVIF_IOCTL_MAP_V0_VA                                               0x01
95 	__u8  type;
96 	__u8  pad02[6];
97 	__u64 handle;
98 	__u64 length;
99 	__u8  data[];
100 };
101 
102 #ifdef __NetBSD__
103 /* XXX Kludge for NetBSD kernel-only use.  */
104 #include <sys/bus.h>
105 struct nvif_ioctl_map_netbsd_v0 {
106 	/* nvif_ioctl ... */
107 	__u8  version;
108 #define NVIF_IOCTL_MAP_V0_IO                                               0x00
109 #define NVIF_IOCTL_MAP_V0_VA                                               0x01
110 	__u8  type;
111 	__u8  pad02[6];
112 	bus_space_tag_t tag;
113 	__u64 handle;
114 	__u64 length;
115 	__u8  data[];
116 };
117 #endif
118 
119 struct nvif_ioctl_unmap {
120 };
121 
122 struct nvif_ioctl_ntfy_new_v0 {
123 	/* nvif_ioctl ... */
124 	__u8  version;
125 	__u8  event;
126 	__u8  index;
127 	__u8  pad03[5];
128 	__u8  data[];		/* event request data (event.h) */
129 };
130 
131 struct nvif_ioctl_ntfy_del_v0 {
132 	/* nvif_ioctl ... */
133 	__u8  version;
134 	__u8  index;
135 	__u8  pad02[6];
136 };
137 
138 struct nvif_ioctl_ntfy_get_v0 {
139 	/* nvif_ioctl ... */
140 	__u8  version;
141 	__u8  index;
142 	__u8  pad02[6];
143 };
144 
145 struct nvif_ioctl_ntfy_put_v0 {
146 	/* nvif_ioctl ... */
147 	__u8  version;
148 	__u8  index;
149 	__u8  pad02[6];
150 };
151 
152 struct nvif_ioctl_mthd_v0 {
153 	/* nvif_ioctl ... */
154 	__u8  version;
155 	__u8  method;
156 	__u8  pad02[6];
157 	__u8  data[];		/* method data (class.h) */
158 };
159 
160 #endif
161