Changes

Jump to navigation Jump to search
4,436 bytes added ,  16:02, 3 June 2017
no edit summary
Line 342: Line 342:  
   struct {
 
   struct {
 
     u32 __handle; // in
 
     u32 __handle; // in
     u32 __param;  // in, 1=SIZE, 2=ALIGNMENT, 3=?, 4=?, 5=UNK0, 6=?
+
     u32 __param;  // in, 1=SIZE, 2=ALIGNMENT, 3=BASE (returns error), 4=HEAP (always 0x40000000), 5=KIND, 6=COMPR (unused)
 
     u32 __result; // out
 
     u32 __result; // out
 
   };
 
   };
Line 432: Line 432:  
| 0x00000013 || 0 || ||
 
| 0x00000013 || 0 || ||
 
|- style="border-top: double"
 
|- style="border-top: double"
| 0x40044801 || 4 || NVGPU_IOCTL_CHANNEL_SET_NVMAP_FD ||
+
| 0x40044801 || 4 || [[#NVGPU_IOCTL_CHANNEL_SET_NVMAP_FD]] ||
 
|-
 
|-
 
| 0x40044803 || 4 || NVGPU_IOCTL_CHANNEL_SET_PRIORITY ||
 
| 0x40044803 || 4 || NVGPU_IOCTL_CHANNEL_SET_PRIORITY ||
 
|-
 
|-
| 0x40084805 || 8 || NVGPU_IOCTL_CHANNEL_ALLOC_GPFIFO ||
+
| 0x40084805 || 8 || [[#NVGPU_IOCTL_CHANNEL_ALLOC_GPFIFO]] ||
 
|-
 
|-
 
| 0xC0044807 || 4 || NVGPU_IOCTL_CHANNEL_CYCLE_STATS ||
 
| 0xC0044807 || 4 || NVGPU_IOCTL_CHANNEL_CYCLE_STATS ||
 
|-
 
|-
| 0xC0184808 || 24 || NVGPU_IOCTL_CHANNEL_SUBMIT_GPFIFO ||
+
| 0xC0??4808 || Variable || [[#NVGPU_IOCTL_CHANNEL_SUBMIT_GPFIFO]] ||
 
|-
 
|-
| 0xC0104809 || 16 || NVGPU_IOCTL_CHANNEL_ALLOC_OBJ_CTX ||
+
| 0xC0104809 || 16 || [[#NVGPU_IOCTL_CHANNEL_ALLOC_OBJ_CTX]] ||
|-
  −
| 0x4008480A || 8 || NVGPU_IOCTL_CHANNEL_FREE_OBJ_CTX ||
   
|-
 
|-
 
| 0xC010480B || 16 || NVGPU_IOCTL_CHANNEL_ZCULL_BIND ||
 
| 0xC010480B || 16 || NVGPU_IOCTL_CHANNEL_ZCULL_BIND ||
 
|-
 
|-
| 0xC018480C || 24 || NVGPU_IOCTL_CHANNEL_SET_ERROR_NOTIFIER ||
+
| 0xC018480C || 24 || [[#NVGPU_IOCTL_CHANNEL_SET_ERROR_NOTIFIER]] ||
 
|-
 
|-
| 0x4004480D || 4 || NVGPU_IOCTL_CHANNEL_OPEN ||
+
| 0x4004480D || 4 || [[#NVGPU_IOCTL_CHANNEL_OPEN]] ||
 
|-
 
|-
| 0x0000480E || 0 || NVGPU_IOCTL_CHANNEL_ENABLE ||
+
| 0x0000480E || 0 || [[#NVGPU_IOCTL_CHANNEL_ENABLE]] ||
 
|-
 
|-
| 0x0000480F || 0 || NVGPU_IOCTL_CHANNEL_DISABLE ||
+
| 0x0000480F || 0 || [[#NVGPU_IOCTL_CHANNEL_DISABLE]] ||
 
|-
 
|-
| 0x00004810 || 0 || NVGPU_IOCTL_CHANNEL_PREEMPT ||
+
| 0x00004810 || 0 || [[#NVGPU_IOCTL_CHANNEL_PREEMPT]] ||
 
|-
 
|-
| 0x00004811 || 0 || NVGPU_IOCTL_CHANNEL_FORCE_RESET ||
+
| 0x00004811 || 0 || [[#NVGPU_IOCTL_CHANNEL_FORCE_RESET]] ||
 
|-
 
|-
| 0x40084812 || 8 || NVGPU_IOCTL_CHANNEL_EVENTS_CTRL ||
+
| 0x40084812 || 8 || [[#NVGPU_IOCTL_CHANNEL_EVENTS_CTRL]] ||
 
|-
 
|-
 
| 0xC0104813 || 16 || NVGPU_IOCTL_CHANNEL_CYCLE_STATS_SNAPSHOT ||
 
| 0xC0104813 || 16 || NVGPU_IOCTL_CHANNEL_CYCLE_STATS_SNAPSHOT ||
 
|-
 
|-
| 0x80804816 || 128 ||
+
| 0x80804816 || 128 || || Only works when the channel is busy
 
|-
 
|-
| 0xC0104817 || 16 || ||
+
| 0xC0104817 || 16 || [[#NVGPU_IOCTL_CHANNEL_GET_ERROR]] ||
 
|-
 
|-
| 0x40204818 || 32 || NVGPU_IOCTL_CHANNEL_ALLOC_GPFIFO_EX ||
+
| 0x40204818 || 32 || [[#NVGPU_IOCTL_CHANNEL_ALLOC_GPFIFO_EX]] ||
 
|-
 
|-
| 0xC0484819 || 72 ||
+
| 0xC0??4819 || Variable || [[#NVGPU_IOCTL_CHANNEL_SUBMIT_GPFIFO_EX]] ||
 
|-
 
|-
| 0xC020481A || 32 || NVGPU_IOCTL_CHANNEL_ALLOC_GPFIFO_EX2 ||
+
| 0xC020481A || 32 || [[#NVGPU_IOCTL_CHANNEL_ALLOC_GPFIFO_EX2]] ||
 
|-
 
|-
 
|- style="border-top: double"
 
|- style="border-top: double"
| 0x40084714 || 8 || set_user_address ||
+
| 0x40084714 || 8 || set_user_address || Sets an unknown user context address
 
|-
 
|-
| 0x80084715 || 8 || get_user_address ||
+
| 0x80084715 || 8 || get_user_address || Gets an unknown user context address
 
|}
 
|}
 +
 +
=== NVGPU_IOCTL_CHANNEL_SET_NVMAP_FD ===
 +
Binds a nvmap object to this channel. Identical to Linux driver.
 +
 +
  struct {
 +
    u32 __nvmap_fd;    // in
 +
  };
 +
 +
=== NVGPU_IOCTL_CHANNEL_ALLOC_GPFIFO ===
 +
Allocates gpfifo entries. Identical to Linux driver.
 +
 +
  struct {
 +
    u32 __num_entries;    // in
 +
    u32 __flags;          // in
 +
  };
 +
 +
=== NVGPU_IOCTL_CHANNEL_SUBMIT_GPFIFO ===
 +
Submits a gpfifo object. Modified to take inline fence objects instead of a pointer.
 +
 +
  struct fence {
 +
    u32 __id;
 +
    u32 __value;
 +
  };
 +
 +
  struct {
 +
    u64 __gpfifo;              // in (pointer to gpfifo fence structs; ignored)
 +
    u32 __num_entries;        // in (number of fence objects being submitted)
 +
    u32 __flags;              // in
 +
    struct fence __fence_out;  // out (returned new fence object for others to wait on)
 +
    struct fence __fence;      // in (fence objects; depends on __num_entries)
 +
    ...
 +
  };
 +
 +
=== NVGPU_IOCTL_CHANNEL_ALLOC_OBJ_CTX ===
 +
Allocates a graphics context object. Modified to ignore object's ID.
 +
 +
  struct {
 +
    u32 __class_num;    // in (0xB197=2d, 0xB1C0=compute, 0xA140=kepler, 0xB0B5=DMA, 0xB06F=channel_gpfifo)
 +
    u32 __flags;        // in
 +
    u64 __obj_id;      // out (ignored; used for FREE_OBJ_CTX ioctl, which is not supported)
 +
  };
 +
 +
=== NVGPU_IOCTL_CHANNEL_SET_ERROR_NOTIFIER ===
 +
Initializes the error notifier for this channel. Identical to Linux driver.
 +
 +
  struct {
 +
    u64 __offset;    // in
 +
    u64 __size;      // in
 +
    u32 __mem;      // in (nvmap object handle)
 +
    u32 __padding;  // in
 +
  };
 +
 +
=== NVGPU_IOCTL_CHANNEL_OPEN ===
 +
Opens the current channel. Unused and takes an unknown argument.
 +
 +
  struct {
 +
    u32 __unk;    // in (only accepts 0x32, 0x64 or 0x96)
 +
  };
 +
 +
=== NVGPU_IOCTL_CHANNEL_ENABLE ===
 +
Enables the current channel. Identical to Linux driver.
 +
 +
=== NVGPU_IOCTL_CHANNEL_DISABLE ===
 +
Disables the current channel. Identical to Linux driver.
 +
 +
=== NVGPU_IOCTL_CHANNEL_PREEMPT ===
 +
Clears the FIFO pipe for this channel. Identical to Linux driver.
 +
 +
=== NVGPU_IOCTL_CHANNEL_FORCE_RESET ===
 +
Forces the channel to reset. Identical to Linux driver.
 +
 +
=== NVGPU_IOCTL_CHANNEL_EVENTS_CTRL ===
 +
Controls event notifications. Modified to take an additional argument.
 +
 +
  struct {
 +
    u32 __cmd;    // in (0=disable, 1=enable, 2=clear)
 +
    u32 __unk;    // in (accepts 1 or 2)
 +
  };
 +
 +
=== NVGPU_IOCTL_CHANNEL_GET_ERROR ===
 +
Returns the current error notification caught by the error notifier. Exclusive to the Switch.
 +
 +
  struct {
 +
    u64 __timestamp;    // out (nanoseconds since Jan. 1, 1970)
 +
    u32 __info32;      // out (error code)
 +
    u16 __info16;      // out (additional error info)
 +
    u16 __status;      // out (always 0xFFFF)
 +
  };
 +
 +
=== NVGPU_IOCTL_CHANNEL_ALLOC_GPFIFO_EX ===
 +
Allocates gpfifo entries with additional parameters. Exclusive to the Switch.
 +
 +
  struct {
 +
    u32 __num_entries;    // in
 +
    u32 __flags;          // in
 +
    u32 __unk0;            // in (1 works)
 +
    u32 __unk1;            // in
 +
    u32 __unk2;            // in
 +
    u32 __unk3;            // in
 +
    u32 __unk4;            // in
 +
    u32 __unk5;            // in
 +
  };
 +
 +
=== NVGPU_IOCTL_CHANNEL_SUBMIT_GPFIFO_EX ===
 +
Submits a gpfifo object (async version). Exclusive to the Switch.
 +
 +
  struct fence {
 +
    u32 __id;
 +
    u32 __value;
 +
  };
 +
 +
  struct {
 +
    u64 __gpfifo;              // in (pointer to gpfifo fence structs; ignored)
 +
    u32 __num_entries;        // in (number of fence objects being submitted)
 +
    u32 __flags;              // in
 +
    struct fence __fence_out;  // out (returned new fence object for others to wait on)
 +
    struct fence __fence;      // in (fence objects; depends on __num_entries)
 +
    ...
 +
  };
 +
 +
=== NVGPU_IOCTL_CHANNEL_ALLOC_GPFIFO_EX2 ===
 +
Allocates gpfifo entries with additional parameters and returns a fence. Exclusive to the Switch.
 +
 +
  struct fence {
 +
    u32 __id;
 +
    u32 __value;
 +
  };
 +
 +
  struct {
 +
    u32 __num_entries;        // in
 +
    u32 __flags;              // in
 +
    u32 __unk0;                // in (1 works)
 +
    struct fence __fence_out;  // out
 +
    u32 __unk1;                // in
 +
    u32 __unk2;                // in
 +
    u32 __unk3;                // in
 +
  };
    
== Remaining Ioctls ==
 
== Remaining Ioctls ==
Line 569: Line 704:  
|-
 
|-
 
| 0x1000 || SharedMemoryTooSmall
 
| 0x1000 || SharedMemoryTooSmall
 +
|-
 +
| 0x30003 || FileOperationFailed
 
|-
 
|-
 
| 0x3000F || IoctlFailed                         
 
| 0x3000F || IoctlFailed                         
 
|}
 
|}

Navigation menu