<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gabe+k</id>
	<title>Nintendo Switch Brew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gabe+k"/>
	<link rel="alternate" type="text/html" href="https://switchbrew.org/wiki/Special:Contributions/Gabe_k"/>
	<updated>2026-05-11T17:23:20Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NV_services&amp;diff=3803</id>
		<title>NV services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NV_services&amp;diff=3803"/>
		<updated>2018-02-20T06:55:15Z</updated>

		<summary type="html">&lt;p&gt;Gabe k: Fixed name for NVGPU_GPU_IOCTL_ZCULL_GET_INFO section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch uses a customized NVIDIA driver.&lt;br /&gt;
&lt;br /&gt;
= nvdrv, nvdrv:a, nvdrv:s, nvdrv:t =&lt;br /&gt;
This is &amp;quot;nns::nvdrv::INvDrvServices&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Main NVIDIA driver service.&lt;br /&gt;
&lt;br /&gt;
Each service is used by:&lt;br /&gt;
* &amp;quot;nvdrv&amp;quot;: regular applications&lt;br /&gt;
* &amp;quot;nvdrv:a&amp;quot;: applets&lt;br /&gt;
* &amp;quot;nvdrv:s&amp;quot;: sysmodules&lt;br /&gt;
* &amp;quot;nvdrv:t&amp;quot;: factory titles&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Open]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Ioctl]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#Close]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#QueryEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#MapSharedMem]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#GetStatus]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#ForceSetClientPID]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#SetClientPID]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#DumpGraphicsMemoryInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [3.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [3.0.0+] [[#Ioctl2]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [3.0.0+] [[#Ioctl3]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [3.0.0+]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Open ==&lt;br /&gt;
Takes a type-0x5 input buffer for the device-path. Returns the output 32bit &#039;&#039;&#039;fd&#039;&#039;&#039; and the u32 &#039;&#039;&#039;error_code&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Ioctl ==&lt;br /&gt;
Takes a 32bit &#039;&#039;&#039;fd&#039;&#039;&#039;, an u32 &#039;&#039;&#039;ioctl_cmd&#039;&#039;&#039;, a type-0x21 input buffer, and a type-0x22 output buffer. Returns an output u32 (&#039;&#039;&#039;error_code&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
The addr/size for send/recv buffers are only set when the associated direction bit is set in the ioctl cmd (addr/size = 0 otherwise).&lt;br /&gt;
&lt;br /&gt;
== Close ==&lt;br /&gt;
Takes a 32bit &#039;&#039;&#039;fd&#039;&#039;&#039;. Returns an output u32 (&#039;&#039;&#039;error_code&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== Initialize ==&lt;br /&gt;
Takes two copy-handles (&#039;&#039;&#039;current_process&#039;&#039;&#039; and &#039;&#039;&#039;transfer_memory&#039;&#039;&#039;) and an input u32 (&#039;&#039;&#039;transfer_memory_size&#039;&#039;&#039;). Returns an output u32 (&#039;&#039;&#039;error_code&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Webkit applet creates the transfer-memory with perm = 0 and size 0x300000.&lt;br /&gt;
&lt;br /&gt;
== QueryEvent ==&lt;br /&gt;
Takes two input u32s (&#039;&#039;&#039;fd&#039;&#039;&#039; and &#039;&#039;&#039;event_id&#039;&#039;&#039;), with the second word immediately after the first one. Returns an output u32 (&#039;&#039;&#039;error_code&#039;&#039;&#039;) and a copy-handle (&#039;&#039;&#039;event_handle&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== MapSharedMem ==&lt;br /&gt;
Takes a copy-handle (&#039;&#039;&#039;transfer_memory&#039;&#039;&#039;) and two input u32s (&#039;&#039;&#039;fd&#039;&#039;&#039; and &#039;&#039;&#039;nvmap_handle&#039;&#039;&#039;). Returns an output u32 (&#039;&#039;&#039;error_code&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== GetStatus ==&lt;br /&gt;
Takes no input. Returns 0x10-bytes and an output u32 (&#039;&#039;&#039;error_code&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== ForceSetClientPID ==&lt;br /&gt;
Takes an input u64 which must [[IPC_Marshalling|match]] the user-process PID ([[AM_services|AppletResourceUserId]]). Returns an output u32 (&#039;&#039;&#039;error_code&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== SetClientPID ==&lt;br /&gt;
Takes a PID-descriptor and an u64 which must [[IPC_Marshalling|match]] the user-process PID ([[AM_services|AppletResourceUserId]]). Returns an output u32 (&#039;&#039;&#039;error_code&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== DumpGraphicsMemoryInfo ==&lt;br /&gt;
No input or output. Does nothing.&lt;br /&gt;
&lt;br /&gt;
== Cmd10 ==&lt;br /&gt;
Takes a copy-handle and an input u32. Returns an output u32 (&#039;&#039;&#039;error_code&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== Ioctl2 ==&lt;br /&gt;
Takes a type-0x21 buffer, a type-0x22 buffer, a type-0x21 buffer, and two input u32s. Returns an output u32 (&#039;&#039;&#039;error_code&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== Ioctl3 ==&lt;br /&gt;
Same input/output as Ioctl2, except cmdhdr_word1 is 0x100B instead of 0xC0B.&lt;br /&gt;
&lt;br /&gt;
== Cmd13 ==&lt;br /&gt;
Takes an input u64. No output.&lt;br /&gt;
&lt;br /&gt;
Official user-processes starting with 3.0.0 now use this at the end of nvdrv service init with value 0x1.&lt;br /&gt;
&lt;br /&gt;
= Ioctls =&lt;br /&gt;
The ioctl number is generated with the following primitive (see Linux kernel):&lt;br /&gt;
&lt;br /&gt;
 #define _IOC(inout, group, num, len) \&lt;br /&gt;
    (inout | ((len &amp;amp; IOCPARM_MASK) &amp;lt;&amp;lt; 16) | ((group) &amp;lt;&amp;lt; 8) | (num))&lt;br /&gt;
&lt;br /&gt;
The following table contains known ioctls.&lt;br /&gt;
&lt;br /&gt;
== /dev/nvhost-ctrl ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value || Direction || Size || Description || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0080014 || Inout || 8 || [[#NVHOST_IOCTL_CTRL_SYNCPT_READ]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40040015 || In || 4 || [[#NVHOST_IOCTL_CTRL_SYNCPT_INCR]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC00C0016 || Inout || 12 || [[#NVHOST_IOCTL_CTRL_SYNCPT_WAIT]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40080017 || In || 8 || [[#NVHOST_IOCTL_CTRL_MODULE_MUTEX]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0180018 || Inout || 24 || [[#NVHOST_IOCTL_CTRL_MODULE_REGRDWR]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0100019 || Inout || 16 || [[#NVHOST_IOCTL_CTRL_SYNCPT_WAITEX]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC008001A || Inout || 8 || [[#NVHOST_IOCTL_CTRL_SYNCPT_READ_MAX]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC183001B || Inout || 387 || [[#NVHOST_IOCTL_CTRL_GET_CONFIG]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC004001C || Inout || 4 || [[#NVHOST_IOCTL_CTRL_EVENT_SIGNAL]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC010001D || Inout || 16 || [[#NVHOST_IOCTL_CTRL_EVENT_WAIT]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC010001E || Inout || 16 || [[#NVHOST_IOCTL_CTRL_EVENT_WAIT_ASYNC]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC004001F || Inout || 4 || [[#NVHOST_IOCTL_CTRL_EVENT_REGISTER]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0040020 || Inout || 4 || [[#NVHOST_IOCTL_CTRL_EVENT_UNREGISTER]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40080021 || In || 8 || [[#NVHOST_IOCTL_CTRL_EVENT_KILL]] ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== NVHOST_IOCTL_CTRL_SYNCPT_READ ===&lt;br /&gt;
Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in  u32 id;&lt;br /&gt;
    __out u32 value;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVHOST_IOCTL_CTRL_SYNCPT_INCR ===&lt;br /&gt;
Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u32 id;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVHOST_IOCTL_CTRL_SYNCPT_WAIT ===&lt;br /&gt;
Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u32 id;&lt;br /&gt;
    __in u32 thresh;&lt;br /&gt;
    __in s32 timeout;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVHOST_IOCTL_CTRL_MODULE_MUTEX ===&lt;br /&gt;
Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u32 id;&lt;br /&gt;
    __in u32 lock;        // (0==unlock; 1==lock)&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVHOST_IOCTL_CTRL_MODULE_REGRDWR ===&lt;br /&gt;
Identical to Linux driver. Uses 32-bit version and doesn&#039;t work.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u32 id;&lt;br /&gt;
    __in u32 num_offsets;&lt;br /&gt;
    __in u32 block_size;&lt;br /&gt;
    __in u32 offsets;&lt;br /&gt;
    __in u32 values;&lt;br /&gt;
    __in u32 write;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVHOST_IOCTL_CTRL_SYNCPT_WAITEX ===&lt;br /&gt;
Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in  u32 id;&lt;br /&gt;
    __in  u32 thresh;&lt;br /&gt;
    __in  s32 timeout;&lt;br /&gt;
    __out u32 value;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVHOST_IOCTL_CTRL_SYNCPT_READ_MAX ===&lt;br /&gt;
Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in  u32 id;&lt;br /&gt;
    __out u32 value;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVHOST_IOCTL_CTRL_GET_CONFIG ===&lt;br /&gt;
Gets configured settings. Not available in production mode.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in char domain_str[0x41];       // &amp;quot;nv&amp;quot;&lt;br /&gt;
    __in char param_str[0x41];&lt;br /&gt;
    __out char config_str[0x101];&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVHOST_IOCTL_CTRL_EVENT_SIGNAL ===&lt;br /&gt;
Signals an user event. Exclusive to the Switch.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u32 user_event_id;      // ranges from 0x00 to 0x3F&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVHOST_IOCTL_CTRL_EVENT_WAIT ===&lt;br /&gt;
Waits on an event. If waiting fails, returns error code 0x05 (Timeout) and sets &#039;&#039;&#039;value&#039;&#039;&#039; to ((&#039;&#039;&#039;syncpt_id&#039;&#039;&#039; &amp;lt;&amp;lt; 0x10) | 0x10000000).&lt;br /&gt;
&lt;br /&gt;
Depending on &#039;&#039;&#039;threshold&#039;&#039;&#039;, an &#039;&#039;&#039;user_event_id&#039;&#039;&#039; may be returned for using with other event ioctls.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in    u32 syncpt_id;&lt;br /&gt;
    __in    u32 threshold;&lt;br /&gt;
    __in    s32 timeout;&lt;br /&gt;
    __inout u32 value;           // in=user_event_id (ignored); out=syncpt_value or user_event_id&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVHOST_IOCTL_CTRL_EVENT_WAIT_ASYNC ===&lt;br /&gt;
Waits on an event (async version). If waiting fails, returns error code 0x0B (BadValue).&lt;br /&gt;
&lt;br /&gt;
Depending on &#039;&#039;&#039;threshold&#039;&#039;&#039;, an &#039;&#039;&#039;user_event_id&#039;&#039;&#039; may be returned for using with other event ioctls.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in    u32 syncpt_id;&lt;br /&gt;
    __in    u32 threshold;&lt;br /&gt;
    __in    u32 timeout;&lt;br /&gt;
    __inout u32 value;           // in=user_event_id (ignored); out=syncpt_value or user_event_id&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVHOST_IOCTL_CTRL_EVENT_REGISTER ===&lt;br /&gt;
Registers an user event. Exclusive to the Switch. &lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u32 user_event_id;      // ranges from 0x00 to 0x3F&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVHOST_IOCTL_CTRL_EVENT_UNREGISTER ===&lt;br /&gt;
Unregisters an user event. Exclusive to the Switch. &lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u32 user_event_id;      // ranges from 0x00 to 0x3F&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVHOST_IOCTL_CTRL_EVENT_KILL ===&lt;br /&gt;
Kills user events. Exclusive to the Switch. &lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u64 user_events;       // 64-bit bitfield where each bit represents one event&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
== /dev/nvmap ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value || Direction || Size || Description || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0080101 || Inout || 8 || [[#NVMAP_IOC_CREATE]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000102 || - || 0 || NVMAP_IOC_CLAIM || Returns NotSupported&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0080103 || Inout || 8 || [[#NVMAP_IOC_FROM_ID]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0200104 || Inout || 32 || [[#NVMAP_IOC_ALLOC]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0180105 || Inout || 24 || [[#NVMAP_IOC_FREE]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0280106 || Inout || 40 || NVMAP_IOC_MMAP || Returns NotSupported&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0280107 || Inout || 40 || NVMAP_IOC_WRITE || Returns NotSupported&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0280108 || Inout || 40 || NVMAP_IOC_READ || Returns NotSupported&lt;br /&gt;
|-&lt;br /&gt;
| 0xC00C0109 || Inout || 12 || [[#NVMAP_IOC_PARAM]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC010010A || Inout || 16 || NVMAP_IOC_PIN_MULT || Returns NotSupported&lt;br /&gt;
|-&lt;br /&gt;
| 0xC010010B || Inout || 16 || NVMAP_IOC_UNPIN_MULT || Returns NotSupported&lt;br /&gt;
|-&lt;br /&gt;
| 0xC008010C || Inout || 8 || NVMAP_IOC_CACHE || Returns NotSupported&lt;br /&gt;
|-&lt;br /&gt;
| 0xC004010D || Inout || 4 || || Returns NotSupported&lt;br /&gt;
|-&lt;br /&gt;
| 0xC008010E || Inout || 8 || [[#NVMAP_IOC_GET_ID]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC004010F || Inout || 4 || || Returns NotSupported&lt;br /&gt;
|-&lt;br /&gt;
| 0x40040110 || In || 4 || || Returns NotSupported&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000111 || - || 0 || || Returns NotSupported&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== NVMAP_IOC_CREATE ===&lt;br /&gt;
Creates an nvmap object. Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in  u32 size;&lt;br /&gt;
    __out u32 handle;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVMAP_IOC_FROM_ID ===&lt;br /&gt;
Get handle to an existing nvmap object. Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in  u32 id;&lt;br /&gt;
    __out u32 handle;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVMAP_IOC_ALLOC ===&lt;br /&gt;
Allocate memory for the nvmap object. Nintendo extended this one with 16 bytes, and changed it from in to inout.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u32 handle;&lt;br /&gt;
    __in u32 heapmask;&lt;br /&gt;
    __in u32 flags;    // (0=read-only, 1=read-write)&lt;br /&gt;
    __in u32 align;&lt;br /&gt;
    __in u8  kind;&lt;br /&gt;
    u8       pad[7];&lt;br /&gt;
    __in u64 addr;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVMAP_IOC_FREE ===&lt;br /&gt;
This one is completely custom. Partly because the Linux driver passed the handle as the ioctl &amp;quot;arg-ptr&amp;quot;, and HIPC can&#039;t handle that voodoo.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in  u32 handle;&lt;br /&gt;
    u32       pad;&lt;br /&gt;
    __out u64 refcount;&lt;br /&gt;
    __out u32 size;&lt;br /&gt;
    __out u32 flags;    // 1=NOT_FREED_YET&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVMAP_IOC_PARAM ===&lt;br /&gt;
Returns info about a nvmap object. Identical to Linux driver, but extended with further params.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in  u32 handle;&lt;br /&gt;
    __in  u32 param;  // 1=SIZE, 2=ALIGNMENT, 3=BASE (returns error), 4=HEAP (always 0x40000000), 5=KIND, 6=COMPR (unused)&lt;br /&gt;
    __out u32 result;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVMAP_IOC_GET_ID ===&lt;br /&gt;
Returns an id for a nvmap object. Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __out u32 id; //~0 indicates error&lt;br /&gt;
    __in  u32 handle;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
== /dev/nvdisp-ctrl ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value || Direction || Size || Description || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x80040212 || Out || 4 || TEGRA_DC_EXT_CONTROL_GET_NUM_OUTPUTS ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0140213 || Inout || 20 || TEGRA_DC_EXT_CONTROL_GET_OUTPUT_PROPERTIES ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC1100214 || Inout || 272 || TEGRA_DC_EXT_CONTROL_GET_OUTPUT_EDID ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0040216 || Inout || 4 || TEGRA_DC_EXT_CONTROL_SET_EVENT0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0040217 || Inout || 4 || TEGRA_DC_EXT_CONTROL_SET_EVENT1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0100218 || Inout || 16 || TEGRA_DC_EXT_CONTROL_SET_EVENT2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0100219 || Inout || 16 || TEGRA_DC_EXT_CONTROL_SET_EVENT3 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0040220 || Inout || 4 || TEGRA_DC_EXT_CONTROL_SET_EVENT4 ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== /dev/nvdisp-disp0, /dev/nvdisp-disp1 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value || Direction || Size || Description || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x40040201 || In || 4 || TEGRA_DC_EXT_GET_WINDOW ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40040202 || In || 4 || TEGRA_DC_EXT_PUT_WINDOW ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC4C80203 || In || 1224 || TEGRA_DC_EXT_FLIP ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80380204 || Out || 56 || TEGRA_DC_EXT_GET_MODE ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40380205 || Out || 56 || TEGRA_DC_EXT_SET_MODE ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x430C0206 || In || 780 || TEGRA_DC_EXT_SET_LUT ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40010207 || In || 1 || TEGRA_DC_EXT_ENABLE_DISABLE_CRC ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80040208 || Out || 4 || TEGRA_DC_EXT_GET_CRC ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80040209 || Out || 4 || TEGRA_DC_EXT_GET_HEAD_STATUS ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC038020A || Inout || 56 || TEGRA_DC_EXT_VALIDATE_MODE ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4018020B || In || 24 || TEGRA_DC_EXT_SET_CSC ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC004020C || Inout || 4 || TEGRA_DC_EXT_GET_VBLANK_SYNCPT ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x8040020D || Out || 64 || TEGRA_DC_EXT_GET_UNDERFLOWS ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC99A020E || Inout || 2458 || TEGRA_DC_EXT_SET_CMU ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC004020F || Inout || 4 || TEGRA_DC_EXT_DPMS ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80600210 || Out || 96 || TEGRA_DC_EXT_GET_AVI_INFOFRAME ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40600211 || In || 96 || TEGRA_DC_EXT_SET_AVI_INFOFRAME ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xEBFC0215 || Inout || 11260 || TEGRA_DC_EXT_GET_MODE_DB ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC003021A || Inout || 3 || TEGRA_DC_EXT_PANEL_GET_VENDOR_ID ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x803C021B || Out || 60 || TEGRA_DC_EXT_GET_MODE2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x403C021C || In || 60 || TEGRA_DC_EXT_SET_MODE2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC03C021D || Inout || 60  || TEGRA_DC_EXT_VALIDATE_MODE2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xEF20021E || Inout || 12064 || TEGRA_DC_EXT_GET_MODE_DB2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC004021F || Inout || 4 || TEGRA_DC_EXT_GET_WINMASK ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== /dev/nvcec-ctrl ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value || Direction || Size || Description || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x40010300 || In || 1 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40010301 || In || 1 || NVCEC_CTRL_ENABLE ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x804C0302 || Out || 76 || NVCEC_CTRL_GET_PADDR ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40040303 || In || 4 || NVCEC_CTRL_SET_LADDR ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC04C0304 || Inout || 76 || NVCEC_CTRL_WRITE ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC04C0305 || Inout || 76 || NVCEC_CTRL_READ ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x804C0306 || Out || 76 || NVCEC_CTRL_GET_CONNECTION_STATUS ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x804C0307 || Out || 76 || NVCEC_CTRL_GET_WRITE_STATUS ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== /dev/nvhdcp_up-ctrl ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value || Direction || Size || Description || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0xC4880401 || Inout || 1160 || TEGRAIO_NVHDCP_READ_M ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC4880402 || Inout || 1160 || TEGRAIO_NVHDCP_READ_S ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40010403 || In || 1 || TEGRAIO_NVHDCP_ON_OFF ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== /dev/nvdcutil-disp0, /dev/nvdcutil-disp1 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value || Direction || Size || Description || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x40010501 || In || 1 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40010502 || In || 1 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42040503 || In || 1056 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x803C0504 || Out || 60 || NVDCUTIL_DISP_IOCTL_GET_DISPLAY_INFO ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== /dev/nvsched-ctrl ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value || Direction || Size || Description || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000601 || - || 0 ||NVSCHED_CTRL_ENABLE||&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000602 || - || 0 ||NVSCHED_CTRL_DISABLE||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40180603 || In || 1056 ||NVSCHED_CTRL_ADD_APPLICATION||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40180604 || In || 60 ||NVSCHED_CTRL_UPDATE_APPLICATION||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40080605 || In || 60 ||NVSCHED_CTRL_REMOVE_APPLICATION||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80080606 || Out || 60 ||NVSCHED_CTRL_GET_ID||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80080607 || Out || 60 ||NVSCHED_CTRL_ADD_RUNLIST||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40180608 || In || 24 ||NVSCHED_CTRL_UPDATE_RUNLIST||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40100609 || In || 16 ||NVSCHED_CTRL_LINK_RUNLIST||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4010060A || In || 16 ||NVSCHED_CTRL_UNLINK_RUNLIST||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4008060B || In || 8 ||NVSCHED_CTRL_REMOVE_RUNLIST||&lt;br /&gt;
|-&lt;br /&gt;
| 0x8001060C || Out || 1 ||NVSCHED_CTRL_HAS_OVERRUN_EVENT||&lt;br /&gt;
|-&lt;br /&gt;
| 0x8010060D || Out || 16 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x400C060E || In || 12 ||NVSCHED_CTRL_PUT_CONDUCTOR_FLIP_FENCE||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4008060F || In || 8 ||NVSCHED_CTRL_DETACH_APPLICATION||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40100610 || In || 16 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40100611 || In || 16 || ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== /dev/nverpt-ctrl ==&lt;br /&gt;
Added in firmware version 3.0.0.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value || Direction || Size || Description || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0xC1280701 || Inout || 296 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xCF580702 || Inout || 3928 || ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== /dev/nvhost-as-gpu ==&lt;br /&gt;
Each fd opened to this device creates an address space. An address space is then later bound with a channel.&lt;br /&gt;
&lt;br /&gt;
Once a nvgpu channel has been bound to an address space it cannot be unbound. There is no support for allowing an nvgpu channel to change from one address space to another (or from one to none).&lt;br /&gt;
                                                                                                                              &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value || Direction || Size || Description || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x40044101 || In || 4 || [[#NVGPU_AS_IOCTL_BIND_CHANNEL]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0184102 || Inout || 24 || [[#NVGPU_AS_IOCTL_ALLOC_SPACE]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0104103 || Inout || 16 || [[#NVGPU_AS_IOCTL_FREE_SPACE]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0184104 || Inout || 24 || [[#NVGPU_AS_IOCTL_MAP_BUFFER]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0084105 || Inout || 8 || [[#NVGPU_AS_IOCTL_UNMAP_BUFFER]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0284106 || Inout || 40 || [[#NVGPU_AS_IOCTL_MAP_BUFFER_EX]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40104107 || In || 16 || [[#NVGPU_AS_IOCTL_INITIALIZE]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0404108 || Inout || 64 || [[#NVGPU_AS_IOCTL_GET_VA_REGIONS]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40284109 || In || 40 || [[#NVGPU_AS_IOCTL_INITIALIZE_EX]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0??4114 || Inout || Variable || [[#NVGPU_AS_IOCTL_REMAP]] ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_AS_IOCTL_BIND_CHANNEL ===&lt;br /&gt;
Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u32 fd;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_AS_IOCTL_ALLOC_SPACE ===&lt;br /&gt;
This one reserves pages in the device address space.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u32 pages;&lt;br /&gt;
    __in u32 page_size;&lt;br /&gt;
    __in u32 flags;&lt;br /&gt;
    u32      pad;&lt;br /&gt;
    union {&lt;br /&gt;
      __out u64 offset;&lt;br /&gt;
      __in  u64 align;&lt;br /&gt;
    };&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_AS_IOCTL_FREE_SPACE ===&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u64 offset;&lt;br /&gt;
    __in u32 pages;&lt;br /&gt;
    __in u32 page_size;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_AS_IOCTL_MAP_BUFFER ===&lt;br /&gt;
Map a memory region in the device address space. Identical to Linux driver pretty much.&lt;br /&gt;
&lt;br /&gt;
On success, the mapped memory region is locked by having [[SVC#MemoryState]] bit34 set.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in    u32 flags;        // bit0: fixed_offset, bit2: cacheable&lt;br /&gt;
    u32         pad;&lt;br /&gt;
    __in    u32 nvmap_handle;&lt;br /&gt;
    __inout u32 page_size;    // 0 means don&#039;t care&lt;br /&gt;
    union {&lt;br /&gt;
      __out u64 offset;&lt;br /&gt;
      __in  u64 align;&lt;br /&gt;
    };&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_AS_IOCTL_MAP_BUFFER_EX ===&lt;br /&gt;
Map a memory region in the device address space. Identical to Linux driver pretty much.&lt;br /&gt;
&lt;br /&gt;
On success, the mapped memory region is locked by having [[SVC#MemoryState]] bit34 set.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in    u32 flags;          // bit0: fixed_offset, bit2: cacheable&lt;br /&gt;
    __in    u32 kind;           // -1 is default&lt;br /&gt;
    __in    u32 nvmap_handle;&lt;br /&gt;
    __inout u32 page_size;      // 0 means don&#039;t care&lt;br /&gt;
    __in    u64 buffer_offset;&lt;br /&gt;
    __in    u64 mapping_size;&lt;br /&gt;
    __inout   u64 offset;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_AS_IOCTL_UNMAP_BUFFER ===&lt;br /&gt;
Unmap a memory region from the device address space.&lt;br /&gt;
&lt;br /&gt;
 struct {&lt;br /&gt;
    __in u64 offset;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_AS_IOCTL_INITIALIZE ===&lt;br /&gt;
Nintendo&#039;s custom implementation of NVGPU_GPU_IOCTL_ALLOC_AS (unavailable).&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u32 big_page_size;   // depends on GPU&#039;s available_big_page_sizes; 0=default&lt;br /&gt;
    __in s32 as_fd;           // ignored; passes 0&lt;br /&gt;
    __in u32 flags;           // ignored; passes 0&lt;br /&gt;
    __in u32 reserved;        // ignored; passes 0&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_AS_IOCTL_GET_VA_REGIONS ===&lt;br /&gt;
Nintendo modified to get rid of pointer in struct.&lt;br /&gt;
&lt;br /&gt;
  struct va_region {&lt;br /&gt;
    u64 offset;&lt;br /&gt;
    u32 page_size;&lt;br /&gt;
    u32 pad;&lt;br /&gt;
    u64 pages;&lt;br /&gt;
  };&lt;br /&gt;
  &lt;br /&gt;
  struct {&lt;br /&gt;
    u64         not_used;   // (contained output user ptr on linux, ignored)&lt;br /&gt;
    __inout u32 bufsize;    // forced to 2*sizeof(struct va_region)&lt;br /&gt;
    u32         pad;&lt;br /&gt;
    __out struct va_region regions[2];&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_AS_IOCTL_INITIALIZE_EX ===&lt;br /&gt;
Nintendo&#039;s custom implementation of NVGPU_GPU_IOCTL_ALLOC_AS (unavailable) with extra params.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u32 big_page_size;   // depends on GPU&#039;s available_big_page_sizes; 0=default&lt;br /&gt;
    __in s32 as_fd;           // ignored; passes 0&lt;br /&gt;
    __in u32 flags;           // passes 0&lt;br /&gt;
    __in u32 reserved;        // ignored; passes 0&lt;br /&gt;
    __in u64 unk0;&lt;br /&gt;
    __in u64 unk1;&lt;br /&gt;
    __in u64 unk2;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_AS_IOCTL_REMAP ===&lt;br /&gt;
Nintendo&#039;s custom implementation of address space remapping.&lt;br /&gt;
&lt;br /&gt;
  struct remap_entry {&lt;br /&gt;
    __in u16 flags;        // 0 or 4&lt;br /&gt;
    __in u16 kind;           &lt;br /&gt;
    __in u32 nvmap_handle;&lt;br /&gt;
    __in u32 padding;&lt;br /&gt;
    __in u32 offset;       // (alloc_space_offset &amp;gt;&amp;gt; 0x10)&lt;br /&gt;
    __in u32 pages;        // alloc_space_pages&lt;br /&gt;
  };&lt;br /&gt;
 &lt;br /&gt;
 struct {&lt;br /&gt;
    __in struct remap_entry entries[];&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
== /dev/nvhost-dbg-gpu ==&lt;br /&gt;
Returns [[#Errors|NotSupported]] on Open unless nn::settings::detail::GetDebugModeFlag is set.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value || Direction || Size || Description || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x40084401 || In || 8 || NVGPU_DBG_GPU_IOCTL_BIND_CHANNEL ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0??4402 || Inout || Variable || NVGPU_DBG_GPU_IOCTL_REG_OPS ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40084403 || In || 8 || NVGPU_DBG_GPU_IOCTL_EVENTS_CTRL ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40044404 || In || 4 || NVGPU_DBG_GPU_IOCTL_POWERGATE ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40044405 || In || 4 || NVGPU_DBG_GPU_IOCTL_SMPC_CTXSW_MODE ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0184407 || Inout || 24 || NVGPU_DBG_GPU_IOCTL_PERFBUF_MAP ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40084408 || In || 8 || NVGPU_DBG_GPU_IOCTL_PERFBUF_UNMAP ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40084409 || In || 8 || NVGPU_DBG_GPU_IOCTL_PC_SAMPLING ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4008440A || In || 8 || NVGPU_DBG_GPU_IOCTL_TIMEOUT ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x8008440B || Out || 8 || NVGPU_DBG_GPU_IOCTL_GET_TIMEOUT ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x8004440C || Out || 4 || NVGPU_DBG_GPU_IOCTL_GET_GR_CONTEXT_SIZE ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000440D || None || 0 || NVGPU_DBG_GPU_IOCTL_GET_GR_CONTEXT (uses Ioctl3) ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== /dev/nvhost-prof-gpu ==&lt;br /&gt;
Returns [[#Errors|NotSupported]] on Open unless nn::settings::detail::GetDebugModeFlag is set.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value || Direction || Size || Description || Notes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== /dev/nvhost-ctrl-gpu ==&lt;br /&gt;
This device is for global (context independent) operations on the gpu.  &lt;br /&gt;
                                                                                                                                               &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value || Direction || Size || Description || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x80044701 || Out || 4 || [[#NVGPU_GPU_IOCTL_ZCULL_GET_CTX_SIZE]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80284702 || Out || 40 || [[#NVGPU_GPU_IOCTL_ZCULL_GET_INFO]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x402C4703 || In || 44 || [[#NVGPU_GPU_IOCTL_ZBC_SET_TABLE]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0344704 || Inout || 52 || [[#NVGPU_GPU_IOCTL_ZBC_QUERY_TABLE]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0B04705 || Inout || 176 || [[#NVGPU_GPU_IOCTL_GET_CHARACTERISTICS]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0184706 || Inout || 24 || NVGPU_GPU_IOCTL_GET_TPC_MASKS ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40084707 || In || 8 || [[#NVGPU_GPU_IOCTL_FLUSH_L2]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4008470E || In || 8 || NVGPU_GPU_IOCTL_SET_MMUDEBUG_MODE ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4010470F || In || 16 || NVGPU_GPU_IOCTL_SET_SM_DEBUG_MODE ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0084710 || Inout || 8 || NVGPU_GPU_IOCTL_WAIT_FOR_PAUSE ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80084711 || Out || 8 || NVGPU_GPU_IOCTL_GET_TPC_EXCEPTION_EN_STATUS ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80084712 || Out || 8 || NVGPU_GPU_IOCTL_NUM_VSMS ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0044713 || Inout || 4 || NVGPU_GPU_IOCTL_VSMS_MAPPING ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80084714 || Out || 8 || [[#NVGPU_GPU_IOCTL_ZBC_GET_ACTIVE_SLOT_MASK]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80044715 || Out || 4 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x8018471A || Out || 24 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC008471B || Inout || 8 || NVGPU_GPU_IOCTL_GET_ERROR_CHANNEL_USER_DATA ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC010471C || Inout || 16 || NVGPU_GPU_IOCTL_GET_GPU_TIME ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC108471D || Inout || 264 || NVGPU_GPU_IOCTL_GET_CPU_TIME_CORRELATION_INFO ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_GPU_IOCTL_ZCULL_GET_CTX_SIZE ===&lt;br /&gt;
Returns the GPU&#039;s ZCULL context size. Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
 struct {&lt;br /&gt;
    __out u32 size;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_GPU_IOCTL_ZCULL_GET_INFO ===&lt;br /&gt;
Returns GPU&#039;s ZCULL information. Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
 struct {&lt;br /&gt;
    __out u32 width_align_pixels;&lt;br /&gt;
    __out u32 height_align_pixels;&lt;br /&gt;
    __out u32 pixel_squares_by_aliquots;&lt;br /&gt;
    __out u32 aliquot_total;&lt;br /&gt;
    __out u32 region_byte_multiplier;&lt;br /&gt;
    __out u32 region_header_size;&lt;br /&gt;
    __out u32 subregion_header_size;&lt;br /&gt;
    __out u32 subregion_width_align_pixels;&lt;br /&gt;
    __out u32 subregion_height_align_pixels;&lt;br /&gt;
    __out u32 subregion_count;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_GPU_IOCTL_ZBC_SET_TABLE ===&lt;br /&gt;
Sets the active ZBC table. Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
 struct {&lt;br /&gt;
    __in u32 color_ds[4];&lt;br /&gt;
    __in u32 color_l2[4];&lt;br /&gt;
    __in u32 depth;&lt;br /&gt;
    __in u32 format;&lt;br /&gt;
    __in u32 type;         // 1=color, 2=depth&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_GPU_IOCTL_ZBC_QUERY_TABLE ===&lt;br /&gt;
Queries the active ZBC table. Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
 struct {&lt;br /&gt;
    __out u32 color_ds[4];&lt;br /&gt;
    __out u32 color_l2[4];&lt;br /&gt;
    __out u32 depth;&lt;br /&gt;
    __out u32 ref_cnt;&lt;br /&gt;
    __out u32 format;&lt;br /&gt;
    __out u32 type;&lt;br /&gt;
    __inout u32 index_size;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_GPU_IOCTL_GET_CHARACTERISTICS ===&lt;br /&gt;
Returns the GPU characteristics. Modified to return inline data instead of using a pointer.&lt;br /&gt;
&lt;br /&gt;
  struct gpu_characteristics {&lt;br /&gt;
    u32 arch;                           // 0x120 (NVGPU_GPU_ARCH_GM200)&lt;br /&gt;
    u32 impl;                           // 0xB (NVGPU_GPU_IMPL_GM20B)&lt;br /&gt;
    u32 rev;                            // 0xA1 (Revision A1)&lt;br /&gt;
    u32 num_gpc;                        // 0x1&lt;br /&gt;
    u64 l2_cache_size;                  // 0x40000&lt;br /&gt;
    u64 on_board_video_memory_size;     // 0x0 (not used)&lt;br /&gt;
    u32 num_tpc_per_gpc;                // 0x2&lt;br /&gt;
    u32 bus_type;                       // 0x20 (NVGPU_GPU_BUS_TYPE_AXI)&lt;br /&gt;
    u32 big_page_size;                  // 0x20000&lt;br /&gt;
    u32 compression_page_size;          // 0x20000&lt;br /&gt;
    u32 pde_coverage_bit_count;         // 0x1B&lt;br /&gt;
    u32 available_big_page_sizes;       // 0x30000&lt;br /&gt;
    u32 gpc_mask;                       // 0x1&lt;br /&gt;
    u32 sm_arch_sm_version;             // 0x503 (Maxwell Generation 5.0.3?)&lt;br /&gt;
    u32 sm_arch_spa_version;            // 0x503 (Maxwell Generation 5.0.3?)&lt;br /&gt;
    u32 sm_arch_warp_count;             // 0x80&lt;br /&gt;
    u32 gpu_va_bit_count;               // 0x28&lt;br /&gt;
    u32 reserved;                       // NULL&lt;br /&gt;
    u64 flags;                          // 0x55&lt;br /&gt;
    u32 twod_class;                     // 0x902D (FERMI_TWOD_A)&lt;br /&gt;
    u32 threed_class;                   // 0xB197 (MAXWELL_B)&lt;br /&gt;
    u32 compute_class;                  // 0xB1C0 (MAXWELL_COMPUTE_B)&lt;br /&gt;
    u32 gpfifo_class;                   // 0xB06F (MAXWELL_CHANNEL_GPFIFO_A)&lt;br /&gt;
    u32 inline_to_memory_class;         // 0xA140 (KEPLER_INLINE_TO_MEMORY_B)&lt;br /&gt;
    u32 dma_copy_class;                 // 0xB0B5 (MAXWELL_DMA_COPY_A)&lt;br /&gt;
    u32 max_fbps_count;                 // 0x1&lt;br /&gt;
    u32 fbp_en_mask;                    // 0x0 (disabled)&lt;br /&gt;
    u32 max_ltc_per_fbp;                // 0x2&lt;br /&gt;
    u32 max_lts_per_ltc;                // 0x1&lt;br /&gt;
    u32 max_tex_per_tpc;                // 0x0 (not supported)&lt;br /&gt;
    u32 max_gpc_count;                  // 0x1&lt;br /&gt;
    u32 rop_l2_en_mask_0;               // 0x21D70 (fuse_status_opt_rop_l2_fbp_r)&lt;br /&gt;
    u32 rop_l2_en_mask_1;               // 0x0&lt;br /&gt;
    u64 chipname;                       // 0x6230326D67 (&amp;quot;gm20b&amp;quot;)&lt;br /&gt;
    u64 gr_compbit_store_base_hw;       // 0x0 (not supported)&lt;br /&gt;
  };&lt;br /&gt;
 &lt;br /&gt;
  struct {&lt;br /&gt;
    __inout u64 gpu_characteristics_buf_size;   // must not be NULL, but gets overwritten with 0xA0=max_size&lt;br /&gt;
    __in    u64 gpu_characteristics_buf_addr;   // ignored, but must not be NULL&lt;br /&gt;
    __out struct gpu_characteristics gc;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_GPU_IOCTL_FLUSH_L2 ===&lt;br /&gt;
Flushes the GPU L2 cache.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u32 flush;          // l2_flush | l2_invalidate &amp;lt;&amp;lt; 1 | fb_flush &amp;lt;&amp;lt; 2&lt;br /&gt;
    u32      reserved;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_GPU_IOCTL_ZBC_GET_ACTIVE_SLOT_MASK ===&lt;br /&gt;
Returns the mask value for a ZBC slot.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __out u32 slot;       // always 0x07&lt;br /&gt;
    __out u32 mask;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
== Channels ==&lt;br /&gt;
Channels are a concept for  NVIDIA hardware blocks that share a common interface.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Path || Name&lt;br /&gt;
|-&lt;br /&gt;
| /dev/nvhost-gpu ||&lt;br /&gt;
|-&lt;br /&gt;
| /dev/nvhost-vic || Video Image Compositor&lt;br /&gt;
|-&lt;br /&gt;
| /dev/nvhost-nvdec || Video Decoder&lt;br /&gt;
|-&lt;br /&gt;
| /dev/nvhost-nvjpg || JPEG Decoder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Channel Ioctls ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Value || Size || Description || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0??0001 || Variable || NVHOST_IOCTL_CHANNEL_SUBMIT ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0080002 || 8 || NVHOST_IOCTL_CHANNEL_GET_SYNCPOINT ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0080003 || 8 || NVHOST_IOCTL_CHANNEL_GET_WAITBASE ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0080004 || 8 || NVHOST_IOCTL_CHANNEL_SET_TIMEOUT_EX ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40040007 || 4 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40080008 || 8 || NVHOST_IOCTL_CHANNEL_SET_CLK_RATE ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0??0009 || Variable || NVHOST_IOCTL_CHANNEL_MAP_BUFFER ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0??000A || Variable || NVHOST_IOCTL_CHANNEL_UNMAP_BUFFER ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000013 || 0 || ||&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x40044801 || 4 || [[#NVGPU_IOCTL_CHANNEL_SET_NVMAP_FD]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40044803 || 4 || NVGPU_IOCTL_CHANNEL_SET_TIMEOUT ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40084805 || 8 || [[#NVGPU_IOCTL_CHANNEL_ALLOC_GPFIFO]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0044807 || 4 || NVGPU_IOCTL_CHANNEL_CYCLE_STATS ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0??4808 || Variable || [[#NVGPU_IOCTL_CHANNEL_SUBMIT_GPFIFO]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0104809 || 16 || [[#NVGPU_IOCTL_CHANNEL_ALLOC_OBJ_CTX]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC010480B || 16 || [[#NVGPU_IOCTL_CHANNEL_ZCULL_BIND]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC018480C || 24 || [[#NVGPU_IOCTL_CHANNEL_SET_ERROR_NOTIFIER]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4004480D || 4 || [[#NVGPU_IOCTL_CHANNEL_SET_PRIORITY]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000480E || 0 || [[#NVGPU_IOCTL_CHANNEL_ENABLE]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000480F || 0 || [[#NVGPU_IOCTL_CHANNEL_DISABLE]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x00004810 || 0 || [[#NVGPU_IOCTL_CHANNEL_PREEMPT]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x00004811 || 0 || [[#NVGPU_IOCTL_CHANNEL_FORCE_RESET]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40084812 || 8 || [[#NVGPU_IOCTL_CHANNEL_EVENT_ID_CONTROL]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0104813 || 16 || NVGPU_IOCTL_CHANNEL_CYCLE_STATS_SNAPSHOT ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80804816 || 128 || NVGPU_IOCTL_CHANNEL_GET_ERROR_INFO ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0104817 || 16 || [[#NVGPU_IOCTL_CHANNEL_GET_ERROR_NOTIFICATION]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40204818 || 32 || [[#NVGPU_IOCTL_CHANNEL_ALLOC_GPFIFO_EX]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0??4819 || Variable || [[#NVGPU_IOCTL_CHANNEL_SUBMIT_GPFIFO_RETRY]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC020481A || 32 || [[#NVGPU_IOCTL_CHANNEL_ALLOC_GPFIFO_EX2]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC018481B || 24 || (uses Ioctl2) ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC018481C || 24 || (uses Ioctl2) ||&lt;br /&gt;
|-&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x40084714 || 8 || NVGPU_IOCTL_CHANNEL_SET_USER_DATA || Sets an unknown user context address&lt;br /&gt;
|-&lt;br /&gt;
| 0x80084715 || 8 || NVGPU_IOCTL_CHANNEL_GET_USER_DATA || Gets an unknown user context address&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_IOCTL_CHANNEL_SET_NVMAP_FD ===&lt;br /&gt;
Binds a nvmap object to this channel. Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u32 nvmap_fd;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_IOCTL_CHANNEL_ALLOC_GPFIFO ===&lt;br /&gt;
Allocates gpfifo entries. Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u32 num_entries;&lt;br /&gt;
    __in u32 flags;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_IOCTL_CHANNEL_SUBMIT_GPFIFO ===&lt;br /&gt;
Submits a gpfifo object. Modified to take inline entry objects instead of a pointer.&lt;br /&gt;
&lt;br /&gt;
  struct fence {&lt;br /&gt;
    u32 id;&lt;br /&gt;
    u32 value;&lt;br /&gt;
  };&lt;br /&gt;
  &lt;br /&gt;
  struct gpfifo_entry {&lt;br /&gt;
    u32 entry0;                           // gpu_va_lo&lt;br /&gt;
    u32 entry1;                           // gpu_va_hi | (unk_0x02 &amp;lt;&amp;lt; 0x08) | (size &amp;lt;&amp;lt; 0x0A) | (unk_0x01 &amp;lt;&amp;lt; 0x1F)&lt;br /&gt;
  };&lt;br /&gt;
  &lt;br /&gt;
  struct {&lt;br /&gt;
    __in u64 gpfifo;                      // (ignored) pointer to gpfifo fence structs&lt;br /&gt;
    __in u32 num_entries;                 // number of fence objects being submitted&lt;br /&gt;
    __in u32 flags;&lt;br /&gt;
    __out struct fence fence_out;         // returned new fence object for others to wait on&lt;br /&gt;
    __in  struct gpfifo_entry entries[];  // depends on num_entries&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_IOCTL_CHANNEL_ALLOC_OBJ_CTX ===&lt;br /&gt;
Allocates a graphics context object. Modified to ignore object&#039;s ID.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in  u32 class_num;    // 0x902D=2d, 0xB197=3d, 0xB1C0=compute, 0xA140=kepler, 0xB0B5=DMA, 0xB06F=channel_gpfifo&lt;br /&gt;
    __in  u32 flags;&lt;br /&gt;
    __out u64 obj_id;       // (ignored) used for FREE_OBJ_CTX ioctl, which is not supported&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_IOCTL_CHANNEL_ZCULL_BIND ===&lt;br /&gt;
Binds a ZCULL context to the channel. Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
 struct {&lt;br /&gt;
    __in u64 gpu_va;&lt;br /&gt;
    __in u32 mode;         // 0=global, 1=no_ctxsw, 2=separate_buffer, 3=part_of_regular_buf&lt;br /&gt;
    __in u32 padding;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_IOCTL_CHANNEL_SET_ERROR_NOTIFIER ===&lt;br /&gt;
Initializes the error notifier for this channel. Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u64 offset;&lt;br /&gt;
    __in u64 size;&lt;br /&gt;
    __in u32 mem;       // nvmap object handle&lt;br /&gt;
    __in u32 padding;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_IOCTL_CHANNEL_SET_PRIORITY ===&lt;br /&gt;
Change channel&#039;s priority. Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u32 priority;    // 0x32 is low, 0x64 is medium and 0x96 is high&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_IOCTL_CHANNEL_ENABLE ===&lt;br /&gt;
Enables the current channel. Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_IOCTL_CHANNEL_DISABLE ===&lt;br /&gt;
Disables the current channel. Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_IOCTL_CHANNEL_PREEMPT ===&lt;br /&gt;
Clears the FIFO pipe for this channel. Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_IOCTL_CHANNEL_FORCE_RESET ===&lt;br /&gt;
Forces the channel to reset. Identical to Linux driver.&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_IOCTL_CHANNEL_EVENT_ID_CONTROL ===&lt;br /&gt;
Controls event notifications.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u32 cmd;    // 0=disable, 1=enable, 2=clear&lt;br /&gt;
    __in u32 id;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_IOCTL_CHANNEL_GET_ERROR_NOTIFICATION ===&lt;br /&gt;
Returns the current error notification caught by the error notifier. Exclusive to the Switch.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __out   u64 timestamp;    // nanoseconds since Jan. 1, 1970&lt;br /&gt;
    __out   u32 info32;       // error code&lt;br /&gt;
    __out   u16 info16;       // additional error info&lt;br /&gt;
    __inout u16 status;       // always 0xFFFF&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_IOCTL_CHANNEL_SUBMIT_GPFIFO_RETRY ===&lt;br /&gt;
Allocates gpfifo entries with additional parameters. Exclusive to the Switch.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    __in u32 num_entries;&lt;br /&gt;
    __in u32 flags;&lt;br /&gt;
    __in u32 unk0;            // 1 works&lt;br /&gt;
    __in u32 unk1;&lt;br /&gt;
    __in u32 unk2;&lt;br /&gt;
    __in u32 unk3;&lt;br /&gt;
    __in u32 unk4;&lt;br /&gt;
    __in u32 unk5;&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_IOCTL_CHANNEL_SUBMIT_GPFIFO_EX ===&lt;br /&gt;
Submits a gpfifo object (async version). Exclusive to the Switch.&lt;br /&gt;
&lt;br /&gt;
  struct {&lt;br /&gt;
    u64 __gpfifo;                     // in (pointer to gpfifo fence structs; ignored)&lt;br /&gt;
    u32 __num_entries;                // in (number of fence objects being submitted)&lt;br /&gt;
    u32 __flags;                      // in&lt;br /&gt;
    struct fence        __fence_out;  // out (returned new fence object for others to wait on)&lt;br /&gt;
    struct gpfifo_entry __entries[];  // in (depends on __num_entries)&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
=== NVGPU_IOCTL_CHANNEL_ALLOC_GPFIFO_EX2 ===&lt;br /&gt;
Allocates gpfifo entries with additional parameters and returns a fence. Exclusive to the Switch.&lt;br /&gt;
 &lt;br /&gt;
  struct {&lt;br /&gt;
    u32 __num_entries;         // in&lt;br /&gt;
    u32 __flags;               // in&lt;br /&gt;
    u32 __unk0;                // in (1 works)&lt;br /&gt;
    struct fence __fence_out;  // out&lt;br /&gt;
    u32 __unk1;                // in&lt;br /&gt;
    u32 __unk2;                // in&lt;br /&gt;
    u32 __unk3;                // in&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
= nvmemp =&lt;br /&gt;
NVIDIA memory profiler (this service is not available on retail units). &lt;br /&gt;
/dev/nvhost-ctrl sends the ioctl NVHOST_IOCTL_CTRL_GET_CONFIG to check the config &amp;quot;nv!NV_MEMORY_PROFILER&amp;quot;. If config_str returns &amp;quot;1&amp;quot;, the applications attempts to talk to use nvmemp.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Cmd0&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Cmd1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= nvdrvdbg =&lt;br /&gt;
This is &amp;quot;nns::nvdrv::INvDrvDebugFSServices&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenLog]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#CloseLog]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ReadLog]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenLog ==&lt;br /&gt;
Takes process handle. Returns an fd.&lt;br /&gt;
&lt;br /&gt;
== CloseLog ==&lt;br /&gt;
Takes fd and closes it.&lt;br /&gt;
&lt;br /&gt;
== ReadLog ==&lt;br /&gt;
Takes fd and reads log into a type-6 buffer.&lt;br /&gt;
&lt;br /&gt;
= Errors =&lt;br /&gt;
Most nvidia driver commands return an error code apart from the normal return code.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Success&lt;br /&gt;
|-&lt;br /&gt;
| 1 || NotImplemented&lt;br /&gt;
|-&lt;br /&gt;
| 2 || NotSupported&lt;br /&gt;
|-&lt;br /&gt;
| 3 || NotInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 4 || BadParameter&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| 6 || InsufficientMemory&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ReadOnlyAttribute&lt;br /&gt;
|-&lt;br /&gt;
| 8 || InvalidState&lt;br /&gt;
|-&lt;br /&gt;
| 9 || InvalidAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || InvalidSize&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || BadValue&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || AlreadyAllocated&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || Busy&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || ResourceError&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || CountMismatch&lt;br /&gt;
|-&lt;br /&gt;
| 0x1000 || SharedMemoryTooSmall&lt;br /&gt;
|-&lt;br /&gt;
| 0x30003 || FileOperationFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0x30004 || DirOperationFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0x3000F || IoctlFailed                        &lt;br /&gt;
|-&lt;br /&gt;
| 0x30010 || AccessDenied&lt;br /&gt;
|-&lt;br /&gt;
| 0x30013 || FileNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0xA000E || ModuleNotPresent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Panic =&lt;br /&gt;
In some cases, a panic may occur. NV forces a crash by doing:&lt;br /&gt;
 (void *)0 = 0xCAFE;&lt;br /&gt;
End result is that the system hangs with a white-screen.&lt;br /&gt;
&lt;br /&gt;
== Gpfifo Panic ==&lt;br /&gt;
When the gpfifo data in the gpu_va buffers specified by the submitted gpfifo entries is invalid(?), eventually the user-process will be force-terminated after using the submit-gpfifo ioctl. It&#039;s unknown how exactly this is done.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Gabe k</name></author>
	</entry>
</feed>