Line 167: |
Line 167: |
| | | |
| struct { | | struct { |
− | u32 __id; // in | + | __in u32 id; |
− | u32 __value; // out | + | __out u32 value; |
| }; | | }; |
| | | |
Line 175: |
Line 175: |
| | | |
| struct { | | struct { |
− | u32 __id; // in | + | __in u32 id; |
| }; | | }; |
| | | |
Line 182: |
Line 182: |
| | | |
| struct { | | struct { |
− | u32 __id; // in | + | __in u32 id; |
− | u32 __thresh; // in | + | __in u32 thresh; |
− | s32 __timeout; // in | + | __in s32 timeout; |
| }; | | }; |
| | | |
Line 191: |
Line 191: |
| | | |
| struct { | | struct { |
− | u32 __id; // in | + | __in u32 id; |
− | u32 __lock; // in (0==unlock; 1==lock) | + | __in u32 lock; // (0==unlock; 1==lock) |
| }; | | }; |
| | | |
Line 199: |
Line 199: |
| | | |
| struct { | | struct { |
− | u32 __id; // in | + | __in u32 id; |
− | u32 __num_offsets; // in | + | __in u32 num_offsets; |
− | u32 __block_size; // in | + | __in u32 block_size; |
− | u32 __offsets; // in | + | __in u32 offsets; |
− | u32 __values; // in | + | __in u32 values; |
− | u32 __write; // in | + | __in u32 write; |
| }; | | }; |
| | | |
Line 211: |
Line 211: |
| | | |
| struct { | | struct { |
− | u32 __id; // in | + | __in u32 id; |
− | u32 __thresh; // in | + | __in u32 thresh; |
− | s32 __timeout; // in | + | __in s32 timeout; |
− | u32 __value; // out | + | __out u32 value; |
| }; | | }; |
| | | |
Line 221: |
Line 221: |
| | | |
| struct { | | struct { |
− | u32 __id; // in | + | __in u32 id; |
− | u32 __value; // out | + | __out u32 value; |
| }; | | }; |
| | | |
Line 229: |
Line 229: |
| | | |
| struct { | | struct { |
− | u32 __event_id; // in (ranges from 0x01 to 0x3F) | + | __in u32 event_id; // ranges from 0x01 to 0x3F |
| }; | | }; |
| | | |
Line 236: |
Line 236: |
| | | |
| struct { | | struct { |
− | u32 __unk0; // in | + | __in u32 unk0; |
− | u32 __unk1; // in | + | __in u32 unk1; |
− | s32 __timeout; // in | + | __in s32 __timeout; |
− | u32 __event; // inout (in=event_id; out=result) | + | __inout u32 __event; // in=event_id; out=result |
| }; | | }; |
| | | |
Line 246: |
Line 246: |
| | | |
| struct { | | struct { |
− | u32 __unk0; // in | + | __in u32 unk0; |
− | u32 __unk1; // in | + | __in u32 unk1; |
− | s32 __timeout; // in | + | __in s32 timeout; |
− | u32 __event; // inout (in=event_id; out=result) | + | __inout u32 event; // in=event_id; out=result |
| }; | | }; |
| | | |
Line 256: |
Line 256: |
| | | |
| struct { | | struct { |
− | u32 __event_id; // in (ranges from 0x01 to 0x3F) | + | __in u32 event_id; // ranges from 0x01 to 0x3F |
| }; | | }; |
| | | |
Line 263: |
Line 263: |
| | | |
| struct { | | struct { |
− | u32 __event_id; // in (ranges from 0x01 to 0x3F) | + | __in u32 event_id; // ranges from 0x01 to 0x3F |
| }; | | }; |
| | | |
Line 270: |
Line 270: |
| | | |
| struct { | | struct { |
− | u64 __events; // in (64-bit flag where each bit represents one event) | + | __in u64 events; // 64-bit bitfield where each bit represents one event |
| }; | | }; |
| | | |
Line 316: |
Line 316: |
| | | |
| struct { | | struct { |
− | u32 __size; // in | + | __in u32 size; |
− | u32 __handle; // out | + | __out u32 handle; |
| }; | | }; |
| | | |
Line 324: |
Line 324: |
| | | |
| struct { | | struct { |
− | u32 __id; // in | + | __in u32 id; |
− | u32 __handle; // out | + | __out u32 handle; |
| }; | | }; |
| | | |
Line 332: |
Line 332: |
| | | |
| struct { | | struct { |
− | u32 __handle; // in | + | __in u32 handle; |
− | u32 __heapmask; // in | + | __in u32 heapmask; |
− | u32 __flags; // in (0=read-only, 1=read-write) | + | __in u32 flags; // (0=read-only, 1=read-write) |
− | u32 __align; // in | + | __in u32 align; |
− | u8 __kind; // in | + | __in u8 kind; |
− | u8 __pad[7]; | + | u8 pad[7]; |
− | u64 __addr; // in | + | __in u64 addr; |
| }; | | }; |
| | | |
Line 345: |
Line 345: |
| | | |
| struct { | | struct { |
− | u32 __handle; // in | + | __in u32 handle; |
− | u32 __pad; | + | u32 pad; |
− | u64 __refcount; // out | + | __out u64 refcount; |
− | u32 __size; // out | + | __out u32 size; |
− | u32 __flags; // out, 1=NOT_FREED_YET | + | __out u32 flags; // 1=NOT_FREED_YET |
| }; | | }; |
| | | |
Line 356: |
Line 356: |
| | | |
| struct { | | struct { |
− | u32 __handle; // in | + | __in u32 handle; |
− | u32 __param; // in, 1=SIZE, 2=ALIGNMENT, 3=BASE (returns error), 4=HEAP (always 0x40000000), 5=KIND, 6=COMPR (unused) | + | __in u32 param; // 1=SIZE, 2=ALIGNMENT, 3=BASE (returns error), 4=HEAP (always 0x40000000), 5=KIND, 6=COMPR (unused) |
− | u32 __result; // out | + | __out u32 result; |
| }; | | }; |
| | | |
Line 365: |
Line 365: |
| | | |
| struct { | | struct { |
− | u32 __id; // out | + | __out u32 id; |
− | u32 __handle; // in | + | __in u32 handle; |
| }; | | }; |
| | | |
Line 566: |
Line 566: |
| | | |
| struct { | | struct { |
− | u32 __fd; // in | + | __in u32 fd; |
| }; | | }; |
| | | |
Line 573: |
Line 573: |
| | | |
| struct { | | struct { |
− | u32 __pages; // in | + | __in u32 pages; |
− | u32 __page_size; // in | + | __in u32 page_size; |
− | u32 __flags; // in | + | __in u32 flags; |
− | u32 __pad; | + | u32 pad; |
| union { | | union { |
− | u64 __offset; // out | + | __out u64 offset; |
− | u64 __align; // in | + | __in u64 align; |
| }; | | }; |
| }; | | }; |
Line 585: |
Line 585: |
| === NVGPU_AS_IOCTL_FREE_SPACE === | | === NVGPU_AS_IOCTL_FREE_SPACE === |
| struct { | | struct { |
− | u64 __offset; // in | + | __in u64 offset; |
− | u32 __pages; // in | + | __in u32 pages; |
− | u32 __page_size; // in | + | __in u32 page_size; |
| }; | | }; |
| | | |
Line 596: |
Line 596: |
| | | |
| struct { | | struct { |
− | u32 __flags; // in, bit0: fixed_offset, bit2: cacheable | + | __in u32 flags; // bit0: fixed_offset, bit2: cacheable |
− | u32 __reserved; | + | u32 pad; |
− | u32 __nvmap_handle; // in | + | __in u32 nvmap_handle; |
− | u32 __page_size; // inout, 0 means don't care | + | __inout u32 page_size; // 0 means don't care |
| union { | | union { |
− | u64 __offset; // out | + | __out u64 offset; |
− | u64 __align; // in | + | __in u64 align; |
| }; | | }; |
| }; | | }; |
Line 612: |
Line 612: |
| | | |
| struct { | | struct { |
− | u32 __flags; // in, 4 works | + | __in u32 flags; // bit0: fixed_offset, bit2: cacheable |
− | u32 __kind; // in, -1 is default | + | __in u32 kind; // -1 is default |
− | u32 __nvmap_handle; // in | + | __in u32 nvmap_handle; |
− | u32 __page_size; // inout, 0 means don't care | + | __inout u32 page_size; // 0 means don't care |
− | u64 __buffer_offset; // in | + | __in u64 buffer_offset; |
− | u64 __mapping_size; // in | + | __in u64 mapping_size; |
− | u64 __offset; // out | + | __out u64 offset; |
| }; | | }; |
| | | |
Line 628: |
Line 628: |
| | | |
| struct { | | struct { |
− | u32 __big_page_size; // in (depends on GPU's available_big_page_sizes; 0=default) | + | __in u32 big_page_size; // depends on GPU's available_big_page_sizes; 0=default |
− | s32 __as_fd; // in (ignored; passes 0) | + | __in s32 as_fd; // ignored; passes 0 |
− | u32 __flags; // in (ignored; passes 0) | + | __in u32 flags; // ignored; passes 0 |
− | u32 __reserved; // in (ignored; passes 0) | + | __in u32 reserved; // ignored; passes 0 |
| }; | | }; |
| | | |
Line 638: |
Line 638: |
| | | |
| struct va_region { | | struct va_region { |
− | u64 __offset; | + | u64 offset; |
− | u32 __page_size; | + | u32 page_size; |
− | u32 __reserved; | + | u32 pad; |
− | u64 __pages; | + | u64 pages; |
| }; | | }; |
| | | |
| struct { | | struct { |
− | u64 __not_used; // (contained output user ptr on linux, ignored) | + | u64 not_used; // (contained output user ptr on linux, ignored) |
− | u32 __bufsize; // inout, forced to 2*sizeof(struct va_region) | + | __inout u32 bufsize; // forced to 2*sizeof(struct va_region) |
− | u32 __reserved; | + | u32 pad; |
− | struct va_region __regions[2]; // out | + | __out struct va_region regions[2]; |
| }; | | }; |
| | | |
Line 655: |
Line 655: |
| | | |
| struct { | | struct { |
− | u32 __big_page_size; // in (depends on GPU's available_big_page_sizes; 0=default) | + | __in u32 big_page_size; // depends on GPU's available_big_page_sizes; 0=default |
− | s32 __as_fd; // in (ignored; passes 0) | + | __in s32 as_fd; // ignored; passes 0 |
− | u32 __flags; // in (ignored; passes 0) | + | __in u32 flags; // ignored; passes 0 |
− | u32 __reserved; // in (ignored; passes 0) | + | __in u32 reserved; // ignored; passes 0 |
− | u64 __unk0; // in | + | __in u64 unk0; |
− | u64 __unk1; // in | + | __in u64 unk1; |
− | u64 __unk2; // in | + | __in u64 unk2; |
| }; | | }; |
| | | |
Line 744: |
Line 744: |
| Returns the GPU characteristics. Modified to return inline data instead of using a pointer. | | Returns the GPU characteristics. Modified to return inline data instead of using a pointer. |
| | | |
− | struct __gpu_characteristics { | + | struct gpu_characteristics { |
− | u32 __arch; // 0x120 (NVGPU_GPU_ARCH_GM200) | + | u32 arch; // 0x120 (NVGPU_GPU_ARCH_GM200) |
− | u32 __impl; // 0xB (NVGPU_GPU_IMPL_GM20B) | + | u32 impl; // 0xB (NVGPU_GPU_IMPL_GM20B) |
− | u32 __rev; // 0xA1 (Revision A1) | + | u32 rev; // 0xA1 (Revision A1) |
− | u32 __num_gpc; // 0x1 | + | u32 num_gpc; // 0x1 |
− | u64 __L2_cache_size; // 0x40000 | + | u64 l2_cache_size; // 0x40000 |
− | u64 __on_board_video_memory_size; // 0x0 (not used) | + | u64 on_board_video_memory_size; // 0x0 (not used) |
− | u32 __num_tpc_per_gpc; // 0x2 | + | u32 num_tpc_per_gpc; // 0x2 |
− | u32 __bus_type; // 0x20 (NVGPU_GPU_BUS_TYPE_AXI) | + | u32 bus_type; // 0x20 (NVGPU_GPU_BUS_TYPE_AXI) |
− | u32 __big_page_size; // 0x20000 | + | u32 big_page_size; // 0x20000 |
− | u32 __compression_page_size; // 0x20000 | + | u32 compression_page_size; // 0x20000 |
− | u32 __pde_coverage_bit_count; // 0x1B | + | u32 pde_coverage_bit_count; // 0x1B |
− | u32 __available_big_page_sizes; // 0x30000 | + | u32 available_big_page_sizes; // 0x30000 |
− | u32 __gpc_mask; // 0x1 | + | u32 gpc_mask; // 0x1 |
− | u32 __sm_arch_sm_version; // 0x503 (Maxwell Generation 5.0.3?) | + | u32 sm_arch_sm_version; // 0x503 (Maxwell Generation 5.0.3?) |
− | u32 __sm_arch_spa_version; // 0x503 (Maxwell Generation 5.0.3?) | + | u32 sm_arch_spa_version; // 0x503 (Maxwell Generation 5.0.3?) |
− | u32 __sm_arch_warp_count; // 0x80 | + | u32 sm_arch_warp_count; // 0x80 |
− | u32 __gpu_va_bit_count; // 0x28 | + | u32 gpu_va_bit_count; // 0x28 |
− | u32 __reserved; // NULL | + | u32 reserved; // NULL |
− | u64 __flags; // 0x55 | + | u64 flags; // 0x55 |
− | u32 __twod_class; // 0x902D (FERMI_TWOD_A) | + | u32 twod_class; // 0x902D (FERMI_TWOD_A) |
− | u32 __threed_class; // 0xB197 (MAXWELL_B) | + | u32 threed_class; // 0xB197 (MAXWELL_B) |
− | u32 __compute_class; // 0xB1C0 (MAXWELL_COMPUTE_B) | + | u32 compute_class; // 0xB1C0 (MAXWELL_COMPUTE_B) |
− | u32 __gpfifo_class; // 0xB06F (MAXWELL_CHANNEL_GPFIFO_A) | + | u32 gpfifo_class; // 0xB06F (MAXWELL_CHANNEL_GPFIFO_A) |
− | u32 __inline_to_memory_class; // 0xA140 (KEPLER_INLINE_TO_MEMORY_B) | + | u32 inline_to_memory_class; // 0xA140 (KEPLER_INLINE_TO_MEMORY_B) |
− | u32 __dma_copy_class; // 0xB0B5 (MAXWELL_DMA_COPY_A) | + | u32 dma_copy_class; // 0xB0B5 (MAXWELL_DMA_COPY_A) |
− | u32 __max_fbps_count; // 0x1 | + | u32 max_fbps_count; // 0x1 |
− | u32 __fbp_en_mask; // 0x0 (disabled) | + | u32 fbp_en_mask; // 0x0 (disabled) |
− | u32 __max_ltc_per_fbp; // 0x2 | + | u32 max_ltc_per_fbp; // 0x2 |
− | u32 __max_lts_per_ltc; // 0x1 | + | u32 max_lts_per_ltc; // 0x1 |
− | u32 __max_tex_per_tpc; // 0x0 (not supported) | + | u32 max_tex_per_tpc; // 0x0 (not supported) |
− | u32 __max_gpc_count; // 0x1 | + | u32 max_gpc_count; // 0x1 |
− | u32 __rop_l2_en_mask_0; // 0x21D70 (fuse_status_opt_rop_l2_fbp_r) | + | u32 rop_l2_en_mask_0; // 0x21D70 (fuse_status_opt_rop_l2_fbp_r) |
− | u32 __rop_l2_en_mask_1; // 0x0 | + | u32 rop_l2_en_mask_1; // 0x0 |
− | u64 __chipname; // 0x6230326D67 ("gm20b") | + | u64 chipname; // 0x6230326D67 ("gm20b") |
− | u64 __gr_compbit_store_base_hw; // 0x0 (not supported) | + | u64 gr_compbit_store_base_hw; // 0x0 (not supported) |
| }; | | }; |
| | | |
| struct { | | struct { |
− | u64 __gpu_characteristics_buf_size; // in/out (must not be NULL, but gets overwritten with 0xA0=max_size) | + | __inout u64 gpu_characteristics_buf_size; // must not be NULL, but gets overwritten with 0xA0=max_size |
− | u64 __gpu_characteristics_buf_addr; // in (ignored, but must not be NULL) | + | __in u64 gpu_characteristics_buf_addr; // ignored, but must not be NULL |
− | struct __gpu_characteristics gc; // out | + | __out struct gpu_characteristics gc; |
| }; | | }; |
| | | |
Line 792: |
Line 792: |
| | | |
| struct { | | struct { |
− | u32 __flush; // in (l2_flush | l2_invalidate << 1 | fb_flush << 2) | + | __in u32 flush; // l2_flush | l2_invalidate << 1 | fb_flush << 2 |
− | u32 __reserved; // in | + | u32 reserved; |
| }; | | }; |
| | | |
Line 800: |
Line 800: |
| | | |
| struct { | | struct { |
− | u32 __mask; // out (always 0x07) | + | __out u32 mask; // always 0x07 |
− | u32 __flush; // out (active flush bit field) | + | __out u32 flush; // active flush bit field |
| }; | | }; |
| | | |
Line 891: |
Line 891: |
| | | |
| struct { | | struct { |
− | u32 __nvmap_fd; // in | + | __in u32 nvmap_fd; |
| }; | | }; |
| | | |
Line 898: |
Line 898: |
| | | |
| struct { | | struct { |
− | u32 __num_entries; // in | + | __in u32 num_entries; |
− | u32 __flags; // in | + | __in u32 flags; |
| }; | | }; |
| | | |
Line 906: |
Line 906: |
| | | |
| struct fence { | | struct fence { |
− | u32 __id; | + | u32 id; |
− | u32 __value; | + | u32 value; |
| }; | | }; |
| | | |
| struct gpfifo_entry { | | struct gpfifo_entry { |
− | u32 __entry0; | + | u32 entry0; |
− | u32 __entry1; | + | u32 entry1; |
| }; | | }; |
| | | |
| struct { | | struct { |
− | u64 __gpfifo; // in (pointer to gpfifo fence structs; ignored) | + | __in u64 gpfifo; // (ignored) pointer to gpfifo fence structs |
− | u32 __num_entries; // in (number of fence objects being submitted) | + | __in u32 num_entries; // number of fence objects being submitted |
− | u32 __flags; // in | + | __in u32 flags; |
− | struct fence __fence_out; // out (returned new fence object for others to wait on) | + | __out struct fence fence_out; // returned new fence object for others to wait on |
− | struct gpfifo_entry __entries[]; // in (depends on __num_entries) | + | __in struct gpfifo_entry entries[]; // depends on num_entries |
| }; | | }; |
| | | |
Line 927: |
Line 927: |
| | | |
| struct { | | struct { |
− | u32 __class_num; // in (0x902D=2d, 0xB197=3d, 0xB1C0=compute, 0xA140=kepler, 0xB0B5=DMA, 0xB06F=channel_gpfifo) | + | __in u32 class_num; // 0x902D=2d, 0xB197=3d, 0xB1C0=compute, 0xA140=kepler, 0xB0B5=DMA, 0xB06F=channel_gpfifo |
− | u32 __flags; // in | + | __in u32 flags; |
− | u64 __obj_id; // out (ignored; used for FREE_OBJ_CTX ioctl, which is not supported) | + | __out u64 obj_id; // (ignored) used for FREE_OBJ_CTX ioctl, which is not supported |
| }; | | }; |
| | | |
Line 936: |
Line 936: |
| | | |
| struct { | | struct { |
− | u64 __offset; // in | + | __in u64 offset; |
− | u64 __size; // in | + | __in u64 size; |
− | u32 __mem; // in (nvmap object handle) | + | __in u32 mem; // nvmap object handle |
− | u32 __padding; // in | + | __in u32 padding; |
| }; | | }; |
| | | |
Line 946: |
Line 946: |
| | | |
| struct { | | struct { |
− | u32 __priority; // in (0x32 is low, 0x64 is medium and 0x96 is high) | + | __in u32 priority; // 0x32 is low, 0x64 is medium and 0x96 is high |
| }; | | }; |
| | | |
Line 965: |
Line 965: |
| | | |
| struct { | | struct { |
− | u32 __cmd; // in (0=disable, 1=enable, 2=clear) | + | __in u32 cmd; // 0=disable, 1=enable, 2=clear |
− | u32 __unk; // in (accepts 1 or 2) | + | __in u32 unk; // accepts 1 or 2 |
| }; | | }; |
| | | |
Line 973: |
Line 973: |
| | | |
| struct { | | struct { |
− | u64 __timestamp; // out (nanoseconds since Jan. 1, 1970) | + | __out u64 timestamp; // nanoseconds since Jan. 1, 1970 |
− | u32 __info32; // out (error code) | + | __out u32 info32; // error code |
− | u16 __info16; // out (additional error info) | + | __out u16 info16; // additional error info |
− | u16 __status; // inout (always 0xFFFF) | + | __inout u16 status; // always 0xFFFF |
| }; | | }; |
| | | |
Line 983: |
Line 983: |
| | | |
| struct { | | struct { |
− | u32 __num_entries; // in | + | __in u32 num_entries; |
− | u32 __flags; // in | + | __in u32 flags; |
− | u32 __unk0; // in (1 works) | + | __in u32 unk0; // 1 works |
− | u32 __unk1; // in | + | __in u32 unk1; |
− | u32 __unk2; // in | + | __in u32 unk2; |
− | u32 __unk3; // in | + | __in u32 unk3; |
− | u32 __unk4; // in | + | __in u32 unk4; |
− | u32 __unk5; // in | + | __in u32 unk5; |
| }; | | }; |
| | | |