libnx v4.9.0
Loading...
Searching...
No Matches
ioctl.h
1#pragma once
2#include "types.h"
3
4// The below defines are based on Linux kernel ioctl.h.
5#define _NV_IOC_NRBITS 8
6#define _NV_IOC_TYPEBITS 8
7#define _NV_IOC_SIZEBITS 14
8#define _NV_IOC_DIRBITS 2
9
10#define _NV_IOC_NRMASK ((1 << _NV_IOC_NRBITS)-1)
11#define _NV_IOC_TYPEMASK ((1 << _NV_IOC_TYPEBITS)-1)
12#define _NV_IOC_SIZEMASK ((1 << _NV_IOC_SIZEBITS)-1)
13#define _NV_IOC_DIRMASK ((1 << _NV_IOC_DIRBITS)-1)
14
15#define _NV_IOC_NRSHIFT 0
16#define _NV_IOC_TYPESHIFT (_NV_IOC_NRSHIFT+_NV_IOC_NRBITS)
17#define _NV_IOC_SIZESHIFT (_NV_IOC_TYPESHIFT+_NV_IOC_TYPEBITS)
18#define _NV_IOC_DIRSHIFT (_NV_IOC_SIZESHIFT+_NV_IOC_SIZEBITS)
19
20// Direction bits.
21#define _NV_IOC_NONE 0U
22#define _NV_IOC_WRITE 1U
23#define _NV_IOC_READ 2U
24
25#define _NV_IOC(dir,type,nr,size) \
26 (((dir) << _NV_IOC_DIRSHIFT) | \
27 ((type) << _NV_IOC_TYPESHIFT) | \
28 ((nr) << _NV_IOC_NRSHIFT) | \
29 ((size) << _NV_IOC_SIZESHIFT))
30
31/* used to create numbers */
32#define _NV_IO(type,nr) _NV_IOC(_NV_IOC_NONE,(type),(nr),0)
33#define _NV_IOR(type,nr,size) _NV_IOC(_NV_IOC_READ,(type),(nr),sizeof(size))
34#define _NV_IOW(type,nr,size) _NV_IOC(_NV_IOC_WRITE,(type),(nr),sizeof(size))
35#define _NV_IOWR(type,nr,size) _NV_IOC(_NV_IOC_READ|_NV_IOC_WRITE,(type),(nr),sizeof(size))
36
37/* used to decode ioctl numbers.. */
38#define _NV_IOC_DIR(nr) (((nr) >> _NV_IOC_DIRSHIFT) & _NV_IOC_DIRMASK)
39#define _NV_IOC_TYPE(nr) (((nr) >> _NV_IOC_TYPESHIFT) & _NV_IOC_TYPEMASK)
40#define _NV_IOC_NR(nr) (((nr) >> _NV_IOC_NRSHIFT) & _NV_IOC_NRMASK)
41#define _NV_IOC_SIZE(nr) (((nr) >> _NV_IOC_SIZESHIFT) & _NV_IOC_SIZEMASK)
42
43#define __nv_in
44#define __nv_out
45#define __nv_inout
46
47typedef struct {
48 u32 width_align_pixels; // 0x20 (32)
49 u32 height_align_pixels; // 0x20 (32)
50 u32 pixel_squares_by_aliquots; // 0x400 (1024)
51 u32 aliquot_total; // 0x800 (2048)
52 u32 region_byte_multiplier; // 0x20 (32)
53 u32 region_header_size; // 0x20 (32)
54 u32 subregion_header_size; // 0xC0 (192)
55 u32 subregion_width_align_pixels; // 0x20 (32)
56 u32 subregion_height_align_pixels; // 0x40 (64)
57 u32 subregion_count; // 0x10 (16)
59
60typedef struct {
61 u32 color_ds[4];
62 u32 color_l2[4];
63 u32 depth;
64 u32 ref_cnt;
65 u32 format;
66 u32 type;
67 u32 size;
69
70typedef struct {
71 u32 arch; // 0x120 (NVGPU_GPU_ARCH_GM200)
72 u32 impl; // 0xB (NVGPU_GPU_IMPL_GM20B)
73 u32 rev; // 0xA1 (Revision A1)
74 u32 num_gpc; // 0x1
75 u64 L2_cache_size; // 0x40000
76 u64 on_board_video_memory_size; // 0x0 (not used)
77 u32 num_tpc_per_gpc; // 0x2
78 u32 bus_type; // 0x20 (NVGPU_GPU_BUS_TYPE_AXI)
79 u32 big_page_size; // 0x20000
80 u32 compression_page_size; // 0x20000
81 u32 pde_coverage_bit_count; // 0x1B
82 u32 available_big_page_sizes; // 0x30000
83 u32 gpc_mask; // 0x1
84 u32 sm_arch_sm_version; // 0x503 (Maxwell Generation 5.0.3?)
85 u32 sm_arch_spa_version; // 0x503 (Maxwell Generation 5.0.3?)
86 u32 sm_arch_warp_count; // 0x80
87 u32 gpu_va_bit_count; // 0x28
88 u32 reserved; // NULL
89 u64 flags; // 0x55
90 u32 twod_class; // 0x902D (FERMI_TWOD_A)
91 u32 threed_class; // 0xB197 (MAXWELL_B)
92 u32 compute_class; // 0xB1C0 (MAXWELL_COMPUTE_B)
93 u32 gpfifo_class; // 0xB06F (MAXWELL_CHANNEL_GPFIFO_A)
94 u32 inline_to_memory_class; // 0xA140 (KEPLER_INLINE_TO_MEMORY_B)
95 u32 dma_copy_class; // 0xB0B5 (MAXWELL_DMA_COPY_A)
96 u32 max_fbps_count; // 0x1
97 u32 fbp_en_mask; // 0x0 (disabled)
98 u32 max_ltc_per_fbp; // 0x2
99 u32 max_lts_per_ltc; // 0x1
100 u32 max_tex_per_tpc; // 0x0 (not supported)
101 u32 max_gpc_count; // 0x1
102 u32 rop_l2_en_mask_0; // 0x21D70 (fuse_status_opt_rop_l2_fbp_r)
103 u32 rop_l2_en_mask_1; // 0x0
104 u64 chipname; // 0x6230326D67 ("gm20b")
105 u64 gr_compbit_store_base_hw; // 0x0 (not supported)
107
108typedef struct {
109 u64 offset;
110 u32 page_size;
111 u32 pad;
112 u64 pages;
114
115typedef struct {
116 u32 slot; // always 0x07 (?)
117 u32 mask;
119
120typedef struct {
121 u64 timestamp;
122 u64 reserved;
124
125typedef struct {
126 u32 id;
127 u32 value;
129
130typedef struct {
131 union {
132 u64 desc;
133 u32 desc32[2];
134 };
136
137typedef struct {
138 u32 mem;
139 u32 offset;
140 u32 words;
142
143typedef struct {
144 u32 cmdbuf_mem;
145 u32 cmdbuf_offset;
146 u32 target;
147 u32 target_offset;
149
150typedef struct {
151 u32 shift;
153
154typedef struct {
155 u32 syncpt_id;
156 u32 syncpt_incrs;
157 u32 waitbase_id; // Always -1
158 u32 next; //< Next valid incr index, or -1
159 u32 prev; //< Previous valid incr index, or -1
161
162typedef struct {
163 u32 handle;
164 u32 iova;
166
167typedef struct {
168 u32 rate;
169 u32 moduleid;
171
172#define NVGPU_ZBC_TYPE_INVALID 0
173#define NVGPU_ZBC_TYPE_COLOR 1
174#define NVGPU_ZBC_TYPE_DEPTH 2
175
176// Used with nvioctlNvmap_Param().
177typedef enum nvioctl_map_param {
178 NvMapParam_Size = 1,
179 NvMapParam_Alignment = 2,
180 NvMapParam_Base = 3,
181 NvMapParam_Heap = 4,
182 NvMapParam_Kind = 5
183} NvMapParam;
184
185// Used with nvioctlChannel_AllocObjCtx().
186typedef enum nvioctl_channel_obj_classnum {
187 NvClassNumber_2D = 0x902D,
188 NvClassNumber_3D = 0xB197,
189 NvClassNumber_Compute = 0xB1C0,
190 NvClassNumber_Kepler = 0xA140,
191 NvClassNumber_DMA = 0xB0B5,
192 NvClassNumber_ChannelGpfifo = 0xB06F
193} NvClassNumber;
194
195// Used with nvioctlChannel_SetPriority().
196typedef enum nvioctl_channel_priority {
197 NvChannelPriority_Low = 50,
198 NvChannelPriority_Medium = 100,
199 NvChannelPriority_High = 150
200} NvChannelPriority;
201
202// Used with nvioctlChannel_ZCullBind().
203typedef enum {
204 NvZcullConfig_Global = 0,
205 NvZcullConfig_NoCtxSwitch = 1,
206 NvZcullConfig_SeparateBuffer = 2,
207 NvZcullConfig_PartOfRegularBuffer = 3
208} NvZcullConfig;
209
210// Used with nvioctlNvhostAsGpu_AllocSpace().
211typedef enum {
212 NvAllocSpaceFlags_FixedOffset = 1,
213 NvAllocSpaceFlags_Sparse = 2,
214} NvAllocSpaceFlags;
215
216// Used with nvioctlNvhostAsGpu_MapBufferEx().
217typedef enum {
218 NvMapBufferFlags_FixedOffset = 1,
219 NvMapBufferFlags_IsCacheable = 4,
220 NvMapBufferFlags_Modify = 0x100,
221} NvMapBufferFlags;
222
223typedef enum {
224 NvNotificationType_FifoErrorIdleTimeout=8,
225 NvNotificationType_GrErrorSwNotify=13,
226 NvNotificationType_GrSemaphoreTimeout=24,
227 NvNotificationType_GrIllegalNotify=25,
228 NvNotificationType_FifoErrorMmuErrFlt=31,
229 NvNotificationType_PbdmaError=32,
230 NvNotificationType_ResetChannelVerifError=43,
231 NvNotificationType_PbdmaPushbufferCrcMismatch=80
232} NvNotificationType;
233
234typedef struct {
235 u64 timestamp;
236 u32 info32; // see NvNotificationType
237 u16 info16;
238 u16 status; // always -1
240
241typedef struct {
242 u32 type;
243 u32 info[31];
244} NvError;
245
246Result nvioctlNvhostCtrl_SyncptRead(u32 fd, u32 id, u32* out);
247Result nvioctlNvhostCtrl_SyncptIncr(u32 fd, u32 id);
248Result nvioctlNvhostCtrl_SyncptWait(u32 fd, u32 id, u32 threshold, u32 timeout);
249Result nvioctlNvhostCtrl_EventSignal(u32 fd, u32 event_id);
250Result nvioctlNvhostCtrl_EventWait(u32 fd, u32 syncpt_id, u32 threshold, s32 timeout, u32 event_id, u32 *out);
251Result nvioctlNvhostCtrl_EventWaitAsync(u32 fd, u32 syncpt_id, u32 threshold, s32 timeout, u32 event_id);
252Result nvioctlNvhostCtrl_EventRegister(u32 fd, u32 event_id);
253Result nvioctlNvhostCtrl_EventUnregister(u32 fd, u32 event_id);
254
255Result nvioctlNvhostCtrlGpu_ZCullGetCtxSize(u32 fd, u32 *out);
256Result nvioctlNvhostCtrlGpu_ZCullGetInfo(u32 fd, nvioctl_zcull_info *out);
257Result nvioctlNvhostCtrlGpu_ZbcSetTable(u32 fd, const u32 color_ds[4], const u32 color_l2[4], u32 depth, u32 format, u32 type);
258Result nvioctlNvhostCtrlGpu_ZbcQueryTable(u32 fd, u32 index, nvioctl_zbc_entry *out);
259Result nvioctlNvhostCtrlGpu_GetCharacteristics(u32 fd, nvioctl_gpu_characteristics *out);
260Result nvioctlNvhostCtrlGpu_GetTpcMasks(u32 fd, void *buffer, size_t size);
261Result nvioctlNvhostCtrlGpu_ZbcGetActiveSlotMask(u32 fd, nvioctl_zbc_slot_mask *out);
262Result nvioctlNvhostCtrlGpu_GetGpuTime(u32 fd, nvioctl_gpu_time *out);
263
264Result nvioctlNvhostAsGpu_BindChannel(u32 fd, u32 channel_fd);
265Result nvioctlNvhostAsGpu_AllocSpace(u32 fd, u32 pages, u32 page_size, u32 flags, u64 align_or_offset, u64 *offset);
266Result nvioctlNvhostAsGpu_FreeSpace(u32 fd, u64 offset, u32 pages, u32 page_size);
267Result nvioctlNvhostAsGpu_MapBufferEx(u32 fd, u32 flags, u32 kind, u32 nvmap_handle, u32 page_size, u64 buffer_offset, u64 mapping_size, u64 input_offset, u64 *offset);
268Result nvioctlNvhostAsGpu_UnmapBuffer(u32 fd, u64 offset);
269Result nvioctlNvhostAsGpu_GetVARegions(u32 fd, nvioctl_va_region regions[2]);
270Result nvioctlNvhostAsGpu_InitializeEx(u32 fd, u32 flags, u32 big_page_size);
271
272Result nvioctlNvmap_Create(u32 fd, u32 size, u32 *nvmap_handle);
273Result nvioctlNvmap_FromId(u32 fd, u32 id, u32 *nvmap_handle);
274Result nvioctlNvmap_Alloc(u32 fd, u32 nvmap_handle, u32 heapmask, u32 flags, u32 align, u8 kind, void* addr);
275Result nvioctlNvmap_Free(u32 fd, u32 nvmap_handle);
276Result nvioctlNvmap_Param(u32 fd, u32 nvmap_handle, NvMapParam param, u32 *result);
277Result nvioctlNvmap_GetId(u32 fd, u32 nvmap_handle, u32 *id);
278
279Result nvioctlChannel_SetNvmapFd(u32 fd, u32 nvmap_fd);
280Result nvioctlChannel_SubmitGpfifo(u32 fd, nvioctl_gpfifo_entry *entries, u32 num_entries, u32 flags, nvioctl_fence *fence_inout);
281Result nvioctlChannel_KickoffPb(u32 fd, nvioctl_gpfifo_entry *entries, u32 num_entries, u32 flags, nvioctl_fence *fence_inout);
282Result nvioctlChannel_AllocObjCtx(u32 fd, u32 class_num, u32 flags, u64* id_out);
283Result nvioctlChannel_ZCullBind(u32 fd, u64 gpu_va, u32 mode);
284Result nvioctlChannel_SetErrorNotifier(u32 fd, u32 enable);
285Result nvioctlChannel_GetErrorInfo(u32 fd, NvError* out);
286Result nvioctlChannel_GetErrorNotification(u32 fd, NvNotification* out);
287Result nvioctlChannel_SetPriority(u32 fd, u32 priority);
288Result nvioctlChannel_SetTimeout(u32 fd, u32 timeout);
289Result nvioctlChannel_AllocGpfifoEx2(u32 fd, u32 num_entries, u32 flags, u32 unk0, u32 unk1, u32 unk2, u32 unk3, nvioctl_fence *fence_out);
290Result nvioctlChannel_SetUserData(u32 fd, void* addr);
291Result nvioctlChannel_Submit(u32 fd, const nvioctl_cmdbuf *cmdbufs, u32 num_cmdbufs, const nvioctl_reloc *relocs, const nvioctl_reloc_shift *reloc_shifts, u32 num_relocs,
292 const nvioctl_syncpt_incr *syncpt_incrs, u32 num_syncpt_incrs, nvioctl_fence *fences, u32 num_fences);
293Result nvioctlChannel_GetSyncpt(u32 fd, u32 module_id, u32 *syncpt);
294Result nvioctlChannel_GetModuleClockRate(u32 fd, u32 module_id, u32 *freq);
295Result nvioctlChannel_SetModuleClockRate(u32 fd, u32 module_id, u32 freq);
296Result nvioctlChannel_MapCommandBuffer(u32 fd, nvioctl_command_buffer_map *maps, u32 num_maps, bool compressed);
297Result nvioctlChannel_UnmapCommandBuffer(u32 fd, const nvioctl_command_buffer_map *maps, u32 num_maps, bool compressed);
298Result nvioctlChannel_SetSubmitTimeout(u32 fd, u32 timeout);
Definition ioctl.h:241
Definition ioctl.h:234
Definition ioctl.h:167
Definition ioctl.h:137
Definition ioctl.h:162
Definition ioctl.h:125
Definition ioctl.h:130
Definition ioctl.h:70
Definition ioctl.h:120
Definition ioctl.h:150
Definition ioctl.h:143
Definition ioctl.h:154
Definition ioctl.h:108
Definition ioctl.h:60
Definition ioctl.h:115
Definition ioctl.h:47
Various system types.
uint64_t u64
64-bit unsigned integer.
Definition types.h:22
uint8_t u8
8-bit unsigned integer.
Definition types.h:19
uint16_t u16
16-bit unsigned integer.
Definition types.h:20
u32 Result
Function error code result type.
Definition types.h:44
int32_t s32
32-bit signed integer.
Definition types.h:27
uint32_t u32
32-bit unsigned integer.
Definition types.h:21