<?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=Shinyquagsire23</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=Shinyquagsire23"/>
	<link rel="alternate" type="text/html" href="https://switchbrew.org/wiki/Special:Contributions/Shinyquagsire23"/>
	<updated>2026-05-12T13:07:12Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=HID_services&amp;diff=11682</id>
		<title>HID services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=HID_services&amp;diff=11682"/>
		<updated>2022-05-05T21:40:34Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: Filling in some blanks on device types&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= hid =&lt;br /&gt;
This is &amp;quot;nn::hid::IHidServer&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 || [[#CreateAppletResource]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#ActivateDebugPad]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#ActivateTouchScreen]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#ActivateMouse]]&lt;br /&gt;
|-&lt;br /&gt;
| 31 || [[#ActivateKeyboard]]&lt;br /&gt;
|-&lt;br /&gt;
| 32 || [6.0.0+] [[#SendKeyboardLockKeyEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 40 || [[#AcquireXpadIdEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 41 || [[#ReleaseXpadIdEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 51 || [[#ActivateXpad]]&lt;br /&gt;
|-&lt;br /&gt;
| 55 || [[#GetXpadIds]]&lt;br /&gt;
|-&lt;br /&gt;
| 56 || [[#ActivateJoyXpad]]&lt;br /&gt;
|-&lt;br /&gt;
| 58 || [[#GetJoyXpadLifoHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 59 || [[#GetJoyXpadIds]]&lt;br /&gt;
|-&lt;br /&gt;
| 60 || [[#ActivateSixAxisSensor]]&lt;br /&gt;
|-&lt;br /&gt;
| 61 || [[#DeactivateSixAxisSensor]]&lt;br /&gt;
|-&lt;br /&gt;
| 62 || [[#GetSixAxisSensorLifoHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 63 || [[#ActivateJoySixAxisSensor]]&lt;br /&gt;
|-&lt;br /&gt;
| 64 || [[#DeactivateJoySixAxisSensor]]&lt;br /&gt;
|-&lt;br /&gt;
| 65 || [[#GetJoySixAxisSensorLifoHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 66 || [[#StartSixAxisSensor]]&lt;br /&gt;
|-&lt;br /&gt;
| 67 || [[#StopSixAxisSensor]]&lt;br /&gt;
|-&lt;br /&gt;
| 68 || [[#IsSixAxisSensorFusionEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 69 || [[#EnableSixAxisSensorFusion]]&lt;br /&gt;
|-&lt;br /&gt;
| 70 || [[#SetSixAxisSensorFusionParameters]]&lt;br /&gt;
|-&lt;br /&gt;
| 71 || [[#GetSixAxisSensorFusionParameters]]&lt;br /&gt;
|-&lt;br /&gt;
| 72 || [[#ResetSixAxisSensorFusionParameters]]&lt;br /&gt;
|-&lt;br /&gt;
| 73 || [[#SetAccelerometerParameters]]&lt;br /&gt;
|-&lt;br /&gt;
| 74 || [[#GetAccelerometerParameters]]&lt;br /&gt;
|-&lt;br /&gt;
| 75 || [[#ResetAccelerometerParameters]]&lt;br /&gt;
|-&lt;br /&gt;
| 76 || [[#SetAccelerometerPlayMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 77 || [[#GetAccelerometerPlayMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 78 || [[#ResetAccelerometerPlayMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 79 || [[#SetGyroscopeZeroDriftMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 80 || [[#GetGyroscopeZeroDriftMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 81 || [[#ResetGyroscopeZeroDriftMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 82 || [[#IsSixAxisSensorAtRest]]&lt;br /&gt;
|-&lt;br /&gt;
| 83 || [6.0.0+] [[#IsFirmwareUpdateAvailableForSixAxisSensor]]&lt;br /&gt;
|-&lt;br /&gt;
| 84 || [13.0.0+] EnableSixAxisSensorUnalteredPassthrough&lt;br /&gt;
|-&lt;br /&gt;
| 85 || [13.0.0+] IsSixAxisSensorUnalteredPassthroughEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 86 || [13.0.0+] StoreSixAxisSensorCalibrationParameter&lt;br /&gt;
|-&lt;br /&gt;
| 87 || [13.0.0+] LoadSixAxisSensorCalibrationParameter&lt;br /&gt;
|-&lt;br /&gt;
| 88 || [13.0.0+] GetSixAxisSensorIcInformation&lt;br /&gt;
|-&lt;br /&gt;
| 89 || [13.0.0+] ResetIsSixAxisSensorDeviceNewlyAssigned&lt;br /&gt;
|-&lt;br /&gt;
| 91 || [[#ActivateGesture]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#SetSupportedNpadStyleSet]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetSupportedNpadStyleSet]]&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [[#SetSupportedNpadIdType]]&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [[#ActivateNpad]]&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [[#DeactivateNpad]]&lt;br /&gt;
|-&lt;br /&gt;
| 106 || [[#AcquireNpadStyleSetUpdateEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 107 || [[#DisconnectNpad]]&lt;br /&gt;
|-&lt;br /&gt;
| 108 || [[#GetPlayerLedPattern]]&lt;br /&gt;
|-&lt;br /&gt;
| 109 || [5.0.0+] [[#ActivateNpadWithRevision]]&lt;br /&gt;
|-&lt;br /&gt;
| 120 || [[#SetNpadJoyHoldType]]&lt;br /&gt;
|-&lt;br /&gt;
| 121 || [[#GetNpadJoyHoldType]]&lt;br /&gt;
|-&lt;br /&gt;
| 122 || [[#SetNpadJoyAssignmentModeSingleByDefault]]&lt;br /&gt;
|-&lt;br /&gt;
| 123 || [[#SetNpadJoyAssignmentModeSingle]]&lt;br /&gt;
|-&lt;br /&gt;
| 124 || [[#SetNpadJoyAssignmentModeDual]]&lt;br /&gt;
|-&lt;br /&gt;
| 125 || [[#MergeSingleJoyAsDualJoy]]&lt;br /&gt;
|-&lt;br /&gt;
| 126 || [[#StartLrAssignmentMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 127 || [[#StopLrAssignmentMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 128 || [[#SetNpadHandheldActivationMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 129 || [[#GetNpadHandheldActivationMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 130 || [[#SwapNpadAssignment]]&lt;br /&gt;
|-&lt;br /&gt;
| 131 || [[#IsUnintendedHomeButtonInputProtectionEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 132 || [[#EnableUnintendedHomeButtonInputProtection]]&lt;br /&gt;
|-&lt;br /&gt;
| 133 || [5.0.0+] [[#SetNpadJoyAssignmentModeSingleWithDestination]]&lt;br /&gt;
|-&lt;br /&gt;
| 134 || [6.1.0+] [[#SetNpadAnalogStickUseCenterClamp]]&lt;br /&gt;
|-&lt;br /&gt;
| 135 || [8.0.0+] [[#SetNpadCaptureButtonAssignment]]&lt;br /&gt;
|-&lt;br /&gt;
| 136 || [8.0.0+] [[#ClearNpadCaptureButtonAssignment]]&lt;br /&gt;
|-&lt;br /&gt;
| 200 || [[#GetVibrationDeviceInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 201 || [[#SendVibrationValue]]&lt;br /&gt;
|-&lt;br /&gt;
| 202 || [[#GetActualVibrationValue]]&lt;br /&gt;
|-&lt;br /&gt;
| 203 || [[#CreateActiveVibrationDeviceList]]&lt;br /&gt;
|-&lt;br /&gt;
| 204 || [[#PermitVibration]]&lt;br /&gt;
|-&lt;br /&gt;
| 205 || [[#IsVibrationPermitted]]&lt;br /&gt;
|-&lt;br /&gt;
| 206 || [[#SendVibrationValues]]&lt;br /&gt;
|-&lt;br /&gt;
| 207 || [4.0.0+] [[#SendVibrationGcErmCommand]]&lt;br /&gt;
|-&lt;br /&gt;
| 208 || [4.0.0+] [[#GetActualVibrationGcErmCommand]]&lt;br /&gt;
|-&lt;br /&gt;
| 209 || [4.0.0+] [[#BeginPermitVibrationSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 210 || [4.0.0+] [[#EndPermitVibrationSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 211 || [7.0.0+] [[#IsVibrationDeviceMounted]]&lt;br /&gt;
|-&lt;br /&gt;
| 212 || [11.0.0+] [[#SendVibrationValueInBool]]&lt;br /&gt;
|-&lt;br /&gt;
| 300 || [3.0.0+] [[#ActivateConsoleSixAxisSensor]]&lt;br /&gt;
|-&lt;br /&gt;
| 301 || [3.0.0+] [[#StartConsoleSixAxisSensor]]&lt;br /&gt;
|-&lt;br /&gt;
| 302 || [3.0.0+] [[#StopConsoleSixAxisSensor]]&lt;br /&gt;
|-&lt;br /&gt;
| 303 || [5.0.0+] [[#ActivateSevenSixAxisSensor]]&lt;br /&gt;
|-&lt;br /&gt;
| 304 || [5.0.0+] [[#StartSevenSixAxisSensor]]&lt;br /&gt;
|-&lt;br /&gt;
| 305 || [5.0.0+] [[#StopSevenSixAxisSensor]]&lt;br /&gt;
|-&lt;br /&gt;
| 306 || [5.0.0+] [[#InitializeSevenSixAxisSensor]]&lt;br /&gt;
|-&lt;br /&gt;
| 307 || [5.0.0+] [[#FinalizeSevenSixAxisSensor]]&lt;br /&gt;
|-&lt;br /&gt;
| 308 || [5.0.0+] [[#SetSevenSixAxisSensorFusionStrength]]&lt;br /&gt;
|-&lt;br /&gt;
| 309 || [5.0.0+] [[#GetSevenSixAxisSensorFusionStrength]]&lt;br /&gt;
|-&lt;br /&gt;
| 310 || [6.0.0+] [[#ResetSevenSixAxisSensorTimestamp]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [3.0.0+] [[#IsUsbFullKeyControllerEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [3.0.0+] [[#EnableUsbFullKeyController]]&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [3.0.0+] [[#IsUsbFullKeyControllerConnected]]&lt;br /&gt;
|-&lt;br /&gt;
| 403 || [4.0.0+] [[#HasBattery]]&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [4.0.0+] [[#HasLeftRightBattery]]&lt;br /&gt;
|-&lt;br /&gt;
| 405 || [4.0.0+] [[#GetNpadInterfaceType]]&lt;br /&gt;
|-&lt;br /&gt;
| 406 || [4.0.0+] [[#GetNpadLeftRightInterfaceType]]&lt;br /&gt;
|-&lt;br /&gt;
| 407 || [10.0.0+] [[#GetNpadOfHighestBatteryLevel]] ([9.0.0+] GetNpadOfHighestBatteryLevelForJoyLeft)&lt;br /&gt;
|-&lt;br /&gt;
| 408 || [9.0.0-9.2.0] GetNpadOfHighestBatteryLevelForJoyRight&lt;br /&gt;
|-&lt;br /&gt;
| 500 || [5.0.0+] [[#GetPalmaConnectionHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 501 || [5.0.0+] [[#InitializePalma]]&lt;br /&gt;
|-&lt;br /&gt;
| 502 || [5.0.0+] [[#AcquirePalmaOperationCompleteEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 503 || [5.0.0+] [[#GetPalmaOperationInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 504 || [5.0.0+] [[#PlayPalmaActivity]]&lt;br /&gt;
|-&lt;br /&gt;
| 505 || [5.0.0+] [[#SetPalmaFrModeType]]&lt;br /&gt;
|-&lt;br /&gt;
| 506 || [5.0.0+] [[#ReadPalmaStep]]&lt;br /&gt;
|-&lt;br /&gt;
| 507 || [5.0.0+] [[#EnablePalmaStep]]&lt;br /&gt;
|-&lt;br /&gt;
| 508 || [5.0.0+] [[#ResetPalmaStep]]&lt;br /&gt;
|-&lt;br /&gt;
| 509 || [5.0.0+] [[#ReadPalmaApplicationSection]]&lt;br /&gt;
|-&lt;br /&gt;
| 510 || [5.0.0+] [[#WritePalmaApplicationSection]]&lt;br /&gt;
|-&lt;br /&gt;
| 511 || [5.0.0+] [[#ReadPalmaUniqueCode]]&lt;br /&gt;
|-&lt;br /&gt;
| 512 || [5.0.0+] [[#SetPalmaUniqueCodeInvalid]]&lt;br /&gt;
|-&lt;br /&gt;
| 513 || [5.0.0+] [[#WritePalmaActivityEntry]]&lt;br /&gt;
|-&lt;br /&gt;
| 514 || [5.0.0+] [[#WritePalmaRgbLedPatternEntry]]&lt;br /&gt;
|-&lt;br /&gt;
| 515 || [5.0.0+] [[#WritePalmaWaveEntry]]&lt;br /&gt;
|-&lt;br /&gt;
| 516 || [5.0.0+] [[#SetPalmaDataBaseIdentificationVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 517 || [5.0.0+] [[#GetPalmaDataBaseIdentificationVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 518 || [5.0.0+] [[#SuspendPalmaFeature]]&lt;br /&gt;
|-&lt;br /&gt;
| 519 || [5.1.0+] [[#GetPalmaOperationResult]]&lt;br /&gt;
|-&lt;br /&gt;
| 520 || [5.1.0+] [[#ReadPalmaPlayLog]]&lt;br /&gt;
|-&lt;br /&gt;
| 521 || [5.1.0+] [[#ResetPalmaPlayLog]]&lt;br /&gt;
|-&lt;br /&gt;
| 522 || [5.1.0+] [[#SetIsPalmaAllConnectable]]&lt;br /&gt;
|-&lt;br /&gt;
| 523 || [5.1.0+] [[#SetIsPalmaPairedConnectable]]&lt;br /&gt;
|-&lt;br /&gt;
| 524 || [5.1.0+] [[#PairPalma]]&lt;br /&gt;
|-&lt;br /&gt;
| 525 || [5.1.0+] [[#SetPalmaBoostMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 526 || [7.0.0+] [[#CancelWritePalmaWaveEntry]]&lt;br /&gt;
|-&lt;br /&gt;
| 527 || [8.0.0+] [[#EnablePalmaBoostMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 528 || [8.0.0+] [[#GetPalmaBluetoothAddress]]&lt;br /&gt;
|-&lt;br /&gt;
| 529 || [8.0.0+] [[#SetDisallowedPalmaConnection]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [[#SetNpadCommunicationMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [[#GetNpadCommunicationMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 1002 || [9.0.0+] [[#SetTouchScreenConfiguration]]&lt;br /&gt;
|-&lt;br /&gt;
| 1003 || [9.0.0+] [[#IsFirmwareUpdateNeededForNotification]]&lt;br /&gt;
|-&lt;br /&gt;
| 2000 || [10.0.0+] [[#ActivateDigitizer]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CreateAppletResource ==&lt;br /&gt;
Takes a PID and an u64 [[AM_services|AppletResourceUserId]]. Returns an [[#IAppletResource]].&lt;br /&gt;
&lt;br /&gt;
== ActivateDebugPad ==&lt;br /&gt;
Takes a PID and an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== ActivateTouchScreen ==&lt;br /&gt;
Takes a PID and an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== ActivateMouse ==&lt;br /&gt;
Takes a PID and an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== ActivateKeyboard ==&lt;br /&gt;
Takes a PID and an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== SendKeyboardLockKeyEvent ==&lt;br /&gt;
Takes a PID, an u32 BitFlagSet [[#KeyboardLockKeyEvent]], and an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
This is identical to the hidsys cmd.&lt;br /&gt;
&lt;br /&gt;
== AcquireXpadIdEventHandle ==&lt;br /&gt;
Takes an input u64, returns an output handle.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] Stubbed, just returns 0.&lt;br /&gt;
&lt;br /&gt;
== ReleaseXpadIdEventHandle ==&lt;br /&gt;
Takes an input u64, no output.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] Stubbed, just returns 0.&lt;br /&gt;
&lt;br /&gt;
== ActivateXpad ==&lt;br /&gt;
Takes a PID, an u32 &amp;quot;nn::hid::BasicXpadId&amp;quot;, an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] Stubbed, just returns 0.&lt;br /&gt;
&lt;br /&gt;
== GetXpadIds ==&lt;br /&gt;
Takes a type-0xA output buffer containing an array of u32 &amp;quot;nn::hid::BasicXpadId&amp;quot;, returns an output s64 total_out (which is exposed by sdknso as a s32).&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] Now returns a hard-coded list of Ids.&lt;br /&gt;
&lt;br /&gt;
== ActivateJoyXpad ==&lt;br /&gt;
Takes an input u32 &amp;quot;nn::hid::JoyXpadId&amp;quot;, no output.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] Stubbed, just returns 0.&lt;br /&gt;
&lt;br /&gt;
== GetJoyXpadLifoHandle ==&lt;br /&gt;
Takes an input u32 &amp;quot;nn::hid::JoyXpadId&amp;quot;, returns an output handle.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] Stubbed, just returns 0.&lt;br /&gt;
&lt;br /&gt;
== GetJoyXpadIds ==&lt;br /&gt;
Takes a type-0xA output buffer containing an array of u32 &amp;quot;nn::hid::BasicXpadId&amp;quot;, returns an output s64.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] Stubbed, just returns 0.&lt;br /&gt;
&lt;br /&gt;
== ActivateSixAxisSensor ==&lt;br /&gt;
Takes an input u32 &amp;quot;nn::hid::JoyXpadId&amp;quot;, no output.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] Stubbed, just returns 0.&lt;br /&gt;
&lt;br /&gt;
== DeactivateSixAxisSensor ==&lt;br /&gt;
Takes an input u32 &amp;quot;nn::hid::JoyXpadId&amp;quot;, no output.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] Stubbed, just returns 0.&lt;br /&gt;
&lt;br /&gt;
== GetSixAxisSensorLifoHandle ==&lt;br /&gt;
Takes an input u32 &amp;quot;nn::hid::JoyXpadId&amp;quot;, returns an output handle.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] Stubbed, just returns 0.&lt;br /&gt;
&lt;br /&gt;
== ActivateJoySixAxisSensor ==&lt;br /&gt;
Takes an input u32 &amp;quot;nn::hid::JoyXpadId&amp;quot;, no output.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] Stubbed, just returns 0.&lt;br /&gt;
&lt;br /&gt;
== DeactivateJoySixAxisSensor ==&lt;br /&gt;
Takes an input u32 &amp;quot;nn::hid::JoyXpadId&amp;quot;, no output.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] Stubbed, just returns 0.&lt;br /&gt;
&lt;br /&gt;
== GetJoySixAxisSensorLifoHandle ==&lt;br /&gt;
Takes an input u32 &amp;quot;nn::hid::JoyXpadId&amp;quot;, returns an output handle.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] Stubbed, just returns 0.&lt;br /&gt;
&lt;br /&gt;
== StartSixAxisSensor ==&lt;br /&gt;
Takes a PID, a [[#SixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== StopSixAxisSensor ==&lt;br /&gt;
Takes a PID, a [[#SixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== IsSixAxisSensorFusionEnabled ==&lt;br /&gt;
Takes a PID, a [[#SixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], returns an output bool.&lt;br /&gt;
&lt;br /&gt;
== EnableSixAxisSensorFusion ==&lt;br /&gt;
Takes a PID, a bool, a [[#SixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetSixAxisSensorFusionParameters ==&lt;br /&gt;
Takes a PID-descriptor, an u32 [[#SixAxisSensorHandle]], two floats, and an u64 [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
Official sw will throw an error before using this cmd, if the first float is outside of the bounds of 0.0f-1.0f.&lt;br /&gt;
&lt;br /&gt;
== GetSixAxisSensorFusionParameters ==&lt;br /&gt;
Takes a PID-descriptor, an u32 [[#SixAxisSensorHandle]], and an u64 [[AM_services|AppletResourceUserId]], returns two output floats.&lt;br /&gt;
&lt;br /&gt;
== ResetSixAxisSensorFusionParameters ==&lt;br /&gt;
Takes a PID-descriptor, an u32 [[#SixAxisSensorHandle]], and an u64 [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetAccelerometerParameters ==&lt;br /&gt;
Takes a PID, a [[#SixAxisSensorHandle]], two floats, and an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
sdknso will throw an error before using this cmd, if either of the floats are less than 0.0f, or when the second float is larger than the first float.&lt;br /&gt;
&lt;br /&gt;
sdknso 10.x removed the nn::hid wrapper for this.&lt;br /&gt;
&lt;br /&gt;
== GetAccelerometerParameters ==&lt;br /&gt;
Takes a PID, a [[#SixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], returns two output floats.&lt;br /&gt;
&lt;br /&gt;
sdknso 10.x removed the nn::hid wrapper for this.&lt;br /&gt;
&lt;br /&gt;
== ResetAccelerometerParameters ==&lt;br /&gt;
Takes a PID, a [[#SixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
sdknso 10.x removed the nn::hid wrapper for this.&lt;br /&gt;
&lt;br /&gt;
== SetAccelerometerPlayMode ==&lt;br /&gt;
Takes a PID, a [[#SixAxisSensorHandle]], an u32 [[#AccelerometerPlayMode]], and an u64 [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
sdknso 10.x removed the nn::hid wrapper for this.&lt;br /&gt;
&lt;br /&gt;
== GetAccelerometerPlayMode ==&lt;br /&gt;
Takes a PID, a [[#SixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], returns an output u32 [[#AccelerometerPlayMode]].&lt;br /&gt;
&lt;br /&gt;
sdknso 10.x removed the nn::hid wrapper for this.&lt;br /&gt;
&lt;br /&gt;
== ResetAccelerometerPlayMode ==&lt;br /&gt;
Takes a PID, a [[#SixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
sdknso 10.x removed the nn::hid wrapper for this.&lt;br /&gt;
&lt;br /&gt;
== SetGyroscopeZeroDriftMode ==&lt;br /&gt;
Takes a PID-descriptor, an u32 [[#SixAxisSensorHandle]], an u32 [[#GyroscopeZeroDriftMode]], and an u64 [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== GetGyroscopeZeroDriftMode ==&lt;br /&gt;
Takes a PID-descriptor, an u32 [[#SixAxisSensorHandle]], and an u64 [[AM_services|AppletResourceUserId]], returns an output u32 [[#GyroscopeZeroDriftMode]].&lt;br /&gt;
&lt;br /&gt;
Gets the value written by [[#SetGyroscopeZeroDriftMode]].&lt;br /&gt;
&lt;br /&gt;
== ResetGyroscopeZeroDriftMode ==&lt;br /&gt;
Takes a PID-descriptor, an u32 [[#SixAxisSensorHandle]], and an u64 [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
Same as [[#SetGyroscopeZeroDriftMode]] except the [[#GyroscopeZeroDriftMode]] is hard-coded to value 1 (Standard).&lt;br /&gt;
&lt;br /&gt;
== IsSixAxisSensorAtRest ==&lt;br /&gt;
Takes a PID, a [[#SixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], returns an output bool.&lt;br /&gt;
&lt;br /&gt;
== IsFirmwareUpdateAvailableForSixAxisSensor ==&lt;br /&gt;
Takes a PID, a [[#SixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], returns an output bool.&lt;br /&gt;
&lt;br /&gt;
== ActivateGesture ==&lt;br /&gt;
Takes a PID-descriptor, a s32, and an u64 [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
sdknso passes hard-coded value 1 for the s32.&lt;br /&gt;
&lt;br /&gt;
== SetSupportedNpadStyleSet ==&lt;br /&gt;
Takes a PID-descriptor, an u32 [[#NpadStyleTag]], and an u64 [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== GetSupportedNpadStyleSet ==&lt;br /&gt;
Takes a PID-descriptor and an u64 [[AM_services|AppletResourceUserId]], returns an u32 [[#NpadStyleTag]].&lt;br /&gt;
&lt;br /&gt;
== SetSupportedNpadIdType ==&lt;br /&gt;
Takes a PID-descriptor, a type-0x9 input buffer, and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
The input buffer contains an array of [[#NpadIdType]]. The total entries in this array must be &amp;lt;=10.&lt;br /&gt;
&lt;br /&gt;
== ActivateNpad ==&lt;br /&gt;
Takes a PID-descriptor and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
On newer sysvers this runs the same code as [[#ActivateNpadWithRevision]], with revision=0.&lt;br /&gt;
&lt;br /&gt;
== DeactivateNpad ==&lt;br /&gt;
Takes a PID and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
This just returns 0.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] sdknso now uses the hiddbg [[#DeactivateNpad_2|cmd]] instead.&lt;br /&gt;
&lt;br /&gt;
== AcquireNpadStyleSetUpdateEventHandle ==&lt;br /&gt;
Takes a PID, an input u32, an u64 [[AM_services|AppletResourceUserId]], and an u64. Returns an output event handle, autoclear for this is user-specified.&lt;br /&gt;
&lt;br /&gt;
The value for the last u64 doesn&#039;t seem to matter (?): official sw sets this to the address of the structure used for storing the event which is initialized after using this cmd.&lt;br /&gt;
&lt;br /&gt;
== DisconnectNpad ==&lt;br /&gt;
Takes a PID, an u32 [[#NpadIdType]], and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
== GetPlayerLedPattern ==&lt;br /&gt;
Takes an input u32 [[#NpadIdType]], returns an output u64 (which is exposed by sdknso as an u8).&lt;br /&gt;
&lt;br /&gt;
== ActivateNpadWithRevision ==&lt;br /&gt;
Takes a PID-descriptor, a s32 revision, and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
Revisions:&lt;br /&gt;
* 0x0: Initial [[#ActivateNpad|revision]], pre-5.0.0.&lt;br /&gt;
* 0x1: [5.0.0+]&lt;br /&gt;
* 0x2: [6.0.0+]&lt;br /&gt;
* 0x3: [8.0.0+]&lt;br /&gt;
&lt;br /&gt;
== SetNpadJoyHoldType ==&lt;br /&gt;
Takes a PID-descriptor, an input [[#NpadJoyHoldType]], and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
== GetNpadJoyHoldType ==&lt;br /&gt;
Takes a PID-descriptor and an [[AM_services|AppletResourceUserId]]. Returns an output [[#NpadJoyHoldType]].&lt;br /&gt;
&lt;br /&gt;
sdknso will Abort when the output is not 0-1.&lt;br /&gt;
&lt;br /&gt;
== SetNpadJoyAssignmentModeSingleByDefault ==&lt;br /&gt;
Takes a PID-descriptor, an u32, and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
This eventually calls the same func as [[#SetNpadJoyAssignmentModeSingle]], except with [[#NpadJoyDeviceType]]=0.&lt;br /&gt;
&lt;br /&gt;
== SetNpadJoyAssignmentModeSingle ==&lt;br /&gt;
Takes a PID-descriptor, an u32, [[AM_services|AppletResourceUserId]], and s64 [[#NpadJoyDeviceType]]. No output.&lt;br /&gt;
&lt;br /&gt;
This eventually runs the same code as [[#SetNpadJoyAssignmentModeSingleWithDestination]], except the output fields aren&#039;t exposed.&lt;br /&gt;
&lt;br /&gt;
== SetNpadJoyAssignmentModeDual ==&lt;br /&gt;
Takes a PID-descriptor, an u32, and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
== MergeSingleJoyAsDualJoy ==&lt;br /&gt;
Takes a PID-descriptor, two u32s, and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
== StartLrAssignmentMode ==&lt;br /&gt;
Takes a PID and an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== StopLrAssignmentMode ==&lt;br /&gt;
Takes a PID and an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetNpadHandheldActivationMode ==&lt;br /&gt;
Takes a PID, an [[AM_services|AppletResourceUserId]], a s64 [[#NpadHandheldActivationMode]], no output.&lt;br /&gt;
&lt;br /&gt;
== GetNpadHandheldActivationMode ==&lt;br /&gt;
Takes a PID and an u64 [[AM_services|AppletResourceUserId]]. Returns an output s64 [[#NpadHandheldActivationMode]]. Official user-processes Abort if the output value is not 0-2.&lt;br /&gt;
&lt;br /&gt;
== SwapNpadAssignment ==&lt;br /&gt;
Takes a PID, two u32s [[#NpadIdType]], and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
== IsUnintendedHomeButtonInputProtectionEnabled ==&lt;br /&gt;
Takes a PID, an u32 [[#NpadIdType]], and an [[AM_services|AppletResourceUserId]]. Returns an output bool.&lt;br /&gt;
&lt;br /&gt;
Unused by sdknso, the flag from [[#NpadSystemProperties]] is used instead.&lt;br /&gt;
&lt;br /&gt;
== EnableUnintendedHomeButtonInputProtection ==&lt;br /&gt;
Takes a PID, a bool, an u32 [[#NpadIdType]], and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
== SetNpadJoyAssignmentModeSingleWithDestination ==&lt;br /&gt;
Takes a PID, an u32, an [[AM_services|AppletResourceUserId]], and s64 [[#NpadJoyDeviceType]]. Returns an output bool and u32 [[#NpadIdType]].&lt;br /&gt;
&lt;br /&gt;
The bool indicates whether the output [[#NpadIdType]] is set.&lt;br /&gt;
&lt;br /&gt;
== SetNpadAnalogStickUseCenterClamp ==&lt;br /&gt;
Takes a PID, a bool, an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetNpadCaptureButtonAssignment ==&lt;br /&gt;
Takes a PID, a [[#NpadStyleSet]], an [[AM_services|AppletResourceUserId]], a [[#NpadButtonSet]], no output.&lt;br /&gt;
&lt;br /&gt;
Exactly 1 bit must be set in the [[#NpadStyleSet]]. Multiple button bits can be set.&lt;br /&gt;
&lt;br /&gt;
This assigns the button(s) which trigger the CaptureButton.&lt;br /&gt;
&lt;br /&gt;
== ClearNpadCaptureButtonAssignment ==&lt;br /&gt;
Takes a PID, an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== GetVibrationDeviceInfo ==&lt;br /&gt;
Takes a [[#VibrationDeviceHandle]]. Returns an output [[#VibrationDeviceInfo]].&lt;br /&gt;
&lt;br /&gt;
== SendVibrationValue ==&lt;br /&gt;
Takes a PID-descriptor, a [[#VibrationDeviceHandle]], a [[#VibrationValue]] immediately after that, and an u64 [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
== GetActualVibrationValue ==&lt;br /&gt;
Takes a PID-descriptor, a [[#VibrationDeviceHandle]], and an u64 [[AM_services|AppletResourceUserId]]. Returns an output [[#VibrationValue]].&lt;br /&gt;
&lt;br /&gt;
== CreateActiveVibrationDeviceList ==&lt;br /&gt;
No input. Returns an [[#IActiveVibrationDeviceList]].&lt;br /&gt;
&lt;br /&gt;
== PermitVibration ==&lt;br /&gt;
Takes an input u8 bool. No output.&lt;br /&gt;
&lt;br /&gt;
This affects the config displayed by System Settings.&lt;br /&gt;
&lt;br /&gt;
== IsVibrationPermitted ==&lt;br /&gt;
No input. Returns an output u8 bool.&lt;br /&gt;
&lt;br /&gt;
== SendVibrationValues ==&lt;br /&gt;
Takes an u64 [[AM_services|AppletResourceUserId]], and two type-0x9 input buffers containing an array of: [[#VibrationDeviceHandle]] for first buffer, and [[#VibrationValue]] for the second buffer.&lt;br /&gt;
&lt;br /&gt;
Official sw uses the same entry-count for each array.&lt;br /&gt;
&lt;br /&gt;
== SendVibrationGcErmCommand ==&lt;br /&gt;
Takes a PID, a [[#VibrationDeviceHandle]], [[AM_services|AppletResourceUserId]], an u64 [[#VibrationGcErmCommand]], no output.&lt;br /&gt;
&lt;br /&gt;
== GetActualVibrationGcErmCommand ==&lt;br /&gt;
Takes a PID, a [[#VibrationDeviceHandle]], [[AM_services|AppletResourceUserId]], returns an output u64 [[#VibrationGcErmCommand]].&lt;br /&gt;
&lt;br /&gt;
== BeginPermitVibrationSession ==&lt;br /&gt;
Takes an input [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
Begins a forced-permitted vibration session.&lt;br /&gt;
&lt;br /&gt;
== EndPermitVibrationSession ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Ends the session started by [[#BeginPermitVibrationSession]].&lt;br /&gt;
&lt;br /&gt;
== IsVibrationDeviceMounted ==&lt;br /&gt;
Takes a PID, an [[#VibrationDeviceHandle]], and an u64 [[AM_services|AppletResourceUserId]], returns an output u8 bool.&lt;br /&gt;
&lt;br /&gt;
== SendVibrationValueInBool ==&lt;br /&gt;
Takes a PID, a bool, a [[#VibrationDeviceHandle]], and an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
Stubbed, this just returns 0.&lt;br /&gt;
&lt;br /&gt;
This is currently not exposed by sdknso.&lt;br /&gt;
&lt;br /&gt;
== ActivateConsoleSixAxisSensor ==&lt;br /&gt;
Takes a PID and an u64 [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
As of [10.0.0+] sdknso no longer uses this with SevenSixAxisSensor.&lt;br /&gt;
&lt;br /&gt;
== StartConsoleSixAxisSensor ==&lt;br /&gt;
Takes a PID, a [[#ConsoleSixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== StopConsoleSixAxisSensor ==&lt;br /&gt;
Takes a PID, a [[#ConsoleSixAxisSensorHandle]], and an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== ActivateSevenSixAxisSensor ==&lt;br /&gt;
Takes a PID and an u64 [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
Unused by official sw, [[#ActivateConsoleSixAxisSensor]] is used instead. However, internally ActivateSevenSixAxisSensor is identical to [[#ActivateConsoleSixAxisSensor]]. Deactivation is done with hiddbg DeactivateConsoleSixAxisSensor (which is unused by official sw).&lt;br /&gt;
&lt;br /&gt;
== StartSevenSixAxisSensor ==&lt;br /&gt;
Takes a PID and an u64 [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== StopSevenSixAxisSensor ==&lt;br /&gt;
Takes a PID and an u64 [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== InitializeSevenSixAxisSensor ==&lt;br /&gt;
Takes a PID, an u64 [[AM_services|AppletResourceUserId]], two u64s for the size of each TransferMemory, and two TransferMemory handles. No output.&lt;br /&gt;
&lt;br /&gt;
The size of the first TransferMemory is 0x1000 with MemoryPermission=read-only, while the second one has size 0x7F000 with MemoryPermission=none. sdknso uses an user-specified buffer for this, with the second tmem immediately following the first one. sdknso later uses data at buf+0 for loading SevenSixAxisSensor state.&lt;br /&gt;
&lt;br /&gt;
The data at tmem+0 has the following structure:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x10 || Unused by sdknso.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x8 || Latest entry.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x8 || Total entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xA50(0x21*0x50) || Array of the below entries.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Entry:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Timestamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x10 || Unused by sdknso.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x40 || SevenSixAxisSensorState&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
SevenSixAxisSensorState:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || First timestamp.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || Second timestamp (in samples).&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x8 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x28 || float data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FinalizeSevenSixAxisSensor ==&lt;br /&gt;
Takes a PID and an u64 [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetSevenSixAxisSensorFusionStrength ==&lt;br /&gt;
Takes a PID, a float, and an u64 [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== GetSevenSixAxisSensorFusionStrength ==&lt;br /&gt;
Takes a PID and an u64 [[AM_services|AppletResourceUserId]], returns an output float.&lt;br /&gt;
&lt;br /&gt;
== ResetSevenSixAxisSensorTimestamp ==&lt;br /&gt;
Takes a PID and an u64 [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== IsUsbFullKeyControllerEnabled ==&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
== EnableUsbFullKeyController ==&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
== IsUsbFullKeyControllerConnected ==&lt;br /&gt;
Takes an input u32 [[#NpadIdType]], returns an output bool.&lt;br /&gt;
&lt;br /&gt;
== HasBattery ==&lt;br /&gt;
Takes an input u32, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
sdknso exposes this under &amp;quot;nn::hid::system::&amp;quot;. [10.0.0+] sdknso now only exposes the hidsys version of this cmd.&lt;br /&gt;
&lt;br /&gt;
== HasLeftRightBattery ==&lt;br /&gt;
Takes an input u32, returns two output bools.&lt;br /&gt;
&lt;br /&gt;
sdknso exposes this under &amp;quot;nn::hid::system::&amp;quot;. [10.0.0+] sdknso now only exposes the hidsys version of this cmd.&lt;br /&gt;
&lt;br /&gt;
== GetNpadInterfaceType ==&lt;br /&gt;
Takes an input u32 [[#NpadIdType]], returns an output u8 [[#NpadInterfaceType]].&lt;br /&gt;
&lt;br /&gt;
The NpadInterfaceType must be 1-4, otherwise this will Abort.&lt;br /&gt;
&lt;br /&gt;
sdknso exposes this under &amp;quot;nn::hid::system::&amp;quot;. [10.0.0+] sdknso now only exposes the hidsys version of this cmd.&lt;br /&gt;
&lt;br /&gt;
== GetNpadLeftRightInterfaceType ==&lt;br /&gt;
Takes an input u32 [[#NpadIdType]], returns two output u8s [[#NpadInterfaceType]].&lt;br /&gt;
&lt;br /&gt;
sdknso exposes this under &amp;quot;nn::hid::system::&amp;quot;. [10.0.0+] sdknso now only exposes the hidsys version of this cmd.&lt;br /&gt;
&lt;br /&gt;
== GetNpadOfHighestBatteryLevel ==&lt;br /&gt;
Takes a PID, a type-0x9 input buffer containing an array of u32 [[#NpadIdType]], an u64 [[AM_services|AppletResourceUserId]], returns an output u32 [[#NpadIdType]].&lt;br /&gt;
&lt;br /&gt;
[[#NpadIdType|Handheld]] is ignored.&lt;br /&gt;
&lt;br /&gt;
== GetPalmaConnectionHandle ==&lt;br /&gt;
Takes a PID, an u32 [[#NpadIdType]], an [[AM_services|AppletResourceUserId]], returns an output [[#PalmaConnectionHandle]].&lt;br /&gt;
&lt;br /&gt;
== InitializePalma ==&lt;br /&gt;
Takes an input [[#PalmaConnectionHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
== AcquirePalmaOperationCompleteEvent ==&lt;br /&gt;
Takes an input [[#PalmaConnectionHandle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses an user-specified EventClearMode.&lt;br /&gt;
&lt;br /&gt;
The Event is signaled when data is available with [[#GetPalmaOperationInfo]].&lt;br /&gt;
&lt;br /&gt;
== GetPalmaOperationInfo ==&lt;br /&gt;
Takes a [[#PalmaConnectionHandle]], a type-0x6 output buffer, returns an output u64 [[#PalmaOperationType]].&lt;br /&gt;
&lt;br /&gt;
sdknso passes [[#PalmaOperationInfo]]+0x8 size 0x140 for the output buffer. [5.1.0+] After using the cmd successfully, [[#GetPalmaOperationResult]] is used.&lt;br /&gt;
&lt;br /&gt;
This must be used at some point following using any of the other Palma cmds which trigger an Operation, once the [[#AcquirePalmaOperationCompleteEvent|Event]] is signaled. Up to 4 Operations can be queued at once, the other cmds will throw an error once there&#039;s too many operations.&lt;br /&gt;
&lt;br /&gt;
== PlayPalmaActivity ==&lt;br /&gt;
Takes an input [[#PalmaConnectionHandle]], an u64 (exposed by sdknso as an u16), no output.&lt;br /&gt;
&lt;br /&gt;
See [[#GetPalmaOperationInfo]].&lt;br /&gt;
&lt;br /&gt;
== SetPalmaFrModeType ==&lt;br /&gt;
Takes an input [[#PalmaConnectionHandle]], an u64 [[#PalmaFrModeType]], no output.&lt;br /&gt;
&lt;br /&gt;
See [[#GetPalmaOperationInfo]].&lt;br /&gt;
&lt;br /&gt;
== ReadPalmaStep ==&lt;br /&gt;
Takes an input [[#PalmaConnectionHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
See [[#GetPalmaOperationInfo]].&lt;br /&gt;
&lt;br /&gt;
[[#EnablePalmaStep]] should be used before this.&lt;br /&gt;
&lt;br /&gt;
== EnablePalmaStep ==&lt;br /&gt;
Takes an input bool, a [[#PalmaConnectionHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
See [[#GetPalmaOperationInfo]].&lt;br /&gt;
&lt;br /&gt;
== ResetPalmaStep ==&lt;br /&gt;
Takes an input [[#PalmaConnectionHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
See [[#GetPalmaOperationInfo]].&lt;br /&gt;
&lt;br /&gt;
== ReadPalmaApplicationSection ==&lt;br /&gt;
Takes an input [[#PalmaConnectionHandle]], an u64, an u64 size, no output.&lt;br /&gt;
&lt;br /&gt;
sdknso exposes the first u64 as a s32. sdknso will Abort if the input value for the second u64 is &amp;gt;0x100.&lt;br /&gt;
&lt;br /&gt;
See [[#GetPalmaOperationInfo]].&lt;br /&gt;
&lt;br /&gt;
== WritePalmaApplicationSection ==&lt;br /&gt;
Takes an input [[#PalmaConnectionHandle]], an u64, an u64 size, a type-0x19 input buffer containing a [[#PalmaApplicationSectionAccessBuffer]], no output.&lt;br /&gt;
&lt;br /&gt;
sdknso exposes the first u64 as a s32. Data is copied from the input [[#PalmaApplicationSectionAccessBuffer]] with the specified size.&lt;br /&gt;
&lt;br /&gt;
See [[#GetPalmaOperationInfo]].&lt;br /&gt;
&lt;br /&gt;
== ReadPalmaUniqueCode ==&lt;br /&gt;
Takes an input [[#PalmaConnectionHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
See [[#GetPalmaOperationInfo]].&lt;br /&gt;
&lt;br /&gt;
== SetPalmaUniqueCodeInvalid ==&lt;br /&gt;
Takes an input [[#PalmaConnectionHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
See [[#GetPalmaOperationInfo]].&lt;br /&gt;
&lt;br /&gt;
== WritePalmaActivityEntry ==&lt;br /&gt;
Takes an input [[#PalmaConnectionHandle]], an u64, an u64, an u64, an u64, no output.&lt;br /&gt;
&lt;br /&gt;
sdknso exposes the first u64 as an u16, while the rest are exposed as [[#PalmaActivityEntry]].&lt;br /&gt;
&lt;br /&gt;
See [[#GetPalmaOperationInfo]].&lt;br /&gt;
&lt;br /&gt;
== WritePalmaRgbLedPatternEntry ==&lt;br /&gt;
Takes an input [[#PalmaConnectionHandle]], an u64, a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
sdknso exposes the u64 as an u16.&lt;br /&gt;
&lt;br /&gt;
See [[#GetPalmaOperationInfo]].&lt;br /&gt;
&lt;br /&gt;
== WritePalmaWaveEntry ==&lt;br /&gt;
Takes an input [[#PalmaConnectionHandle]], an u64 [[#PalmaWaveSet]], an u64 (exposed by sdknso as an u16), a TransferMemory handle, an u64 tmem_size, an u64 size, no output.&lt;br /&gt;
&lt;br /&gt;
The TransferMemory is created from an user-specified buffer with permissions=R--.&lt;br /&gt;
&lt;br /&gt;
Note that the sysmodule will not properly close the TransferMemory handle if the [[#PalmaConnectionHandle]] is invalid.&lt;br /&gt;
&lt;br /&gt;
See [[#GetPalmaOperationInfo]].&lt;br /&gt;
&lt;br /&gt;
== SetPalmaDataBaseIdentificationVersion ==&lt;br /&gt;
Takes an input s32, a [[#PalmaConnectionHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
See [[#GetPalmaOperationInfo]].&lt;br /&gt;
&lt;br /&gt;
== GetPalmaDataBaseIdentificationVersion ==&lt;br /&gt;
Takes an input [[#PalmaConnectionHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
See [[#GetPalmaOperationInfo]].&lt;br /&gt;
&lt;br /&gt;
== SuspendPalmaFeature ==&lt;br /&gt;
Takes an input &amp;quot;nn::util::BitFlagSet&amp;lt;32, [[#PalmaFeature]]&amp;gt;&amp;quot;, a [[#PalmaConnectionHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
See [[#GetPalmaOperationInfo]].&lt;br /&gt;
&lt;br /&gt;
== GetPalmaOperationResult ==&lt;br /&gt;
Takes an input [[#PalmaConnectionHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
sdknso only uses this from the wrapper for [[#GetPalmaOperationInfo]].&lt;br /&gt;
&lt;br /&gt;
== ReadPalmaPlayLog ==&lt;br /&gt;
Takes an input u16, a [[#PalmaConnectionHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
See [[#GetPalmaOperationInfo]].&lt;br /&gt;
&lt;br /&gt;
== ResetPalmaPlayLog ==&lt;br /&gt;
Takes an input u16, a [[#PalmaConnectionHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
See [[#GetPalmaOperationInfo]].&lt;br /&gt;
&lt;br /&gt;
== SetIsPalmaAllConnectable ==&lt;br /&gt;
Takes a PID, a bool, an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
The sysmodule also calls the code which eventually runs from this, from various other funcs internally (bool value varies).&lt;br /&gt;
&lt;br /&gt;
This updates various state. If needed, this uses either [[BTM_services|StartBleScanForGeneral]] or [[BTM_services|StopBleScanForGeneral]].&lt;br /&gt;
&lt;br /&gt;
== SetIsPalmaPairedConnectable ==&lt;br /&gt;
Takes a PID, a bool, an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
The actual cmd impl ignores the PID/AppletResourceUserId.&lt;br /&gt;
&lt;br /&gt;
This code is also called by another func internally by the sysmodule, where flag = {whether bit6 in a field is set} (presumably [[#NpadStyleSet]]). This is eventually called from various funcs, including [[#SetSupportedNpadStyleSet]].&lt;br /&gt;
&lt;br /&gt;
This updates various state. If needed, this uses either [[BTM_services|StartBleScanForPairedDevice]] or [[BTM_services|StopBleScanForPairedDevice]].&lt;br /&gt;
&lt;br /&gt;
== PairPalma ==&lt;br /&gt;
Takes an input [[#PalmaConnectionHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
This eventually uses [[BTM_services#BlePairDevice|BlePairDevice]] if needed, and updates state.&lt;br /&gt;
&lt;br /&gt;
== SetPalmaBoostMode ==&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
Stubbed, just returns 0. This was replaced by [[#EnablePalmaBoostMode]].&lt;br /&gt;
&lt;br /&gt;
== CancelWritePalmaWaveEntry ==&lt;br /&gt;
Takes an input [[#PalmaConnectionHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
== EnablePalmaBoostMode ==&lt;br /&gt;
Takes a PID, a bool, an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== GetPalmaBluetoothAddress ==&lt;br /&gt;
Takes an input [[#PalmaConnectionHandle]], returns an output [[Bluetooth_Driver_services#Address|Address]].&lt;br /&gt;
&lt;br /&gt;
== SetDisallowedPalmaConnection ==&lt;br /&gt;
Takes a PID, an [[AM_services|AppletResourceUserId]], a type-0x9 input buffer containing an array of [[Bluetooth_Driver_services#Address|Address]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetNpadCommunicationMode ==&lt;br /&gt;
Takes a PID, an [[AM_services|AppletResourceUserId]], a s64 [[#NpadCommunicationMode]], no output.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Stubbed, just returns 0.&lt;br /&gt;
&lt;br /&gt;
== GetNpadCommunicationMode ==&lt;br /&gt;
No input, returns an output s64 [[#NpadCommunicationMode]].&lt;br /&gt;
&lt;br /&gt;
sdknso uses a switch-statement to determine the value to write to the output [[#NpadCommunicationMode]], with the s64 (written value is the same as the s64). sdknso will Abort if the s64 is not 0-3.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Stubbed, just returns hard-coded output mode=3.&lt;br /&gt;
&lt;br /&gt;
== SetTouchScreenConfiguration ==&lt;br /&gt;
Takes a PID, a [[#TouchScreenConfigurationForNx]], an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== IsFirmwareUpdateNeededForNotification ==&lt;br /&gt;
Takes a PID, a s32, an [[AM_services|AppletResourceUserId]], returns an output bool.&lt;br /&gt;
&lt;br /&gt;
sdknso passes hard-coded value 1 for the s32.&lt;br /&gt;
&lt;br /&gt;
== ActivateDigitizer ==&lt;br /&gt;
Takes a PID and an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
== IAppletResource ==&lt;br /&gt;
This is &amp;quot;nn::hid::IAppletResource&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 || [[#GetSharedMemoryHandle]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetSharedMemoryHandle ===&lt;br /&gt;
No input. Returns a [[#SharedMemoryFormat|sharedmem]] handle.&lt;br /&gt;
&lt;br /&gt;
== IActiveVibrationDeviceList ==&lt;br /&gt;
This is &amp;quot;nn::hid::IActiveVibrationDeviceList&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 || [[#ActivateVibrationDevice]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ActivateVibrationDevice ===&lt;br /&gt;
Takes an input [[#VibrationDeviceHandle]]. No output.&lt;br /&gt;
&lt;br /&gt;
= hid:dbg =&lt;br /&gt;
This is &amp;quot;nn::hid::IHidDebugServer&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 || [[#DeactivateDebugPad]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#SetDebugPadAutoPilotState]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#UnsetDebugPadAutoPilotState]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#DeactivateTouchScreen]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#SetTouchScreenAutoPilotState]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#UnsetTouchScreenAutoPilotState]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [9.0.0+] GetTouchScreenConfiguration&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [11.0.0+] ProcessTouchScreenAutoTune&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [13.0.0+] ForceStopTouchScreenManagement&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [13.0.0+] ForceRestartTouchScreenManagement&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [13.0.0+] IsTouchScreenManaged&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#DeactivateMouse]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#SetMouseAutoPilotState]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#UnsetMouseAutoPilotState]]&lt;br /&gt;
|-&lt;br /&gt;
| 30 || [[#DeactivateKeyboard]]&lt;br /&gt;
|-&lt;br /&gt;
| 31 || [[#SetKeyboardAutoPilotState]]&lt;br /&gt;
|-&lt;br /&gt;
| 32 || [[#UnsetKeyboardAutoPilotState]]&lt;br /&gt;
|-&lt;br /&gt;
| 50 || [[#DeactivateXpad]]&lt;br /&gt;
|-&lt;br /&gt;
| 51 || [1.0.0-9.2.0] SetXpadAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 52 || [1.0.0-9.2.0] UnsetXpadAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 53 ([1.0.0-8.1.0] 60) || [1.0.0-9.2.0] [[#DeactivateJoyXpad]]&lt;br /&gt;
|-&lt;br /&gt;
| 60 || [9.0.0+] ClearNpadSystemCommonPolicy&lt;br /&gt;
|-&lt;br /&gt;
| 61 || [10.0.0+] [[#DeactivateNpad_2|DeactivateNpad]]&lt;br /&gt;
|-&lt;br /&gt;
| 62 || [10.0.0+] ForceDisconnectNpad&lt;br /&gt;
|-&lt;br /&gt;
| 91 || DeactivateGesture&lt;br /&gt;
|-&lt;br /&gt;
| 110 || DeactivateHomeButton&lt;br /&gt;
|-&lt;br /&gt;
| 111 || SetHomeButtonAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 112 || UnsetHomeButtonAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 120 || [[#DeactivateSleepButton]]&lt;br /&gt;
|-&lt;br /&gt;
| 121 || [[#SetSleepButtonAutoPilotState]]&lt;br /&gt;
|-&lt;br /&gt;
| 122 || [[#UnsetSleepButtonAutoPilotState]]&lt;br /&gt;
|-&lt;br /&gt;
| 123 || [1.0.0-9.2.0] DeactivateInputDetector&lt;br /&gt;
|-&lt;br /&gt;
| 130 || DeactivateCaptureButton&lt;br /&gt;
|-&lt;br /&gt;
| 131 || SetCaptureButtonAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 132 || UnsetCaptureButtonAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 133 || [3.0.0+] SetShiftAccelerometerCalibrationValue&lt;br /&gt;
|-&lt;br /&gt;
| 134 || [3.0.0+] GetShiftAccelerometerCalibrationValue&lt;br /&gt;
|-&lt;br /&gt;
| 135 || [3.0.0+] SetShiftGyroscopeCalibrationValue&lt;br /&gt;
|-&lt;br /&gt;
| 136 || [3.0.0+] GetShiftGyroscopeCalibrationValue&lt;br /&gt;
|-&lt;br /&gt;
| 140 || [3.0.0+] DeactivateConsoleSixAxisSensor&lt;br /&gt;
|-&lt;br /&gt;
| 141 || [5.0.0+] GetConsoleSixAxisSensorSamplingFrequency&lt;br /&gt;
|-&lt;br /&gt;
| 142 || [5.0.0+] DeactivateSevenSixAxisSensor&lt;br /&gt;
|-&lt;br /&gt;
| 143 || [5.0.0+] GetConsoleSixAxisSensorCountStates&lt;br /&gt;
|-&lt;br /&gt;
| 144 || [8.0.0+] GetAccelerometerFsr&lt;br /&gt;
|-&lt;br /&gt;
| 145 || [8.0.0+] SetAccelerometerFsr&lt;br /&gt;
|-&lt;br /&gt;
| 146 || [8.0.0+] GetAccelerometerOdr&lt;br /&gt;
|-&lt;br /&gt;
| 147 || [8.0.0+] SetAccelerometerOdr&lt;br /&gt;
|-&lt;br /&gt;
| 148 || [8.0.0+] GetGyroscopeFsr&lt;br /&gt;
|-&lt;br /&gt;
| 149 || [8.0.0+] SetGyroscopeFsr&lt;br /&gt;
|-&lt;br /&gt;
| 150 || [8.0.0+] GetGyroscopeOdr&lt;br /&gt;
|-&lt;br /&gt;
| 151 || [8.0.0+] SetGyroscopeOdr&lt;br /&gt;
|-&lt;br /&gt;
| 152 || [10.0.0+] GetWhoAmI&lt;br /&gt;
|-&lt;br /&gt;
| 201 || ActivateFirmwareUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 202 || DeactivateFirmwareUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 203 || [[#StartFirmwareUpdate]]&lt;br /&gt;
|-&lt;br /&gt;
| 204 || GetFirmwareUpdateStage&lt;br /&gt;
|-&lt;br /&gt;
| 205 || [[#GetFirmwareVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 206 || [[#GetDestinationFirmwareVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 207 || [[#DiscardFirmwareInfoCacheForRevert]]&lt;br /&gt;
|-&lt;br /&gt;
| 208 || [3.0.0+] StartFirmwareUpdateForRevert&lt;br /&gt;
|-&lt;br /&gt;
| 209 || [3.0.0+] GetAvailableFirmwareVersionForRevert&lt;br /&gt;
|-&lt;br /&gt;
| 210 || [4.0.0+] IsFirmwareUpdatingDevice&lt;br /&gt;
|-&lt;br /&gt;
| 211 || [6.0.0+] StartFirmwareUpdateIndividual&lt;br /&gt;
|-&lt;br /&gt;
| 215 || [6.0.0+] SetUsbFirmwareForceUpdateEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 216 || [6.0.0+] SetAllKuinaDevicesToFirmwareUpdateMode&lt;br /&gt;
|-&lt;br /&gt;
| 221 || [3.0.0+] [[#UpdateControllerColor]]&lt;br /&gt;
|-&lt;br /&gt;
| 222 || [4.0.0+] ConnectUsbPadsAsync&lt;br /&gt;
|-&lt;br /&gt;
| 223 || [4.0.0+] DisconnectUsbPadsAsync&lt;br /&gt;
|-&lt;br /&gt;
| 224 || [5.0.0+] [[#UpdateDesignInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 225 || [5.0.0+] [[#GetUniquePadDriverState]]&lt;br /&gt;
|-&lt;br /&gt;
| 226 || [5.0.0+] [[#GetSixAxisSensorDriverStates]]&lt;br /&gt;
|-&lt;br /&gt;
| 227 || [5.0.0+] GetRxPacketHistory&lt;br /&gt;
|-&lt;br /&gt;
| 228 || [6.0.0+] [[#AcquireOperationEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 229 || [6.0.0+] [[#ReadSerialFlash]]&lt;br /&gt;
|-&lt;br /&gt;
| 230 || [6.0.0+] [[#WriteSerialFlash]]&lt;br /&gt;
|-&lt;br /&gt;
| 231 || [6.0.0+] [[#GetOperationResult]]&lt;br /&gt;
|-&lt;br /&gt;
| 232 || [6.0.0+] EnableShipmentMode&lt;br /&gt;
|-&lt;br /&gt;
| 233 || [6.0.0+] ClearPairingInfo&lt;br /&gt;
|-&lt;br /&gt;
| 234 || [6.0.0+] [[#GetUniquePadDeviceTypeSetInternal]]&lt;br /&gt;
|-&lt;br /&gt;
| 235 || [7.0.0+] EnableAnalogStickPower&lt;br /&gt;
|-&lt;br /&gt;
| 236 || [9.0.0+] RequestKuinaUartClockCal&lt;br /&gt;
|-&lt;br /&gt;
| 237 || [9.0.0+] GetKuinaUartClockCal&lt;br /&gt;
|-&lt;br /&gt;
| 238 || [9.0.0+] SetKuinaUartClockTrim&lt;br /&gt;
|-&lt;br /&gt;
| 239 || [9.0.0+] KuinaLoopbackTest&lt;br /&gt;
|-&lt;br /&gt;
| 240 || [9.0.0+] RequestBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 241 || [9.0.0+] GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 242 || [9.0.0+] GetUniquePadPowerInfo&lt;br /&gt;
|-&lt;br /&gt;
| 243 || [9.0.0+] RebootUniquePad&lt;br /&gt;
|-&lt;br /&gt;
| 244 || [9.0.0+] RequestKuinaFirmwareVersion&lt;br /&gt;
|-&lt;br /&gt;
| 245 || [9.0.0+] GetKuinaFirmwareVersion&lt;br /&gt;
|-&lt;br /&gt;
| 246 || [9.0.0+] GetVidPid&lt;br /&gt;
|-&lt;br /&gt;
| 247 || [11.0.0+] GetAnalogStickCalibrationValue&lt;br /&gt;
|-&lt;br /&gt;
| 248 || [11.0.0+] GetUniquePadIdsFull&lt;br /&gt;
|-&lt;br /&gt;
| 249 || [11.0.0+] ConnectUniquePad&lt;br /&gt;
|-&lt;br /&gt;
| 250 || [12.0.0+] IsVirtual&lt;br /&gt;
|-&lt;br /&gt;
| 251 || [12.0.0+] GetAnalogStickModuleParam&lt;br /&gt;
|-&lt;br /&gt;
| 301 || [5.0.0-8.1.0] [[#GetAbstractedPadHandles]]&lt;br /&gt;
|-&lt;br /&gt;
| 302 || [5.0.0-8.1.0] [[#GetAbstractedPadState]]&lt;br /&gt;
|-&lt;br /&gt;
| 303 || [5.0.0-8.1.0] [[#GetAbstractedPadsState]]&lt;br /&gt;
|-&lt;br /&gt;
| 321 || [5.0.0-8.1.0] [[#SetAutoPilotVirtualPadState]]&lt;br /&gt;
|-&lt;br /&gt;
| 322 || [5.0.0-8.1.0] [[#UnsetAutoPilotVirtualPadState]]&lt;br /&gt;
|-&lt;br /&gt;
| 323 || [5.0.0+] [[#UnsetAllAutoPilotVirtualPadState]]&lt;br /&gt;
|-&lt;br /&gt;
| 324 || [7.0.0+] [[#AttachHdlsWorkBuffer]]&lt;br /&gt;
|-&lt;br /&gt;
| 325 || [7.0.0+] [[#ReleaseHdlsWorkBuffer]]&lt;br /&gt;
|-&lt;br /&gt;
| 326 || [7.0.0+] [[#DumpHdlsNpadAssignmentState]]&lt;br /&gt;
|-&lt;br /&gt;
| 327 || [7.0.0+] [[#DumpHdlsStates]]&lt;br /&gt;
|-&lt;br /&gt;
| 328 || [7.0.0+] [[#ApplyHdlsNpadAssignmentState]]&lt;br /&gt;
|-&lt;br /&gt;
| 329 || [7.0.0+] [[#ApplyHdlsStateList]]&lt;br /&gt;
|-&lt;br /&gt;
| 330 || [7.0.0+] [[#AttachHdlsVirtualDevice]]&lt;br /&gt;
|-&lt;br /&gt;
| 331 || [7.0.0+] [[#DetachHdlsVirtualDevice]]&lt;br /&gt;
|-&lt;br /&gt;
| 332 || [7.0.0+] [[#SetHdlsState]]&lt;br /&gt;
|-&lt;br /&gt;
| 350 || [5.0.0+] [[#AddRegisteredDevice]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [6.0.0+] DisableExternalMcuOnNxDevice&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [6.0.0+] DisableRailDeviceFiltering&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [10.0.0+] EnableWiredPairing&lt;br /&gt;
|-&lt;br /&gt;
| 403 || [10.0.0+] EnableShipmentModeAutoClear&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [11.0.0+] SetRailEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 500 || [8.0.0+] SetFactoryInt&lt;br /&gt;
|-&lt;br /&gt;
| 501 || [8.0.0+] IsFactoryBootEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 550 || [9.0.0+] SetAnalogStickModelDataTemporarily&lt;br /&gt;
|-&lt;br /&gt;
| 551 || [9.0.0+] GetAnalogStickModelData&lt;br /&gt;
|-&lt;br /&gt;
| 552 || [9.0.0+] ResetAnalogStickModelData&lt;br /&gt;
|-&lt;br /&gt;
| 600 || [10.0.0+] ConvertPadState&lt;br /&gt;
|-&lt;br /&gt;
| 650 || [12.0.0+] AddButtonPlayData&lt;br /&gt;
|-&lt;br /&gt;
| 651 || [12.0.0+] StartButtonPlayData&lt;br /&gt;
|-&lt;br /&gt;
| 652 || [12.0.0+] StopButtonPlayData&lt;br /&gt;
|-&lt;br /&gt;
| 2000 || [10.0.0+] DeactivateDigitizer&lt;br /&gt;
|-&lt;br /&gt;
| 2001 || [10.0.0+] SetDigitizerAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 2002 || [10.0.0+] UnsetDigitizerAutoPilotState&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DeactivateDebugPad ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== SetDebugPadAutoPilotState ==&lt;br /&gt;
Takes an input [[#DebugPadAutoPilotState]], no output.&lt;br /&gt;
&lt;br /&gt;
== UnsetDebugPadAutoPilotState ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== DeactivateTouchScreen ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== SetTouchScreenAutoPilotState ==&lt;br /&gt;
Takes a type-0x5 input buffer containing an array of [[#TouchState]], no output.&lt;br /&gt;
&lt;br /&gt;
The max entries for the array is 16.&lt;br /&gt;
&lt;br /&gt;
== UnsetTouchScreenAutoPilotState ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== DeactivateMouse ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== SetMouseAutoPilotState ==&lt;br /&gt;
Takes an input [[#MouseAutoPilotState]], no output.&lt;br /&gt;
&lt;br /&gt;
== UnsetMouseAutoPilotState ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== DeactivateKeyboard ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== SetKeyboardAutoPilotState ==&lt;br /&gt;
Takes an input [[#KeyboardAutoPilotState]], no output.&lt;br /&gt;
&lt;br /&gt;
== UnsetKeyboardAutoPilotState ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== DeactivateXpad ==&lt;br /&gt;
Takes an input &amp;quot;nn::hid::BasicXpadId&amp;quot;, no output.&lt;br /&gt;
&lt;br /&gt;
== DeactivateNpad ==&lt;br /&gt;
Takes a PID and an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
This just returns 0.&lt;br /&gt;
&lt;br /&gt;
== DeactivateSleepButton ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== SetSleepButtonAutoPilotState ==&lt;br /&gt;
Takes an input [[#SleepButtonAutoPilotState]], no output.&lt;br /&gt;
&lt;br /&gt;
== UnsetSleepButtonAutoPilotState ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== StartFirmwareUpdate ==&lt;br /&gt;
Takes a total of 0x20-bytes of input, 2 handles, and returns an output handle.&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] Now takes a total of 8-bytes of input, and no longer uses any input/output handles.&lt;br /&gt;
&lt;br /&gt;
== GetFirmwareVersion ==&lt;br /&gt;
Takes a total of 8-bytes of input, and returns a total of 4-bytes of output.&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] Now returns an additional 0xC-bytes of output.&lt;br /&gt;
&lt;br /&gt;
== GetDestinationFirmwareVersion ==&lt;br /&gt;
Takes a total of 8-bytes of input, and returns a total of 4-bytes of output.&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] Now returns an additional 0xC-bytes of output.&lt;br /&gt;
&lt;br /&gt;
== DiscardFirmwareInfoCacheForRevert ==&lt;br /&gt;
Takes a total of 8-bytes of input, and returns a total of 5-bytes of output.&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] No input/output.&lt;br /&gt;
&lt;br /&gt;
== UpdateControllerColor ==&lt;br /&gt;
Takes two input u32s for the colors, an [[#UniquePadId]], and no output.&lt;br /&gt;
&lt;br /&gt;
A state flag must be clear, otherwise an error is thrown. Afterwards, this flag is set.&lt;br /&gt;
&lt;br /&gt;
Sends the spi-write subcommand to the specified controller, for writing the [[Joy-Con#Colors|color data]]. This writes to offset 0x6050 size 0x6, where the first 3-bytes are from the first u32 and the remaining 3-bytes are from the second u32.&lt;br /&gt;
&lt;br /&gt;
== UpdateDesignInfo ==&lt;br /&gt;
Takes 4 input u32s for the colors, an input u8, an input [[#UniquePadId]], and no output.&lt;br /&gt;
&lt;br /&gt;
A state flag must be clear (same as [[#UpdateControllerColor]]), otherwise an error is thrown. Afterwards, this flag is set.&lt;br /&gt;
&lt;br /&gt;
Sends the spi-write subcommand to the specified controller, for writing to offset 0x6050 size 0xD. The first 3-bytes from each u32 is used for the spi-write-data, with the u8 being copied immediately afterwards the color data.&lt;br /&gt;
&lt;br /&gt;
== GetUniquePadDriverState ==&lt;br /&gt;
Takes a total of 8-bytes of input, returns a total of 0x20-bytes of output.&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] Now takes a total of 8-bytes of input, returns a total of 0x18-bytes of output.&lt;br /&gt;
&lt;br /&gt;
== GetSixAxisSensorDriverStates ==&lt;br /&gt;
Takes a total of 8-bytes of input and a type-0xA output buffer, returns a total of 8-bytes of output.&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] Now takes a total of 8-bytes of input and a type-0x6 output buffer, returns a total of 8-bytes of output.&lt;br /&gt;
&lt;br /&gt;
== AcquireOperationEventHandle ==&lt;br /&gt;
Takes an input [[#UniquePadId]], returns an output Event handle. The EventClearMode used by official sw is user-specified.&lt;br /&gt;
&lt;br /&gt;
This is not used internally by sdk-nso besides exposing it to the user. With the sdk-nso for [9.0.0+] the wrapper funcs for this was removed (sdk-nso still has the actual cmd).&lt;br /&gt;
&lt;br /&gt;
This must be used before [[#ReadSerialFlash]]/[[#WriteSerialFlash]]. Afterwards, this Event is used to wait for the async operation started by [[#ReadSerialFlash]]/[[#WriteSerialFlash]] to finish. After waiting on the Event, [[#GetOperationResult]] should be used.&lt;br /&gt;
&lt;br /&gt;
== ReadSerialFlash ==&lt;br /&gt;
Takes an input TransferMemory handle, an input u32 offset, an input u64 size, and an [[#UniquePadId]], no output.&lt;br /&gt;
&lt;br /&gt;
Reads from the specified controller&#039;s spi-flash. The input size is the original size without page-alignment. The TransferMemory permissions is RW-.&lt;br /&gt;
&lt;br /&gt;
See also [[#AcquireOperationEventHandle]].&lt;br /&gt;
&lt;br /&gt;
With the sdk-nso for [9.0.0+] the wrapper funcs for this was removed (sdk-nso still has the actual cmd).&lt;br /&gt;
&lt;br /&gt;
== WriteSerialFlash ==&lt;br /&gt;
Takes an input TransferMemory handle, an input u32 offset, an input u64 tmem_size, an input u64 size, and an [[#UniquePadId]], no output.&lt;br /&gt;
&lt;br /&gt;
Writes to the specified controller&#039;s spi-flash. The TransferMemory permissions is R--.&lt;br /&gt;
&lt;br /&gt;
See also [[#AcquireOperationEventHandle]].&lt;br /&gt;
&lt;br /&gt;
With the sdk-nso for [9.0.0+] the wrapper funcs for this was removed (sdk-nso still has the actual cmd).&lt;br /&gt;
&lt;br /&gt;
== GetOperationResult ==&lt;br /&gt;
Takes an input [[#UniquePadId]], no output.&lt;br /&gt;
&lt;br /&gt;
Get the Result for the Operation and handles cleanup, for the specified controller.&lt;br /&gt;
&lt;br /&gt;
This is not used internally by sdk-nso besides exposing it to the user. With the sdk-nso for [9.0.0+] the wrapper funcs for this was removed (sdk-nso still has the actual cmd).&lt;br /&gt;
&lt;br /&gt;
== GetUniquePadDeviceTypeSetInternal ==&lt;br /&gt;
Takes an input [[#UniquePadId]], returns an [[#DeviceTypeInternal]].&lt;br /&gt;
&lt;br /&gt;
== GetAbstractedPadHandles ==&lt;br /&gt;
Takes a type-0xA output buffer containing an array of u64 &#039;&#039;&#039;AbstractedPadHandle&#039;&#039;&#039; and returns an output s32 for total entries.&lt;br /&gt;
&lt;br /&gt;
Returns a handle for each controller detected by the system.&lt;br /&gt;
&lt;br /&gt;
== GetAbstractedPadState ==&lt;br /&gt;
Takes an input u64 &#039;&#039;&#039;AbstractedPadHandle&#039;&#039;&#039;, returns an output [[#AbstractedPadState]].&lt;br /&gt;
&lt;br /&gt;
== GetAbstractedPadsState ==&lt;br /&gt;
Takes a type-0xA output buffer containing an array of u64 &#039;&#039;&#039;AbstractedPadHandle&#039;&#039;&#039;, a type-0x22 output buffer containing an array of [[#AbstractedPadState]], and returns an output s32 for total entries.&lt;br /&gt;
&lt;br /&gt;
== SetAutoPilotVirtualPadState ==&lt;br /&gt;
Takes an input s8 &#039;&#039;&#039;AbstractedVirtualPadId&#039;&#039;&#039; and an input [[#AbstractedPadState]], no output.&lt;br /&gt;
&lt;br /&gt;
== UnsetAutoPilotVirtualPadState ==&lt;br /&gt;
Takes an input s8 &#039;&#039;&#039;AbstractedVirtualPadId&#039;&#039;&#039;, no output.&lt;br /&gt;
&lt;br /&gt;
Clears AutoPilot state for the specified pad.&lt;br /&gt;
&lt;br /&gt;
== UnsetAllAutoPilotVirtualPadState ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Same as [[#UnsetAutoPilotVirtualPadState]] except this clears state for every pad.&lt;br /&gt;
&lt;br /&gt;
== AttachHdlsWorkBuffer ==&lt;br /&gt;
Takes an input TransferMemory handle and an u64 for the TransferMemory size, no output.&lt;br /&gt;
&lt;br /&gt;
[13.0.0+] Now additionally returns an output [[#HdlsSessionId]].&lt;br /&gt;
&lt;br /&gt;
Official user-processes use TransferMemory size=0x1000 and permissions=RW.&lt;br /&gt;
&lt;br /&gt;
This TransferMemory is used as input/output by the other Hdls commands.&lt;br /&gt;
&lt;br /&gt;
Hdls is for virtual HID controllers.&lt;br /&gt;
&lt;br /&gt;
== ReleaseHdlsWorkBuffer ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
[13.0.0+] Takes an input [[#HdlsSessionId]], no output.&lt;br /&gt;
&lt;br /&gt;
== DumpHdlsNpadAssignmentState ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
[13.0.0+] Takes an input [[#HdlsSessionId]], no output.&lt;br /&gt;
&lt;br /&gt;
After using this cmd, the output [[#HdlsNpadAssignment]] is located at tmem+0.&lt;br /&gt;
&lt;br /&gt;
== DumpHdlsStates ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
[13.0.0+] Takes an input [[#HdlsSessionId]], no output.&lt;br /&gt;
&lt;br /&gt;
After using this cmd, the output [[#HdlsStateList]] struct is located at tmem+0.&lt;br /&gt;
&lt;br /&gt;
== ApplyHdlsNpadAssignmentState ==&lt;br /&gt;
Takes an input u8 bool, no output.&lt;br /&gt;
&lt;br /&gt;
[13.0.0+] Takes an input bool and a [[#HdlsSessionId]], no output.&lt;br /&gt;
&lt;br /&gt;
Prior to using this cmd, the input [[#HdlsNpadAssignment]] is written to tmem+0 by the user-process.&lt;br /&gt;
&lt;br /&gt;
== ApplyHdlsStateList ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
[13.0.0+] Takes an input [[#HdlsSessionId]], no output.&lt;br /&gt;
&lt;br /&gt;
Prior to using this cmd, the input [[#HdlsStateList]] is written to tmem+0 by the user-process.&lt;br /&gt;
&lt;br /&gt;
The [[#HdlsState]] will be applied for each [[#HdlsHandle]]. If a [[#HdlsHandle]] is not found, code similar to [[#AttachHdlsVirtualDevice]] will run with the [[#HdlsDeviceInfo]], then it will continue with applying state with the new device.&lt;br /&gt;
&lt;br /&gt;
== AttachHdlsVirtualDevice ==&lt;br /&gt;
Takes an [[#HdlsDeviceInfo]], returns a [[#HdlsHandle]].&lt;br /&gt;
&lt;br /&gt;
== DetachHdlsVirtualDevice ==&lt;br /&gt;
Takes an input [[#HdlsHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetHdlsState ==&lt;br /&gt;
Takes an input [[#HdlsState]] and an input [[#HdlsHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] Input order was swapped: now takes an input [[#HdlsHandle]] and a [[#HdlsState]], no output.&lt;br /&gt;
&lt;br /&gt;
== AddRegisteredDevice ==&lt;br /&gt;
Takes an input [[#RegisteredDevice]], no output.&lt;br /&gt;
&lt;br /&gt;
[11.0.0+] Takes an input [[#DebugRegisteredDevice]], no output.&lt;br /&gt;
&lt;br /&gt;
= hid:sys =&lt;br /&gt;
This is &amp;quot;nn::hid::IHidSystemServer&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;
| 31 || [[#SendKeyboardLockKeyEvent_2|SendKeyboardLockKeyEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#AcquireHomeButtonEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 111 || [[#ActivateHomeButton]]&lt;br /&gt;
|-&lt;br /&gt;
| 121 || [[#AcquireSleepButtonEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 131 || [[#ActivateSleepButton]]&lt;br /&gt;
|-&lt;br /&gt;
| 141 || [[#AcquireCaptureButtonEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 151 || [[#ActivateCaptureButton]]&lt;br /&gt;
|-&lt;br /&gt;
| 161 || [7.0.0+] GetPlatformConfig&lt;br /&gt;
|-&lt;br /&gt;
| 210 || AcquireNfcDeviceUpdateEventHandle&lt;br /&gt;
|-&lt;br /&gt;
| 211 || GetNpadsWithNfc&lt;br /&gt;
|-&lt;br /&gt;
| 212 || AcquireNfcActivateEventHandle&lt;br /&gt;
|-&lt;br /&gt;
| 213 || ActivateNfc&lt;br /&gt;
|-&lt;br /&gt;
| 214 || [4.0.0+] GetXcdHandleForNpadWithNfc&lt;br /&gt;
|-&lt;br /&gt;
| 215 || [4.0.0+] IsNfcActivated&lt;br /&gt;
|-&lt;br /&gt;
| 230 || AcquireIrSensorEventHandle&lt;br /&gt;
|-&lt;br /&gt;
| 231 || ActivateIrSensor&lt;br /&gt;
|-&lt;br /&gt;
| 232 || [10.0.0+] GetIrSensorState&lt;br /&gt;
|-&lt;br /&gt;
| 233 || [10.0.0+] GetXcdHandleForNpadWithIrSensor&lt;br /&gt;
|-&lt;br /&gt;
| 301 || ActivateNpadSystem&lt;br /&gt;
|-&lt;br /&gt;
| 303 || ApplyNpadSystemCommonPolicy&lt;br /&gt;
|-&lt;br /&gt;
| 304 || EnableAssigningSingleOnSlSrPress&lt;br /&gt;
|-&lt;br /&gt;
| 305 || DisableAssigningSingleOnSlSrPress&lt;br /&gt;
|-&lt;br /&gt;
| 306 || GetLastActiveNpad&lt;br /&gt;
|-&lt;br /&gt;
| 307 || GetNpadSystemExtStyle&lt;br /&gt;
|-&lt;br /&gt;
| 308 || [5.0.0+] ApplyNpadSystemCommonPolicyFull&lt;br /&gt;
|-&lt;br /&gt;
| 309 || [5.0.0+] GetNpadFullKeyGripColor&lt;br /&gt;
|-&lt;br /&gt;
| 310 || [6.0.0+] [[#GetMaskedSupportedNpadStyleSet]]&lt;br /&gt;
|-&lt;br /&gt;
| 311 || SetNpadPlayerLedBlinkingDevice&lt;br /&gt;
|-&lt;br /&gt;
| 312 || [6.0.0+] SetSupportedNpadStyleSetAll&lt;br /&gt;
|-&lt;br /&gt;
| 313 || [9.0.0+] GetNpadCaptureButtonAssignment&lt;br /&gt;
|-&lt;br /&gt;
| 314 || [9.0.0+] GetAppletFooterUiType&lt;br /&gt;
|-&lt;br /&gt;
| 315 || [9.0.0+] GetAppletDetailedUiType&lt;br /&gt;
|-&lt;br /&gt;
| 316 || [10.0.0+] [[#GetNpadInterfaceType]]&lt;br /&gt;
|-&lt;br /&gt;
| 317 || [10.0.0+] [[#GetNpadLeftRightInterfaceType]]&lt;br /&gt;
|-&lt;br /&gt;
| 318 || [10.0.0+] [[#HasBattery]]&lt;br /&gt;
|-&lt;br /&gt;
| 319 || [10.0.0+] [[#HasLeftRightBattery]]&lt;br /&gt;
|-&lt;br /&gt;
| 321 || [3.0.0+] [[#GetUniquePadsFromNpad]]&lt;br /&gt;
|-&lt;br /&gt;
| 322 || [10.0.0+] SetNpadSystemExtStateEnabled ([1.0.0-9.2.0] GetIrSensorState)&lt;br /&gt;
|-&lt;br /&gt;
| 323 || [10.0.0+] GetLastActiveUniquePad ([1.0.0-9.2.0] GetXcdHandleForNpadWithIrSensor)&lt;br /&gt;
|-&lt;br /&gt;
| 324 || [10.0.0+] GetUniquePadButtonSet&lt;br /&gt;
|-&lt;br /&gt;
| 325 || [10.0.0+] GetUniquePadColor&lt;br /&gt;
|-&lt;br /&gt;
| 326 || [10.0.0+] GetUniquePadAppletDetailedUiType&lt;br /&gt;
|-&lt;br /&gt;
| 327 || [14.0.0+] GetAbstractedPadIdDataFromNpad&lt;br /&gt;
|-&lt;br /&gt;
| 328 || [14.0.0+] AttachAbstractedPadToNpad&lt;br /&gt;
|-&lt;br /&gt;
| 329 || [14.0.0+] DetachAbstractedPadAll&lt;br /&gt;
|-&lt;br /&gt;
| 330 || [14.0.0+] CheckAbstractedPadConnection&lt;br /&gt;
|-&lt;br /&gt;
| 500 || SetAppletResourceUserId&lt;br /&gt;
|-&lt;br /&gt;
| 501 || RegisterAppletResourceUserId&lt;br /&gt;
|-&lt;br /&gt;
| 502 || UnregisterAppletResourceUserId&lt;br /&gt;
|-&lt;br /&gt;
| 503 || EnableAppletToGetInput&lt;br /&gt;
|-&lt;br /&gt;
| 504 || SetAruidValidForVibration&lt;br /&gt;
|-&lt;br /&gt;
| 505 || EnableAppletToGetSixAxisSensor&lt;br /&gt;
|-&lt;br /&gt;
| 506 || [14.0.0+] EnableAppletToGetPadInput&lt;br /&gt;
|-&lt;br /&gt;
| 507 || [14.0.0+] EnableAppletToGetTouchScreen&lt;br /&gt;
|-&lt;br /&gt;
| 510 || [[#SetVibrationMasterVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 511 || GetVibrationMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 512 || [3.0.0+] BeginPermitVibrationSession&lt;br /&gt;
|-&lt;br /&gt;
| 513 || [3.0.0+] EndPermitVibrationSession&lt;br /&gt;
|-&lt;br /&gt;
| 514 || [12.0.0+] SendVibrationNotificationPattern&lt;br /&gt;
|-&lt;br /&gt;
| 520 || EnableHandheldHids&lt;br /&gt;
|-&lt;br /&gt;
| 521 || DisableHandheldHids&lt;br /&gt;
|-&lt;br /&gt;
| 522 || [9.0.0+] SetJoyConRailEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 523 || [9.0.0+] IsJoyConRailEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 524 || [10.0.0+] IsHandheldHidsEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 525 || [11.0.0+] IsJoyConAttachedOnAllRail&lt;br /&gt;
|-&lt;br /&gt;
| 540 || AcquirePlayReportControllerUsageUpdateEvent&lt;br /&gt;
|-&lt;br /&gt;
| 541 || GetPlayReportControllerUsages&lt;br /&gt;
|-&lt;br /&gt;
| 542 || AcquirePlayReportRegisteredDeviceUpdateEvent&lt;br /&gt;
|-&lt;br /&gt;
| 543 || GetRegisteredDevicesOld ([1.0.0-4.1.0] GetRegisteredDevices)&lt;br /&gt;
|-&lt;br /&gt;
| 544 || [3.0.0+] AcquireConnectionTriggerTimeoutEvent&lt;br /&gt;
|-&lt;br /&gt;
| 545 || [3.0.0+] SendConnectionTrigger&lt;br /&gt;
|-&lt;br /&gt;
| 546 || [3.0.0+] AcquireDeviceRegisteredEventForControllerSupport&lt;br /&gt;
|-&lt;br /&gt;
| 547 || [3.0.0+] GetAllowedBluetoothLinksCount&lt;br /&gt;
|-&lt;br /&gt;
| 548 || [5.0.0+] GetRegisteredDevices&lt;br /&gt;
|-&lt;br /&gt;
| 549 || [6.0.0+] GetConnectableRegisteredDevices&lt;br /&gt;
|-&lt;br /&gt;
| 700 || ActivateUniquePad&lt;br /&gt;
|-&lt;br /&gt;
| 702 || AcquireUniquePadConnectionEventHandle&lt;br /&gt;
|-&lt;br /&gt;
| 703 || [[#GetUniquePadIds]]&lt;br /&gt;
|-&lt;br /&gt;
| 751 || AcquireJoyDetachOnBluetoothOffEventHandle&lt;br /&gt;
|-&lt;br /&gt;
| 800 || ListSixAxisSensorHandles&lt;br /&gt;
|-&lt;br /&gt;
| 801 || IsSixAxisSensorUserCalibrationSupported&lt;br /&gt;
|-&lt;br /&gt;
| 802 || ResetSixAxisSensorCalibrationValues&lt;br /&gt;
|-&lt;br /&gt;
| 803 || StartSixAxisSensorUserCalibration&lt;br /&gt;
|-&lt;br /&gt;
| 804 || CancelSixAxisSensorUserCalibration&lt;br /&gt;
|-&lt;br /&gt;
| 805 || [3.0.0+] GetUniquePadBluetoothAddress&lt;br /&gt;
|-&lt;br /&gt;
| 806 || [3.0.0+] DisconnectUniquePad&lt;br /&gt;
|-&lt;br /&gt;
| 807 || [5.0.0+] [[#GetUniquePadType]]&lt;br /&gt;
|-&lt;br /&gt;
| 808 || [5.0.0+] GetUniquePadInterface&lt;br /&gt;
|-&lt;br /&gt;
| 809 || [5.0.0+] [[#GetUniquePadSerialNumber]]&lt;br /&gt;
|-&lt;br /&gt;
| 810 || [5.0.0+] GetUniquePadControllerNumber&lt;br /&gt;
|-&lt;br /&gt;
| 811 || [5.0.0+] GetSixAxisSensorUserCalibrationStage&lt;br /&gt;
|-&lt;br /&gt;
| 812 || [8.0.0+] GetConsoleUniqueSixAxisSensorHandle&lt;br /&gt;
|-&lt;br /&gt;
| 821 || StartAnalogStickManualCalibration&lt;br /&gt;
|-&lt;br /&gt;
| 822 || RetryCurrentAnalogStickManualCalibrationStage&lt;br /&gt;
|-&lt;br /&gt;
| 823 || CancelAnalogStickManualCalibration&lt;br /&gt;
|-&lt;br /&gt;
| 824 || ResetAnalogStickManualCalibration&lt;br /&gt;
|-&lt;br /&gt;
| 825 || [5.0.0+] GetAnalogStickState&lt;br /&gt;
|-&lt;br /&gt;
| 826 || [5.0.0+] GetAnalogStickManualCalibrationStage&lt;br /&gt;
|-&lt;br /&gt;
| 827 || [5.0.0+] IsAnalogStickButtonPressed&lt;br /&gt;
|-&lt;br /&gt;
| 828 || [5.0.0+] IsAnalogStickInReleasePosition&lt;br /&gt;
|-&lt;br /&gt;
| 829 || [5.0.0+] IsAnalogStickInCircumference&lt;br /&gt;
|-&lt;br /&gt;
| 830 || [7.0.0+] [[#SetNotificationLedPattern]]&lt;br /&gt;
|-&lt;br /&gt;
| 831 || [9.0.0+] [[#SetNotificationLedPatternWithTimeout]]&lt;br /&gt;
|-&lt;br /&gt;
| 832 || [9.0.0+] [[#PrepareHidsForNotificationWake]]&lt;br /&gt;
|-&lt;br /&gt;
| 850 || [3.0.0+] [[#IsUsbFullKeyControllerEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 851 || [3.0.0+] [[#EnableUsbFullKeyController]]&lt;br /&gt;
|-&lt;br /&gt;
| 852 || [3.0.0+] [[#IsUsbConnected]]&lt;br /&gt;
|-&lt;br /&gt;
| 870 || [5.1.0+] IsHandheldButtonPressedOnConsoleMode&lt;br /&gt;
|-&lt;br /&gt;
| 900 || [1.0.0-9.2.0] ActivateInputDetector&lt;br /&gt;
|-&lt;br /&gt;
| 901 || [1.0.0-9.2.0] [[#NotifyInputDetector]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [3.0.0+] InitializeFirmwareUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [3.0.0+] GetFirmwareVersion&lt;br /&gt;
|-&lt;br /&gt;
| 1002 || [3.0.0+] GetAvailableFirmwareVersion&lt;br /&gt;
|-&lt;br /&gt;
| 1003 || [3.0.0+] IsFirmwareUpdateAvailable&lt;br /&gt;
|-&lt;br /&gt;
| 1004 || [3.0.0+] CheckFirmwareUpdateRequired&lt;br /&gt;
|-&lt;br /&gt;
| 1005 || [3.0.0+] StartFirmwareUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 1006 || [3.0.0+] AbortFirmwareUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 1007 || [3.0.0+] GetFirmwareUpdateState&lt;br /&gt;
|-&lt;br /&gt;
| 1008 || [4.0.0+] ActivateAudioControl&lt;br /&gt;
|-&lt;br /&gt;
| 1009 || [4.0.0+] AcquireAudioControlEventHandle&lt;br /&gt;
|-&lt;br /&gt;
| 1010 || [4.0.0+] GetAudioControlStates&lt;br /&gt;
|-&lt;br /&gt;
| 1011 || [4.0.0+] DeactivateAudioControl&lt;br /&gt;
|-&lt;br /&gt;
| 1050 || [5.0.0+] IsSixAxisSensorAccurateUserCalibrationSupported&lt;br /&gt;
|-&lt;br /&gt;
| 1051 || [5.0.0+] StartSixAxisSensorAccurateUserCalibration&lt;br /&gt;
|-&lt;br /&gt;
| 1052 || [5.0.0+] CancelSixAxisSensorAccurateUserCalibration&lt;br /&gt;
|-&lt;br /&gt;
| 1053 || [5.0.0+] GetSixAxisSensorAccurateUserCalibrationState&lt;br /&gt;
|-&lt;br /&gt;
| 1100 || [5.0.0+] [[#GetHidbusSystemServiceObject]]&lt;br /&gt;
|-&lt;br /&gt;
| 1120 || [6.0.0+] SetFirmwareHotfixUpdateSkipEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 1130 || [6.0.0+] InitializeUsbFirmwareUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 1131 || [6.0.0+] FinalizeUsbFirmwareUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 1132 || [6.0.0+] CheckUsbFirmwareUpdateRequired&lt;br /&gt;
|-&lt;br /&gt;
| 1133 || [6.0.0+] StartUsbFirmwareUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 1134 || [6.0.0+] GetUsbFirmwareUpdateState&lt;br /&gt;
|-&lt;br /&gt;
| 1150 || [8.0.0+] SetTouchScreenMagnification&lt;br /&gt;
|-&lt;br /&gt;
| 1151 || [9.0.0+] GetTouchScreenFirmwareVersion&lt;br /&gt;
|-&lt;br /&gt;
| 1152 || [9.0.0+] SetTouchScreenDefaultConfiguration&lt;br /&gt;
|-&lt;br /&gt;
| 1153 || [9.0.0+] GetTouchScreenDefaultConfiguration&lt;br /&gt;
|-&lt;br /&gt;
| 1154 || [9.0.0+] [[#IsFirmwareAvailableForNotification]]&lt;br /&gt;
|-&lt;br /&gt;
| 1155 || [9.0.0+] SetForceHandheldStyleVibration&lt;br /&gt;
|-&lt;br /&gt;
| 1156 || [9.0.0+] SendConnectionTriggerWithoutTimeoutEvent&lt;br /&gt;
|-&lt;br /&gt;
| 1157 || [10.0.0+] [[#CancelConnectionTrigger]]&lt;br /&gt;
|-&lt;br /&gt;
| 1200 || [10.0.0+] [[#IsButtonConfigSupported]]&lt;br /&gt;
|-&lt;br /&gt;
| 1201 || [11.0.0+] [[#IsButtonConfigEmbeddedSupported]] ([10.0.0-10.2.0] [[#DeleteButtonConfig]])&lt;br /&gt;
|-&lt;br /&gt;
| 1202 || [11.0.0+] [[#DeleteButtonConfig]] ([10.0.0-10.2.0] [[#SetButtonConfigEnabled]])&lt;br /&gt;
|-&lt;br /&gt;
| 1203 || [11.0.0+] [[#DeleteButtonConfigEmbedded]] ([10.0.0-10.2.0] [[#IsButtonConfigEnabled]])&lt;br /&gt;
|-&lt;br /&gt;
| 1204 || [11.0.0+] [[#SetButtonConfigEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigEmbedded]])&lt;br /&gt;
|-&lt;br /&gt;
| 1205 || [11.0.0+] [[#SetButtonConfigEmbeddedEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigFull]])&lt;br /&gt;
|-&lt;br /&gt;
| 1206 || [11.0.0+] [[#IsButtonConfigEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigLeft]])&lt;br /&gt;
|-&lt;br /&gt;
| 1207 || [11.0.0+] [[#IsButtonConfigEmbeddedEnabled]] ([10.0.0-10.2.0] [[#SetButtonConfigRight]])&lt;br /&gt;
|-&lt;br /&gt;
| 1208 || [11.0.0+] [[#SetButtonConfigEmbedded]] ([10.0.0-10.2.0] [[#GetButtonConfigEmbedded]])&lt;br /&gt;
|-&lt;br /&gt;
| 1209 || [11.0.0+] [[#SetButtonConfigFull]] ([10.0.0-10.2.0] [[#GetButtonConfigFull]])&lt;br /&gt;
|-&lt;br /&gt;
| 1210 || [10.0.0-10.2.0] [[#GetButtonConfigLeft]]&lt;br /&gt;
|-&lt;br /&gt;
| 1211 || [11.0.0+] [[#SetButtonConfigRight]] ([10.0.0-10.2.0] [[#GetButtonConfigRight]])&lt;br /&gt;
|-&lt;br /&gt;
| 1212 || [11.0.0+] [[#GetButtonConfigEmbedded]]&lt;br /&gt;
|-&lt;br /&gt;
| 1213 || [11.0.0+] [[#GetButtonConfigFull]]&lt;br /&gt;
|-&lt;br /&gt;
| 1214 || [11.0.0+] [[#GetButtonConfigLeft]]&lt;br /&gt;
|-&lt;br /&gt;
| 1215 || [11.0.0+] [[#GetButtonConfigRight]]&lt;br /&gt;
|-&lt;br /&gt;
| 1250 || [10.0.0+] [[#IsCustomButtonConfigSupported]]&lt;br /&gt;
|-&lt;br /&gt;
| 1251 || [10.0.0+] [[#IsDefaultButtonConfigEmbedded]]&lt;br /&gt;
|-&lt;br /&gt;
| 1252 || [10.0.0+] [[#IsDefaultButtonConfigFull]]&lt;br /&gt;
|-&lt;br /&gt;
| 1253 || [10.0.0+] [[#IsDefaultButtonConfigLeft]]&lt;br /&gt;
|-&lt;br /&gt;
| 1254 || [10.0.0+] [[#IsDefaultButtonConfigRight]]&lt;br /&gt;
|-&lt;br /&gt;
| 1255 || [10.0.0+] [[#IsButtonConfigStorageEmbeddedEmpty]]&lt;br /&gt;
|-&lt;br /&gt;
| 1256 || [10.0.0+] [[#IsButtonConfigStorageFullEmpty]]&lt;br /&gt;
|-&lt;br /&gt;
| 1257 || [10.0.0+] [[#IsButtonConfigStorageLeftEmpty]]&lt;br /&gt;
|-&lt;br /&gt;
| 1258 || [10.0.0+] [[#IsButtonConfigStorageRightEmpty]]&lt;br /&gt;
|-&lt;br /&gt;
| 1259 || [11.0.0-12.1.0] [[#GetButtonConfigStorageEmbeddedDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageEmbeddedDeprecated|GetButtonConfigStorageEmbedded]])&lt;br /&gt;
|-&lt;br /&gt;
| 1260 || [11.0.0-12.1.0] [[#GetButtonConfigStorageFullDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageFullDeprecated|GetButtonConfigStorageFull]])&lt;br /&gt;
|-&lt;br /&gt;
| 1261 || [11.0.0-12.1.0] [[#GetButtonConfigStorageLeftDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageLeftDeprecated|GetButtonConfigStorageLeft]])&lt;br /&gt;
|-&lt;br /&gt;
| 1262 || [11.0.0-12.1.0] [[#GetButtonConfigStorageRightDeprecated]] ([10.0.0-10.2.0] [[#GetButtonConfigStorageRightDeprecated|GetButtonConfigStorageRight]])&lt;br /&gt;
|-&lt;br /&gt;
| 1263 || [11.0.0-12.1.0] [[#SetButtonConfigStorageEmbeddedDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageEmbeddedDeprecated|SetButtonConfigStorageEmbedded]])&lt;br /&gt;
|-&lt;br /&gt;
| 1264 || [11.0.0-12.1.0] [[#SetButtonConfigStorageFullDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageFullDeprecated|SetButtonConfigStorageFull]])&lt;br /&gt;
|-&lt;br /&gt;
| 1265 || [11.0.0-12.1.0] [[#SetButtonConfigStorageLeftDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageLeftDeprecated|SetButtonConfigStorageLeft]])&lt;br /&gt;
|-&lt;br /&gt;
| 1266 || [11.0.0-12.1.0] [[#SetButtonConfigStorageRightDeprecated]] ([10.0.0-10.2.0] [[#SetButtonConfigStorageRightDeprecated|SetButtonConfigStorageRight]])&lt;br /&gt;
|-&lt;br /&gt;
| 1267 || [10.0.0+] [[#DeleteButtonConfigStorageEmbedded]]&lt;br /&gt;
|-&lt;br /&gt;
| 1268 || [10.0.0+] [[#DeleteButtonConfigStorageFull]]&lt;br /&gt;
|-&lt;br /&gt;
| 1269 || [10.0.0+] [[#DeleteButtonConfigStorageLeft]]&lt;br /&gt;
|-&lt;br /&gt;
| 1270 || [10.0.0+] [[#DeleteButtonConfigStorageRight]]&lt;br /&gt;
|-&lt;br /&gt;
| 1271 || [10.0.0+] [[#IsUsingCustomButtonConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 1272 || [10.0.0+] [[#IsAnyCustomButtonConfigEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 1273 || [10.0.0+] [[#SetAllCustomButtonConfigEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 1274 || [10.0.0+] [[#SetDefaultButtonConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 1275 || [10.0.0+] [[#SetAllDefaultButtonConfig]]&lt;br /&gt;
|-&lt;br /&gt;
| 1276 || [10.0.0+] [[#SetHidButtonConfigEmbedded]]&lt;br /&gt;
|-&lt;br /&gt;
| 1277 || [10.0.0+] [[#SetHidButtonConfigFull]]&lt;br /&gt;
|-&lt;br /&gt;
| 1278 || [10.0.0+] [[#SetHidButtonConfigLeft]]&lt;br /&gt;
|-&lt;br /&gt;
| 1279 || [10.0.0+] [[#SetHidButtonConfigRight]]&lt;br /&gt;
|-&lt;br /&gt;
| 1280 || [10.0.0+] [[#GetHidButtonConfigEmbedded]]&lt;br /&gt;
|-&lt;br /&gt;
| 1281 || [10.0.0+] [[#GetHidButtonConfigFull]]&lt;br /&gt;
|-&lt;br /&gt;
| 1282 || [10.0.0+] [[#GetHidButtonConfigLeft]]&lt;br /&gt;
|-&lt;br /&gt;
| 1283 || [10.0.0+] [[#GetHidButtonConfigRight]]&lt;br /&gt;
|-&lt;br /&gt;
| 1284 || [11.0.0+] [[#GetButtonConfigStorageEmbedded]]&lt;br /&gt;
|-&lt;br /&gt;
| 1285 || [11.0.0+] [[#GetButtonConfigStorageFull]]&lt;br /&gt;
|-&lt;br /&gt;
| 1286 || [11.0.0+] [[#GetButtonConfigStorageLeft]]&lt;br /&gt;
|-&lt;br /&gt;
| 1287 || [11.0.0+] [[#GetButtonConfigStorageRight]]&lt;br /&gt;
|-&lt;br /&gt;
| 1288 || [11.0.0+] [[#SetButtonConfigStorageEmbedded]]&lt;br /&gt;
|-&lt;br /&gt;
| 1289 || [11.0.0+] [[#SetButtonConfigStorageFull]]&lt;br /&gt;
|-&lt;br /&gt;
| 1290 || [11.0.0+] [[#SetButtonConfigStorageLeft]]&lt;br /&gt;
|-&lt;br /&gt;
| 1291 || [11.0.0+] [[#SetButtonConfigStorageRight]]&lt;br /&gt;
|-&lt;br /&gt;
| 12010 || [11.0.0+] [[#SetButtonConfigLeft]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SendKeyboardLockKeyEvent ==&lt;br /&gt;
Takes an u32 BitFlagSet [[#KeyboardLockKeyEvent]], no output.&lt;br /&gt;
&lt;br /&gt;
== AcquireHomeButtonEventHandle ==&lt;br /&gt;
Takes a PID, an [[AM_services|AppletResourceUserId]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
The EventClearMode used by sdknso is user-specified. The Event is signaled when [[#HomeButtonState]] is updated.&lt;br /&gt;
&lt;br /&gt;
This is used by [[AM_services|AM]].&lt;br /&gt;
&lt;br /&gt;
== ActivateHomeButton ==&lt;br /&gt;
Takes a PID, an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
Activates the [[#HomeButtonSharedMemoryFormat|HomeButton]] sharedmem.&lt;br /&gt;
&lt;br /&gt;
== AcquireSleepButtonEventHandle ==&lt;br /&gt;
Takes a PID, an [[AM_services|AppletResourceUserId]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
The EventClearMode used by sdknso is user-specified. The Event is signaled when [[#SleepButtonState]] is updated.&lt;br /&gt;
&lt;br /&gt;
This is used by [[AM_services|AM]].&lt;br /&gt;
&lt;br /&gt;
== ActivateSleepButton ==&lt;br /&gt;
Takes a PID, an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
Activates the [[#SleepButtonSharedMemoryFormat|SleepButton]] sharedmem.&lt;br /&gt;
&lt;br /&gt;
== AcquireCaptureButtonEventHandle ==&lt;br /&gt;
Takes a PID, an [[AM_services|AppletResourceUserId]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
The EventClearMode used by sdknso is user-specified. The Event is signaled when [[#CaptureButtonState]] is updated.&lt;br /&gt;
&lt;br /&gt;
This is used by [[AM_services|AM]].&lt;br /&gt;
&lt;br /&gt;
== ActivateCaptureButton ==&lt;br /&gt;
Takes a PID, an [[AM_services|AppletResourceUserId]], no output.&lt;br /&gt;
&lt;br /&gt;
Activates the [[#CaptureButtonSharedMemoryFormat|CaptureButton]] sharedmem.&lt;br /&gt;
&lt;br /&gt;
== GetMaskedSupportedNpadStyleSet ==&lt;br /&gt;
Takes an input u64 AppletResourceUserId, returns an output u32 [[#NpadStyleTag]].&lt;br /&gt;
&lt;br /&gt;
Official sw uses the output from [[Applet_Manager_services|GetAppletResourceUserIdOfCallerApplet]] with this.&lt;br /&gt;
&lt;br /&gt;
== GetUniquePadsFromNpad ==&lt;br /&gt;
Takes an input u32 [[#NpadIdType]], a type-0xA output buffer, and returns an output s64 for total output entries (which is copied to a s32 by official sw).&lt;br /&gt;
&lt;br /&gt;
The output buffer contains an array of [[#UniquePadId]].&lt;br /&gt;
&lt;br /&gt;
== SetVibrationMasterVolume ==&lt;br /&gt;
Takes an input 32bit float.&lt;br /&gt;
&lt;br /&gt;
== GetUniquePadIds ==&lt;br /&gt;
Takes a type-0xA output buffer, and returns an output s64 for total output entries (which is copied to a s32 by official sw).&lt;br /&gt;
&lt;br /&gt;
The output buffer contains an array of [[#UniquePadId]].&lt;br /&gt;
&lt;br /&gt;
== GetUniquePadType ==&lt;br /&gt;
Takes an input [[#UniquePadId]] and returns an output u64 [[#UniquePadType]].&lt;br /&gt;
&lt;br /&gt;
== GetUniquePadSerialNumber ==&lt;br /&gt;
Takes an input [[#UniquePadId]] and returns an output [[#UniquePadSerialNumber]].&lt;br /&gt;
&lt;br /&gt;
== SetNotificationLedPattern ==&lt;br /&gt;
Takes an input [[#NotificationLedPattern]] and an [[#UniquePadId]], no output.&lt;br /&gt;
&lt;br /&gt;
The specified controller must have a HOME button.&lt;br /&gt;
&lt;br /&gt;
This sends subcommand 0x38 to the specified controller, for setting the pattern for the HOME button notification LED. The input structure is converted to the format used by this [https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering/blob/master/bluetooth_hid_subcommands_notes.md#subcommand-0x38-set-home-light subcommand].&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] This runs code similar to [[#SetNotificationLedPatternWithTimeout]], except it passes the following param values to an internal func: flag=1 and TimeSpan=0 (with [[#SetNotificationLedPatternWithTimeout]] these are flag=0 and TimeSpan={input value}).&lt;br /&gt;
&lt;br /&gt;
== SetNotificationLedPatternWithTimeout ==&lt;br /&gt;
Takes an input [[#NotificationLedPattern]], an [[#UniquePadId]], and an s64 TimeSpan, no output.&lt;br /&gt;
&lt;br /&gt;
== PrepareHidsForNotificationWake ==&lt;br /&gt;
Takes a type-0x9 input buffer containing an array of [[#UniquePadId]], no output.&lt;br /&gt;
&lt;br /&gt;
== IsUsbConnected ==&lt;br /&gt;
Tales an input [[#UniquePadId]], returns an output bool.&lt;br /&gt;
&lt;br /&gt;
== NotifyInputDetector ==&lt;br /&gt;
Takes an input u32 bitmask InputSourceId, no output.&lt;br /&gt;
&lt;br /&gt;
This is the only hid:sys command used by USB-sysmodule (with value 0x40).&lt;br /&gt;
&lt;br /&gt;
== GetHidbusSystemServiceObject ==&lt;br /&gt;
No input, returns an [[#IHidbusSystemServer]].&lt;br /&gt;
&lt;br /&gt;
== IsFirmwareAvailableForNotification ==&lt;br /&gt;
Takes a PID, a s32, an [[#UniquePadId]], an [[AM_services|AppletResourceUserId]], returns an output bool.&lt;br /&gt;
&lt;br /&gt;
sdknso uses hard-coded value 1 for the s32.&lt;br /&gt;
&lt;br /&gt;
== CancelConnectionTrigger ==&lt;br /&gt;
Takes an input &amp;quot;nn::bluetooth::Address&amp;quot;, no output.&lt;br /&gt;
&lt;br /&gt;
== IsButtonConfigSupported ==&lt;br /&gt;
Takes an input [[#UniquePadId]], returns an output bool.&lt;br /&gt;
&lt;br /&gt;
[11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], returns an output bool.&lt;br /&gt;
&lt;br /&gt;
== IsButtonConfigEmbeddedSupported ==&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
== DeleteButtonConfig ==&lt;br /&gt;
Takes an input [[#UniquePadId]], no output.&lt;br /&gt;
&lt;br /&gt;
[11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], no output.&lt;br /&gt;
&lt;br /&gt;
== DeleteButtonConfigEmbedded ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== SetButtonConfigEnabled ==&lt;br /&gt;
Takes an input bool, an [[#UniquePadId]], no output.&lt;br /&gt;
&lt;br /&gt;
[11.0.0+] Takes an input bool, an [[Bluetooth_Driver_services#Address|Address]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetButtonConfigEmbeddedEnabled ==&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
== IsButtonConfigEnabled ==&lt;br /&gt;
Takes an input [[#UniquePadId]], returns an output bool.&lt;br /&gt;
&lt;br /&gt;
[11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], returns an output bool.&lt;br /&gt;
&lt;br /&gt;
== IsButtonConfigEmbeddedEnabled ==&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
== SetButtonConfigEmbedded ==&lt;br /&gt;
Takes ([10.0.0-10.2.0] an input [[#UniquePadId]]), a type-0x15 input buffer containing a [[#SystemButtonConfigEmbedded]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetButtonConfigFull ==&lt;br /&gt;
Takes an input [[#UniquePadId]], a type-0x15 input buffer containing a [[#SystemButtonConfigFull]], no output.&lt;br /&gt;
&lt;br /&gt;
[11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], a type-0x15 input buffer containing a [[#SystemButtonConfigFull]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetButtonConfigLeft ==&lt;br /&gt;
Takes an input [[#UniquePadId]], a type-0x15 input buffer containing a [[#SystemButtonConfigLeft]], no output.&lt;br /&gt;
&lt;br /&gt;
[11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], a type-0x15 input buffer containing a [[#SystemButtonConfigLeft]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetButtonConfigRight ==&lt;br /&gt;
Takes an input [[#UniquePadId]], a type-0x15 input buffer containing a [[#SystemButtonConfigRight]], no output.&lt;br /&gt;
&lt;br /&gt;
[11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], a type-0x15 input buffer containing a [[#SystemButtonConfigRight]], no output.&lt;br /&gt;
&lt;br /&gt;
== GetButtonConfigEmbedded ==&lt;br /&gt;
Takes ([10.0.0-10.2.0] an input [[#UniquePadId]]), and a type-0x16 output buffer containing a [[#SystemButtonConfigEmbedded]].&lt;br /&gt;
&lt;br /&gt;
== GetButtonConfigFull ==&lt;br /&gt;
Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#SystemButtonConfigFull]].&lt;br /&gt;
&lt;br /&gt;
[11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], and a type-0x16 output buffer containing a [[#SystemButtonConfigFull]].&lt;br /&gt;
&lt;br /&gt;
== GetButtonConfigLeft ==&lt;br /&gt;
Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#SystemButtonConfigLeft]].&lt;br /&gt;
&lt;br /&gt;
[11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], and a type-0x16 output buffer containing a [[#SystemButtonConfigLeft]].&lt;br /&gt;
&lt;br /&gt;
== GetButtonConfigRight ==&lt;br /&gt;
Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#SystemButtonConfigRight]].&lt;br /&gt;
&lt;br /&gt;
[11.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]], and a type-0x16 output buffer containing a [[#SystemButtonConfigRight]].&lt;br /&gt;
&lt;br /&gt;
== IsCustomButtonConfigSupported ==&lt;br /&gt;
Takes an input [[#UniquePadId]], returns an output bool.&lt;br /&gt;
&lt;br /&gt;
== IsDefaultButtonConfigEmbedded ==&lt;br /&gt;
Takes a type-0x15 input buffer containing a [[#ButtonConfigEmbedded]], returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This compares the input config with config in state, sets the output bool to whether these match, then returns 0.&lt;br /&gt;
&lt;br /&gt;
== IsDefaultButtonConfigFull ==&lt;br /&gt;
Takes a type-0x15 input buffer containing a [[#ButtonConfigFull]], returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This compares the input config with config in state, sets the output bool to whether these match, then returns 0.&lt;br /&gt;
&lt;br /&gt;
== IsDefaultButtonConfigLeft ==&lt;br /&gt;
Takes a type-0x15 input buffer containing a [[#ButtonConfigLeft]], returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This compares the input config with config in state, sets the output bool to whether these match, then returns 0.&lt;br /&gt;
&lt;br /&gt;
== IsDefaultButtonConfigRight ==&lt;br /&gt;
Takes a type-0x15 input buffer containing a [[#ButtonConfigRight]], returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This compares the input config with config in state, sets the output bool to whether these match, then returns 0.&lt;br /&gt;
&lt;br /&gt;
== IsButtonConfigStorageEmbeddedEmpty ==&lt;br /&gt;
Takes an input s32 entry-index, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
[10.1.0-10.2.0] This will now Abort if the s32 is negative or &amp;gt;=5. [11.0.0+] This value must now be unsigned &amp;lt;=4, otherwise 0 is returned.&lt;br /&gt;
&lt;br /&gt;
Uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. Then the output bool is set to [[Settings_services#ButtonConfigSettings|IsFull]] bit0 == 0. Then 0 is returned.&lt;br /&gt;
&lt;br /&gt;
== IsButtonConfigStorageFullEmpty ==&lt;br /&gt;
Takes an input s32 entry-index, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
Same as [[#IsButtonConfigStorageEmbeddedEmpty]] except with a different setsys cmd.&lt;br /&gt;
&lt;br /&gt;
== IsButtonConfigStorageLeftEmpty ==&lt;br /&gt;
Takes an input s32 entry-index, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
Same as [[#IsButtonConfigStorageEmbeddedEmpty]] except with a different setsys cmd.&lt;br /&gt;
&lt;br /&gt;
== IsButtonConfigStorageRightEmpty ==&lt;br /&gt;
Takes an input s32 entry-index, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
Same as [[#IsButtonConfigStorageEmbeddedEmpty]] except with a different setsys cmd.&lt;br /&gt;
&lt;br /&gt;
== GetButtonConfigStorageEmbeddedDeprecated ==&lt;br /&gt;
Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigEmbedded]].&lt;br /&gt;
&lt;br /&gt;
[10.1.0-10.2.0] This will now Abort if the s32 is negative or &amp;gt;=5.&lt;br /&gt;
&lt;br /&gt;
[11.0.0+] This now calls the same func internally as [[#GetButtonConfigStorageEmbedded]], except the [[#StorageName]] isn&#039;t exposed.&lt;br /&gt;
&lt;br /&gt;
Uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. Then an error is thrown if [[Settings_services#ButtonConfigSettings|IsFull]] bit0 is clear. Then the data at +0x1C8 is converted to [[#ButtonConfigEmbedded]], copied to output, and returns 0.&lt;br /&gt;
&lt;br /&gt;
== GetButtonConfigStorageFullDeprecated ==&lt;br /&gt;
Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigFull]].&lt;br /&gt;
&lt;br /&gt;
Same as [[#GetButtonConfigStorageEmbeddedDeprecated]], except this uses a different setsys cmd, and uses a different conversion func / different output struct.&lt;br /&gt;
&lt;br /&gt;
== GetButtonConfigStorageLeftDeprecated ==&lt;br /&gt;
Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigLeft]].&lt;br /&gt;
&lt;br /&gt;
Same as [[#GetButtonConfigStorageEmbeddedDeprecated]], except this uses a different setsys cmd, and uses a different conversion func / different output struct.&lt;br /&gt;
&lt;br /&gt;
== GetButtonConfigStorageRightDeprecated ==&lt;br /&gt;
Takes an input s32 entry-index, and a type-0x16 output buffer containing a [[#ButtonConfigRight]].&lt;br /&gt;
&lt;br /&gt;
Same as [[#GetButtonConfigStorageEmbeddedDeprecated]], except this uses a different setsys cmd, and uses a different conversion func / different output struct.&lt;br /&gt;
&lt;br /&gt;
== SetButtonConfigStorageEmbeddedDeprecated ==&lt;br /&gt;
Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigEmbedded]].&lt;br /&gt;
&lt;br /&gt;
[10.1.0-10.2.0] This will now Abort if the s32 is negative or &amp;gt;=5.&lt;br /&gt;
&lt;br /&gt;
[11.0.0+] This now calls the same func internally as [[#SetButtonConfigStorageEmbedded]], except the [[#StorageName]] isn&#039;t exposed.&lt;br /&gt;
&lt;br /&gt;
If the input config matches the [[#IsDefaultButtonConfigEmbedded|default]], this first does: &lt;br /&gt;
* Uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. When [[Settings_services#ButtonConfigSettings|IsFull]] is set, the config is deleted the same way as [[#DeleteButtonConfigStorageEmbedded]] (following the IsFull check).&lt;br /&gt;
&lt;br /&gt;
Afterwards, this uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. The input struct is converted, the output from that is copied to +0x1C8 size 0x3E0, IsFull is set, [[Settings_services#SetButtonConfigSettingsEmbedded|SetButtonConfigSettingsEmbedded]] is used with the updated array, and then returns 0.&lt;br /&gt;
&lt;br /&gt;
== SetButtonConfigStorageFullDeprecated ==&lt;br /&gt;
Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigFull]].&lt;br /&gt;
&lt;br /&gt;
Same as [[#SetButtonConfigStorageEmbeddedDeprecated]], except this uses different setsys cmds, and uses a different structs etc.&lt;br /&gt;
&lt;br /&gt;
== SetButtonConfigStorageLeftDeprecated ==&lt;br /&gt;
Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigLeft]].&lt;br /&gt;
&lt;br /&gt;
Same as [[#SetButtonConfigStorageEmbeddedDeprecated]], except this uses different setsys cmds, and uses a different structs etc.&lt;br /&gt;
&lt;br /&gt;
== SetButtonConfigStorageRightDeprecated ==&lt;br /&gt;
Takes an input s32 entry-index, and a type-0x15 input buffer containing a [[#ButtonConfigRight]].&lt;br /&gt;
&lt;br /&gt;
Same as [[#SetButtonConfigStorageEmbeddedDeprecated]], except this uses different setsys cmds, and uses a different structs etc.&lt;br /&gt;
&lt;br /&gt;
== DeleteButtonConfigStorageEmbedded ==&lt;br /&gt;
Takes an input s32 entry-index, no output.&lt;br /&gt;
&lt;br /&gt;
[10.1.0-10.2.0] This will now Abort if the s32 is negative or &amp;gt;=5. [11.0.0+] When the input s32 is larger than unsigned value 4, an error is returned.&lt;br /&gt;
&lt;br /&gt;
Uses [[Settings_services#GetButtonConfigSettingsEmbedded|GetButtonConfigSettingsEmbedded]] with count=5 (output s32 ignored). The input entry-index is used with this array. Then an error is thrown if [[Settings_services#ButtonConfigSettings|IsFull]] bit0 is clear. Then the data at +0x1C8 size 0x3E0 is cleared, IsFull bit0 is cleared, [[Settings_services#SetButtonConfigSettingsEmbedded|SetButtonConfigSettingsEmbedded]] is used with the updated array, and then returns 0.&lt;br /&gt;
&lt;br /&gt;
== DeleteButtonConfigStorageFull ==&lt;br /&gt;
Takes an input s32 entry-index, no output.&lt;br /&gt;
&lt;br /&gt;
Same as [[#DeleteButtonConfigStorageEmbedded]] except with different setsys cmds.&lt;br /&gt;
&lt;br /&gt;
== DeleteButtonConfigStorageLeft ==&lt;br /&gt;
Takes an input s32 entry-index, no output.&lt;br /&gt;
&lt;br /&gt;
Same as [[#DeleteButtonConfigStorageEmbedded]] except with different setsys cmds.&lt;br /&gt;
&lt;br /&gt;
== DeleteButtonConfigStorageRight ==&lt;br /&gt;
Takes an input s32 entry-index, no output.&lt;br /&gt;
&lt;br /&gt;
Same as [[#DeleteButtonConfigStorageEmbedded]] except with different setsys cmds.&lt;br /&gt;
&lt;br /&gt;
== IsUsingCustomButtonConfig ==&lt;br /&gt;
Takes an input [[#UniquePadId]], returns an output bool.&lt;br /&gt;
&lt;br /&gt;
== IsAnyCustomButtonConfigEnabled ==&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
== SetAllCustomButtonConfigEnabled ==&lt;br /&gt;
Takes an input bool and an AppletResourceUserId, no output.&lt;br /&gt;
&lt;br /&gt;
== SetDefaultButtonConfig ==&lt;br /&gt;
Takes an input [[#UniquePadId]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetAllDefaultButtonConfig ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== SetHidButtonConfigEmbedded ==&lt;br /&gt;
Takes an input [[#UniquePadId]] and a type-0x15 input buffer containing a [[#ButtonConfigEmbedded]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetHidButtonConfigFull ==&lt;br /&gt;
Takes an input [[#UniquePadId]] and a type-0x15 input buffer containing a [[#ButtonConfigFull]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetHidButtonConfigLeft ==&lt;br /&gt;
Takes an input [[#UniquePadId]] and a type-0x15 input buffer containing a [[#ButtonConfigLeft]], no output.&lt;br /&gt;
&lt;br /&gt;
== SetHidButtonConfigRight ==&lt;br /&gt;
Takes an input [[#UniquePadId]] and a type-0x15 input buffer containing a [[#ButtonConfigRight]], no output.&lt;br /&gt;
&lt;br /&gt;
== GetHidButtonConfigEmbedded ==&lt;br /&gt;
Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#ButtonConfigEmbedded]].&lt;br /&gt;
&lt;br /&gt;
== GetHidButtonConfigFull ==&lt;br /&gt;
Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#ButtonConfigFull]].&lt;br /&gt;
&lt;br /&gt;
== GetHidButtonConfigLeft ==&lt;br /&gt;
Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#ButtonConfigLeft]].&lt;br /&gt;
&lt;br /&gt;
== GetHidButtonConfigRight ==&lt;br /&gt;
Takes an input [[#UniquePadId]], and a type-0x16 output buffer containing a [[#ButtonConfigRight]].&lt;br /&gt;
&lt;br /&gt;
== GetButtonConfigStorageEmbedded ==&lt;br /&gt;
Takes an input s32, a type-0x16 output buffer containing a [[#ButtonConfigEmbedded]], a type-0x1A output buffer containing a [[#StorageName]].&lt;br /&gt;
&lt;br /&gt;
When the input s32 is larger than unsigned value 4, an error is returned.&lt;br /&gt;
&lt;br /&gt;
== GetButtonConfigStorageFull ==&lt;br /&gt;
Takes an input s32, a type-0x16 output buffer containing a [[#ButtonConfigFull]], a type-0x1A output buffer containing a [[#StorageName]].&lt;br /&gt;
&lt;br /&gt;
== GetButtonConfigStorageLeft ==&lt;br /&gt;
Takes an input s32, a type-0x16 output buffer containing a [[#ButtonConfigLeft]], a type-0x1A output buffer containing a [[#StorageName]].&lt;br /&gt;
&lt;br /&gt;
== GetButtonConfigStorageRight ==&lt;br /&gt;
Takes an input s32, a type-0x16 output buffer containing a [[#ButtonConfigRight]], a type-0x1A output buffer containing a [[#StorageName]].&lt;br /&gt;
&lt;br /&gt;
== SetButtonConfigStorageEmbedded ==&lt;br /&gt;
Takes an input s32, a type-0x15 input buffer containing a [[#ButtonConfigEmbedded]], a type-0x19 input buffer containing a [[#StorageName]].&lt;br /&gt;
&lt;br /&gt;
When the input s32 is larger than unsigned value 4, this will immediately return (this cmd always returns 0 regardless).&lt;br /&gt;
&lt;br /&gt;
== SetButtonConfigStorageFull ==&lt;br /&gt;
Takes an input s32, a type-0x15 input buffer containing a [[#ButtonConfigFull]], a type-0x19 input buffer containing a [[#StorageName]].&lt;br /&gt;
&lt;br /&gt;
== SetButtonConfigStorageLeft ==&lt;br /&gt;
Takes an input s32, a type-0x15 input buffer containing a [[#ButtonConfigLeft]], a type-0x19 input buffer containing a [[#StorageName]].&lt;br /&gt;
&lt;br /&gt;
== SetButtonConfigStorageRight ==&lt;br /&gt;
Takes an input s32, a type-0x15 input buffer containing a [[#ButtonConfigRight]], a type-0x19 input buffer containing a [[#StorageName]].&lt;br /&gt;
&lt;br /&gt;
== IHidbusSystemServer ==&lt;br /&gt;
This is &amp;quot;nn::hidbus::IHidbusSystemServer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [5.0.0+].&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;
| 500 || SetAppletResourceUserId&lt;br /&gt;
|-&lt;br /&gt;
| 501 || RegisterAppletResourceUserId&lt;br /&gt;
|-&lt;br /&gt;
| 502 || UnregisterAppletResourceUserId&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= hid:tmp =&lt;br /&gt;
This is &amp;quot;nn::hid::IHidTemporaryServer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This service was added with [3.0.0+], then removed with [8.0.0+].&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 || GetConsoleSixAxisSensorCalibrationValues&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= irs =&lt;br /&gt;
This is &amp;quot;nn::irsensor::IIrSensorServer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added to sdknso with 3.x.&lt;br /&gt;
&lt;br /&gt;
With sdknso versions pre-4.x PointingProcessor used to be DpdProcessor. The [[#PackedPointingProcessorConfig|packed-config]] with DpdProcessor (besides RequiredMcuVersion) used to be initialized from user-specified config, now it&#039;s hard-coded.&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;
| 302 || [[#ActivateIrsensor]]&lt;br /&gt;
|-&lt;br /&gt;
| 303 || [[#DeactivateIrsensor]]&lt;br /&gt;
|-&lt;br /&gt;
| 304 || [[#GetIrsensorSharedMemoryHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 305 || [[#StopImageProcessor]]&lt;br /&gt;
|-&lt;br /&gt;
| 306 || [[#RunMomentProcessor]]&lt;br /&gt;
|-&lt;br /&gt;
| 307 || [[#RunClusteringProcessor]]&lt;br /&gt;
|-&lt;br /&gt;
| 308 || [[#RunImageTransferProcessor]]&lt;br /&gt;
|-&lt;br /&gt;
| 309 || [[#GetImageTransferProcessorState]]&lt;br /&gt;
|-&lt;br /&gt;
| 310 || [[#RunTeraPluginProcessor]]&lt;br /&gt;
|-&lt;br /&gt;
| 311 || [[#GetNpadIrCameraHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 312 || [[#RunPointingProcessor]]&lt;br /&gt;
|-&lt;br /&gt;
| 313 || [[#SuspendImageProcessor]]&lt;br /&gt;
|-&lt;br /&gt;
| 314 || [3.0.0+] [[#CheckFirmwareVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 315 || [4.0.0+] [[#SetFunctionLevel]]&lt;br /&gt;
|-&lt;br /&gt;
| 316 || [4.0.0+] [[#RunImageTransferExProcessor]]&lt;br /&gt;
|-&lt;br /&gt;
| 317 || [4.0.0+] [[#RunIrLedProcessor]]&lt;br /&gt;
|-&lt;br /&gt;
| 318 || [4.0.0+] [[#StopImageProcessorAsync]]&lt;br /&gt;
|-&lt;br /&gt;
| 319 || [4.0.0+] [[#ActivateIrsensorWithFunctionLevel]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ActivateIrsensor ==&lt;br /&gt;
Takes a PID-descriptor and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
== DeactivateIrsensor ==&lt;br /&gt;
Takes a PID-descriptor and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
== GetIrsensorSharedMemoryHandle ==&lt;br /&gt;
Takes a PID-descriptor and an [[AM_services|AppletResourceUserId]]. Returns a SharedMemory handle.&lt;br /&gt;
&lt;br /&gt;
The SharedMemory is &amp;quot;nn::irsensor::detail::StatusManager&amp;quot;. It&#039;s mapped with permission read-only and size 0x8000.&lt;br /&gt;
&lt;br /&gt;
It&#039;s structure is as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x7FB0 || Array of [[#DeviceFormat]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x7FB0 || 0x50 || Array of [[#AruidFormat]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The array of [[#DeviceFormat]] is indexed by [[#IrCameraHandle|PlayerNumber]] and can hold up to 9 entries. The array of [[#AruidFormat]] can only hold up to 5 entries.&lt;br /&gt;
&lt;br /&gt;
=== DeviceFormat ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || [[#IrCameraStatus]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || [[#IrCameraInternalStatus]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || [[#IrSensorMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0xE20 || [[#ProcessorStateRingLifo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ProcessorStateRingLifo ====&lt;br /&gt;
This is &amp;quot;nn::irsensor::detail::RingLifo&amp;lt;X,Y&amp;gt;&amp;quot; where &amp;quot;X&amp;quot; is a specialized processor state (e.g.: &amp;quot;nn::irsensor::MomentProcessorState&amp;quot;) and &amp;quot;Y&amp;quot; is the maximum element count (e.g.: 5).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Start&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Count&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Variable || ProcessorState&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The maximum element count is 6 for [[#PointingProcessorMarkerState]] or 5 for any of the other states.&lt;br /&gt;
&lt;br /&gt;
ProcessorState is specialized depending on the value of [[#IrSensorMode]].&lt;br /&gt;
&lt;br /&gt;
===== MomentProcessorState =====&lt;br /&gt;
This is &amp;quot;nn::irsensor::MomentProcessorState&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;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || TimeStamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || AmbientNoiseLevel&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x4 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x240 || Array of [[#MomentStatistic]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The array of [[#MomentStatistic]] can hold up to 48 entries. This array can be accessed as [y + x*8] (this is a 6x8 array). region_x = image_x/6, region_y = image_y/8.&lt;br /&gt;
&lt;br /&gt;
====== MomentStatistic ======&lt;br /&gt;
In sdknso GetMomentProcessorStates, this loops through each MomentProcessorState-&amp;gt;MomentStatistic entry: &amp;lt;code&amp;gt;AverageIntensity *= scale;&amp;lt;/code&amp;gt; The scale is calculated with: &amp;lt;code&amp;gt;scale = 76800.0f / (float)([[#PackedMomentProcessorConfig|WindowOfInterest]].width * [[#PackedMomentProcessorConfig|WindowOfInterest]].height);&amp;lt;/code&amp;gt; Note that &amp;lt;code&amp;gt;76800 == 320*240&amp;lt;/code&amp;gt;, hence with the default width/height the calculated scale is 1.0f.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || float AverageIntensity&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || float CentroidX&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || float CentroidY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== ClusteringProcessorState =====&lt;br /&gt;
This is &amp;quot;nn::irsensor::ClusteringProcessorState&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;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || TimeStamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || ObjectCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x3 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x4 || AmbientNoiseLevel&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x180 || Array of [[#ClusteringData]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The array of [[#ClusteringData]] can hold up to 16 entries.&lt;br /&gt;
&lt;br /&gt;
====== ClusteringData ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || float AverageIntensity&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || float CentroidX&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || float CentroidY&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || PixelCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x2 || BoundX&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x2 || BoundY&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x2 || BoundtWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0x2 || BoundHeight&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== PointingProcessorMarkerState =====&lt;br /&gt;
This is &amp;quot;nn::irsensor::PointingProcessorMarkerState&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;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || TimeStamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || PointingStatus&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x3 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x4 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x4 || float Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || float PositionX&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || float PositionY&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || float Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x2 || WindowOfInterestX&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x2 || WindowOfInterestY&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x2 || WindowOfInterestWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x2 || WindowOfInterestHeight&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x1 || PointingStatus&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x4 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x4 || float Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x4 || float PositionX&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0x4 || float PositionY&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x4 || float Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x2 || WindowOfInterestX&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x2 || WindowOfInterestY&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0x2 || WindowOfInterestWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E || 0x2 || WindowOfInterestHeight&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || 0x1 || PointingStatus&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || 0x3 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || 0x4 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || 0x4 || float Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || 0x4 || float PositionX&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || 0x4 || float PositionY&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || 0x4 || float Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || 0x2 || WindowOfInterestX&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A || 0x2 || WindowOfInterestY&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || 0x2 || WindowOfInterestWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E || 0x2 || WindowOfInterestHeight&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== PointingProcessorState =====&lt;br /&gt;
This is &amp;quot;nn::irsensor::PointingProcessorState&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is created from [[#PointingProcessorMarkerState]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || TimeStamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || PointingStatus&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x4 || float PositionX&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x4 || float PositionY&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== TeraPluginProcessorState =====&lt;br /&gt;
This is &amp;quot;nn::irsensor::TeraPluginProcessorState&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;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || TimeStamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || AmbientNoiseLevel&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x12C || PluginData&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== AdaptiveClusteringProcessorState =====&lt;br /&gt;
This is &amp;quot;nn::irsensor::AdaptiveClusteringProcessorState&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is created from [[#TeraPluginProcessorState]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || TimeStamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || AmbientNoiseLevel&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x4 || AccuracyLevel&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x1 || ObjectCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0x1 || BackgroundIntensity&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0x6 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x200 || Array of [[#AdaptiveClusteringData]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The array of [[#AdaptiveClusteringData]] can hold up to 16 entries.&lt;br /&gt;
&lt;br /&gt;
====== AdaptiveClusteringData ======&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || float CentroidX&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || float CentroidY&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || float Area&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || IsIncomplete&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== HandAnalysisImageState =====&lt;br /&gt;
This is &amp;quot;nn::irsensor::HandAnalysisImageState&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is created from [[#TeraPluginProcessorState]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || AmbientNoiseLevel&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x960 || Image&lt;br /&gt;
|-&lt;br /&gt;
| 0x96C || 0x4 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== HandAnalysisSilhouetteState =====&lt;br /&gt;
This is &amp;quot;nn::irsensor::HandAnalysisSilhouetteState&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is created from [[#TeraPluginProcessorState]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || AmbientNoiseLevel&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x1354 || Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== HandAnalysisSilhouetteStateWithFullFrameShape =====&lt;br /&gt;
This is &amp;quot;nn::irsensor::HandAnalysisSilhouetteStateWithFullFrameShape&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is created from [[#TeraPluginProcessorState]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || AmbientNoiseLevel&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x156C || Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== AruidFormat ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || IrSensorAruid&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || IrSensorAruidStatus&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== StopImageProcessor ==&lt;br /&gt;
Takes a PID-descriptor, an [[#IrCameraHandle]], and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
== RunMomentProcessor ==&lt;br /&gt;
Takes a PID-descriptor, an [[#IrCameraHandle]], an [[AM_services|AppletResourceUserId]], and a [[#PackedMomentProcessorConfig]]. No output.&lt;br /&gt;
&lt;br /&gt;
== RunClusteringProcessor ==&lt;br /&gt;
Takes a PID-descriptor, an [[#IrCameraHandle]], an [[AM_services|AppletResourceUserId]], and a [[#PackedClusteringProcessorConfig]]. No output.&lt;br /&gt;
&lt;br /&gt;
== RunImageTransferProcessor ==&lt;br /&gt;
Takes a PID-descriptor, an [[#IrCameraHandle]], an [[AM_services|AppletResourceUserId]], a [[#PackedImageTransferProcessorConfig]], an u64 for the TransferMemory&#039;s size, and a TransferMemory handle. No output.&lt;br /&gt;
&lt;br /&gt;
The TransferMemory is created with an user specified buffer and permission none.&lt;br /&gt;
&lt;br /&gt;
== GetImageTransferProcessorState ==&lt;br /&gt;
Takes a PID-descriptor, a type-0x6 output buffer, an [[#IrCameraHandle]], and an [[AM_services|AppletResourceUserId]]. Returns an [[#ImageTransferProcessorState]]. No output.&lt;br /&gt;
&lt;br /&gt;
== RunTeraPluginProcessor==&lt;br /&gt;
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedTeraPluginProcessorConfig]] (immediately after the previous word), and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
== GetNpadIrCameraHandle ==&lt;br /&gt;
Takes an input [[#NpadIdType]]. Returns an output [[#IrCameraHandle]].&lt;br /&gt;
&lt;br /&gt;
== RunPointingProcessor ==&lt;br /&gt;
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedPointingProcessorConfig]] (immediately after the previous word), and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
== SuspendImageProcessor ==&lt;br /&gt;
Takes a PID-descriptor, an [[#IrCameraHandle]], and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
sdknso uses this from the Run*Processor funcs to suspend the current Processor when the current [[#PackedFunctionLevel|FunctionLevel]] is &amp;gt;= 0x1, prior to starting another Processor if needed (depending on  what Processor was already active via a state field). Hence, this cmd is only used with [4.0.0+].&lt;br /&gt;
&lt;br /&gt;
== CheckFirmwareVersion ==&lt;br /&gt;
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedMcuVersion]], and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
sdknso didn&#039;t actually use this until 4.x (the RequiredMcuVersion was also updated with that version).&lt;br /&gt;
&lt;br /&gt;
== SetFunctionLevel ==&lt;br /&gt;
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedFunctionLevel]], and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
== RunImageTransferExProcessor ==&lt;br /&gt;
Takes a PID-descriptor, an [[#IrCameraHandle]], an [[AM_services|AppletResourceUserId]], a [[#PackedImageTransferProcessorExConfig]], an u64 for the TransferMemory&#039;s size, and a TransferMemory handle. No output.&lt;br /&gt;
&lt;br /&gt;
The TransferMemory is created with an user specified buffer and permission none.&lt;br /&gt;
&lt;br /&gt;
== RunIrLedProcessor ==&lt;br /&gt;
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedIrLedProcessorConfig]] (immediately after the previous word), and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
== StopImageProcessorAsync ==&lt;br /&gt;
Takes a PID-descriptor, an [[#IrCameraHandle]], and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
== ActivateIrsensorWithFunctionLevel ==&lt;br /&gt;
Takes a PID-descriptor, an [[#PackedFunctionLevel]], and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
= irs:sys =&lt;br /&gt;
This is &amp;quot;nn::irsensor::IIrSensorSystemServer&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;
| 500 || [[#SetAppletResourceUserId]]&lt;br /&gt;
|-&lt;br /&gt;
| 501 || [[#RegisterAppletResourceUserId]]&lt;br /&gt;
|-&lt;br /&gt;
| 502 || [[#UnregisterAppletResourceUserId]]&lt;br /&gt;
|-&lt;br /&gt;
| 503 || [[#EnableAppletToGetInput]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SetAppletResourceUserId ==&lt;br /&gt;
Takes an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
== RegisterAppletResourceUserId ==&lt;br /&gt;
Takes a bool and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
== UnregisterAppletResourceUserId ==&lt;br /&gt;
Takes an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
== EnableAppletToGetInput ==&lt;br /&gt;
Takes a bool and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
= ahid:cd =&lt;br /&gt;
This is &amp;quot;nn::ahid::IServerSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Used for USB HID devices.&lt;br /&gt;
&lt;br /&gt;
This service no longer exists in [9.0.0+].&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 || [[#AcquireDevice]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#ReleaseDevice]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetCtrlSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#GetReadSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [1.0.0-2.3.0] [[#GetWriteSession]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AcquireDevice ==&lt;br /&gt;
Takes an input s32, no output.&lt;br /&gt;
&lt;br /&gt;
== ReleaseDevice ==&lt;br /&gt;
Takes an input s32, no output.&lt;br /&gt;
&lt;br /&gt;
== GetCtrlSession ==&lt;br /&gt;
Takes an input u32, returns an [[#ICtrlSession]].&lt;br /&gt;
&lt;br /&gt;
== GetReadSession ==&lt;br /&gt;
Takes an input u32, returns an [[#IReadSession]].&lt;br /&gt;
&lt;br /&gt;
== GetWriteSession ==&lt;br /&gt;
Takes an input u32, returns an [[#IWriteSession]].&lt;br /&gt;
&lt;br /&gt;
== ICtrlSession ==&lt;br /&gt;
This is &amp;quot;nn::ahid::ICtrlSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This no longer exists in [9.0.0+].&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 || GetString&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetCodeBook&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetReport&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetReport&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetIdle&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetIdle&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetProtocol&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetProtocol&lt;br /&gt;
|-&lt;br /&gt;
| 8 || GetDescriptor&lt;br /&gt;
|-&lt;br /&gt;
| 9 || SetDescriptor&lt;br /&gt;
|-&lt;br /&gt;
| 10 || GetStateChangeEvent&lt;br /&gt;
|-&lt;br /&gt;
| 11 || SignalStateChangeEvent&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [3.0.0+] Write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All of these use USB [[USB_services|CtrlXfer]], except for GetStateChangeEvent and SignalStateChangeEvent, and GetCodeBook which copies 0x4000-bytes from state to output.&lt;br /&gt;
&lt;br /&gt;
== IReadSession ==&lt;br /&gt;
This is &amp;quot;nn::ahid::IReadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This no longer exists in [9.0.0+].&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 || [[#Read]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Read ===&lt;br /&gt;
Uses [[USB_services|PostBufferAsync]] etc with the INPUT endpoint. The size must be &amp;lt;=0x1000. The actual transfer size is returned in an output u64. The data is copied from the tmpbuf to the output buffer using the actual-transfer-size.&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] Now takes a total of 8-bytes of input.&lt;br /&gt;
&lt;br /&gt;
== IWriteSession ==&lt;br /&gt;
This is &amp;quot;nn::ahid::IWriteSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was removed with [3.0.0+].&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 || [[#Write]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Write ===&lt;br /&gt;
This is the inverse of [[#IReadSession]] cmd0. Uses the OUTPUT endpoint with an input buffer.&lt;br /&gt;
&lt;br /&gt;
= ahid:hdr =&lt;br /&gt;
This is &amp;quot;nn::ahid::hdr::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Used internally for USB HID devices.&lt;br /&gt;
&lt;br /&gt;
This service no longer exists in [9.0.0+].&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 || GetDeviceEntries&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDeviceList&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetDeviceParameters&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AttachDevice&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DetachDevice&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [6.0.0+] SetDeviceFilter&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= xcd:sys =&lt;br /&gt;
This is &amp;quot;nn::xcd::detail::ISystemServer&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 || [[#GetDataFormat]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#SetDataFormat]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetMcuState]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#SetMcuState]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#GetMcuVersionForNfc]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#CheckNfcDevicePower]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [5.0.0+] [[#SetMcuStateImmediate]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#SetNfcEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#GetNfcInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || StartNfcDiscovery&lt;br /&gt;
|-&lt;br /&gt;
| 13 || StopNfcDiscovery&lt;br /&gt;
|-&lt;br /&gt;
| 14 || StartNtagRead&lt;br /&gt;
|-&lt;br /&gt;
| 15 || StartNtagWrite&lt;br /&gt;
|-&lt;br /&gt;
| 16 || SendNfcRawData&lt;br /&gt;
|-&lt;br /&gt;
| 17 || RegisterMifareKey&lt;br /&gt;
|-&lt;br /&gt;
| 18 || ClearMifareKey&lt;br /&gt;
|-&lt;br /&gt;
| 19 || StartMifareRead&lt;br /&gt;
|-&lt;br /&gt;
| 20 || StartMifareWrite&lt;br /&gt;
|-&lt;br /&gt;
| 101 || GetAwakeTriggerReasonForLeftRail&lt;br /&gt;
|-&lt;br /&gt;
| 102 || GetAwakeTriggerReasonForRightRail&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [10.0.0+] GetAwakeTriggerBatteryLevelTransitionForLeftRail&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [10.0.0+] GetAwakeTriggerBatteryLevelTransitionForRightRail&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] SetDataFormat, SetMcuState, and ClearMifareKey: now takes a total of 0xC-bytes of input instead of 0x10.&lt;br /&gt;
&lt;br /&gt;
== GetDataFormat ==&lt;br /&gt;
Takes an input 8-byte handle, returns an output u8.&lt;br /&gt;
&lt;br /&gt;
== SetDataFormat ==&lt;br /&gt;
Takes an input u8 and a 8-byte handle (4-byte alignment), no output.&lt;br /&gt;
&lt;br /&gt;
== GetMcuState ==&lt;br /&gt;
Takes an input 8-byte handle, returns an output u8.&lt;br /&gt;
&lt;br /&gt;
== SetMcuState ==&lt;br /&gt;
Takes an input u8 and a 8-byte handle (4-byte alignment), no output.&lt;br /&gt;
&lt;br /&gt;
== GetMcuVersionForNfc ==&lt;br /&gt;
Takes an input 8-byte handle, returns an output 0x20-byte struct.&lt;br /&gt;
&lt;br /&gt;
== CheckNfcDevicePower ==&lt;br /&gt;
Takes an input 8-byte handle, no output.&lt;br /&gt;
&lt;br /&gt;
== SetMcuStateImmediate ==&lt;br /&gt;
Takes an input u8 and a 8-byte handle (4-byte alignment), no output.&lt;br /&gt;
&lt;br /&gt;
== SetNfcEvent ==&lt;br /&gt;
Takes an input 8-byte handle, returns 2 output Event handles.&lt;br /&gt;
&lt;br /&gt;
== GetNfcInfo ==&lt;br /&gt;
Takes an input 8-byte handle and a type-0x1A output buffer.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+]: The buffer type is now 0x32 instead of 0x1A.&lt;br /&gt;
&lt;br /&gt;
This buffer contains a 0x804-byte struct, for the NFC data sent in response to the various other cmds.&lt;br /&gt;
&lt;br /&gt;
= hidbus =&lt;br /&gt;
This is &amp;quot;nn::hidbus::IHidbusServer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [5.0.0+].&lt;br /&gt;
&lt;br /&gt;
Official sw opens a temporary service-session for each func using this, with it being closed once done: no global session is kept open.&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;
| 1 || [[#GetBusHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#IsExternalDeviceConnected]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#EnableExternalDevice]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#GetExternalDeviceId]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#SendCommandAsync]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetSendCommandAsynceResult]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#SetEventForSendCommandAsycResult]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#GetSharedMemoryHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#EnableJoyPollingReceiveMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#DisableJoyPollingReceiveMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [5.0.0-6.2.0] GetPollingData&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [6.0.0+] [[#SetStatusManagerType]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
sdknso doesn&#039;t use the GetPollingData cmd.&lt;br /&gt;
&lt;br /&gt;
== GetBusHandle ==&lt;br /&gt;
Takes an input u32 [[#NpadIdType]], an u64 [[#BusType]] and an u64 [[AM_services|AppletResourceUserId]]. Returns an output bool &#039;&#039;&#039;HasHandle&#039;&#039;&#039; and a [[#BusHandle]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;HasHandle&#039;&#039;&#039; indicates whether the [[#BusHandle]] is valid.&lt;br /&gt;
&lt;br /&gt;
Official sw will assert when [[#BusHandle]] InternalIndex is &amp;gt;=0x11 (&amp;gt;=0x13 with [6.0.0+]). This same check is also done for all funcs using [[#BusHandle]] as input.&lt;br /&gt;
&lt;br /&gt;
This cmd will throw an error when [[#BusType]] is invalid.&lt;br /&gt;
&lt;br /&gt;
== IsExternalDeviceConnected ==&lt;br /&gt;
Takes an input [[#BusHandle]]. Returns an output bool &#039;&#039;&#039;IsAttached&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
This is not used by sdknso.&lt;br /&gt;
&lt;br /&gt;
== Initialize ==&lt;br /&gt;
Takes an input [[#BusHandle]] and an u64 [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
Prior to using this cmd, sdknso handles [[#GetSharedMemoryHandle|sharedmem]] mapping if not done previously.&lt;br /&gt;
&lt;br /&gt;
== Finalize ==&lt;br /&gt;
Takes an input [[#BusHandle]] and an u64 [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
== EnableExternalDevice ==&lt;br /&gt;
Takes an input bool &#039;&#039;&#039;IsEnabled&#039;&#039;&#039;, a [[#BusHandle]], an u64 &#039;&#039;&#039;Version&#039;&#039;&#039; and an u64 [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
sdknso passes value 0x38900050018 (0x3A600050018 with 7.x+) for &#039;&#039;&#039;Version&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IsEnabled&#039;&#039;&#039; indicates whether to enable the device (true = enable, false = disable).  When false, this will use [[#DisableJoyPollingReceiveMode]] if needed.&lt;br /&gt;
&lt;br /&gt;
== GetExternalDeviceId ==&lt;br /&gt;
Takes an input [[#BusHandle]]. Returns an output u32 &#039;&#039;&#039;DeviceId&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== SendCommandAsync ==&lt;br /&gt;
Takes a type-0x21 input buffer and a [[#BusHandle]]. No output.&lt;br /&gt;
&lt;br /&gt;
== GetSendCommandAsynceResult ==&lt;br /&gt;
Takes a type-0x22 output buffer and a [[#BusHandle]]. Returns an output u32 &#039;&#039;&#039;OutSize&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Official sw copies &#039;&#039;&#039;OutSize&#039;&#039;&#039; to an output u64, for the actual output size.&lt;br /&gt;
&lt;br /&gt;
== SetEventForSendCommandAsycResult ==&lt;br /&gt;
Takes an input [[#BusHandle]]. Returns an output Event handle &#039;&#039;&#039;AttachmentDataReceiveEventHandle&#039;&#039;&#039; with EventClearMode=0.&lt;br /&gt;
&lt;br /&gt;
Official sw with SendAndReceive clears this event (6.x+ sdknso), uses [[#SendCommandAsync]], waits on + clears this event, then uses [[#GetSendCommandAsynceResult]].&lt;br /&gt;
&lt;br /&gt;
== GetSharedMemoryHandle ==&lt;br /&gt;
No input. Returns an output SharedMemory handle.&lt;br /&gt;
&lt;br /&gt;
The SharedMemory is mapped with size 0x1000 and permissions=R--.&lt;br /&gt;
&lt;br /&gt;
See also [[#SetStatusManagerType]].&lt;br /&gt;
&lt;br /&gt;
This sharedmem is the StatusManager. This sharedmem contains an array of 0x100-byte (0x80-byte with [[#SetStatusManagerType|[6.0.0+]]]) entries, with entry-count {max [[#GetBusHandle|BusHandles]]}.&lt;br /&gt;
&lt;br /&gt;
sdknso only uses the first 0x10-bytes of these entries, the rest is the ignored. Entry structure:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || IsConnected&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x3 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || IsConnectedResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x1 || IsEnabled. Bool flag indicating whether a device is [[#EnableExternalDevice|enabled]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || 0x1 || IsInFocus. Bool flag indicating whether this entry is valid.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x1 || IsPollingMode. Bool flag indicating whether polling is [[#EnableJoyPollingReceiveMode|enabled]].&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x1 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || [[#JoyPollingMode|PollingMode]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== EnableJoyPollingReceiveMode ==&lt;br /&gt;
Takes a type-0x21 input buffer, a TransferMemory handle, an u32 &#039;&#039;&#039;TransferMemorySize&#039;&#039;&#039;, an u32 [[#JoyPollingMode]] and a [[#BusHandle]]. No output.&lt;br /&gt;
&lt;br /&gt;
The TransferMemory is created with an user-specified output buffer, with permissions=R--.&lt;br /&gt;
&lt;br /&gt;
The content of the TransferMemory depends of the [[#JoyPollingMode]]. This is used by GetJoyPollingReceivedData. Structure of the TransferMemory (DisableSixAxisPollingDataAccessor, EnableSixAxisPollingDataAccessor, JoyButtonOnlyPollingDataAccessor):&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Result.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Padding.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x18 || Initialized sysmodule-side, not used by sdknso.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x8 || Latest entry.&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x8 || Total entries.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The entries specific to the [[#JoyPollingMode]] follow, with 0xA entries total. Each entry starts with an u64 timestamp. Structure for each mode, after the timestamp:&lt;br /&gt;
&lt;br /&gt;
DisableSixAxisPollingDataAccessor:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x26 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x1 || Size of data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x1 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x8 || Timestamp&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
JoyEnableSixAxisPollingDataAccessor:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x1 || Size of data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x8 || Timestamp&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
JoyButtonOnlyPollingDataAccessor:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2C || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x1 || Size of data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x3 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x8 || Timestamp&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DisableJoyPollingReceiveMode ==&lt;br /&gt;
Takes an input [[#BusHandle]]. No output.&lt;br /&gt;
&lt;br /&gt;
== SetStatusManagerType ==&lt;br /&gt;
Takes an input u32 [[#StatusManagerType]]. No output.&lt;br /&gt;
&lt;br /&gt;
This is used by sdknso immediately after mapping [[#GetSharedMemoryHandle|sharedmem]] (before [[#Initialize]]) with hard-coded value 0x2.&lt;br /&gt;
&lt;br /&gt;
= SharedMemoryFormat =&lt;br /&gt;
This is &amp;quot;nn::hid::detail::SharedMemoryFormat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The shared memory is a 0x40000 byte read-only segment of memory shared between applications for input. The segment contains structures for most if not all input methods available to applications.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x400&lt;br /&gt;
| [[#DebugPadSharedMemoryFormat|DebugPad]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x400&lt;br /&gt;
| 0x3000&lt;br /&gt;
| [[#TouchScreenSharedMemoryFormat|TouchScreen]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3400&lt;br /&gt;
| 0x400&lt;br /&gt;
| [[#MouseSharedMemoryFormat|Mouse]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3800&lt;br /&gt;
| 0x400&lt;br /&gt;
| [[#KeyboardSharedMemoryFormat|Keyboard]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C00&lt;br /&gt;
| 0x1000&lt;br /&gt;
| [[#DigitizerSharedMemoryFormat|Digitizer]] ([1.0.0-9.2.0] [[#BasicXpadSharedMemoryFormat|BasicXpad]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C00&lt;br /&gt;
| 0x200&lt;br /&gt;
| [[#HomeButtonSharedMemoryFormat|HomeButton]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E00&lt;br /&gt;
| 0x200&lt;br /&gt;
| [[#SleepButtonSharedMemoryFormat|SleepButton]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x5000&lt;br /&gt;
| 0x200&lt;br /&gt;
| [[#CaptureButtonSharedMemoryFormat|CaptureButton]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x5200&lt;br /&gt;
| 0x800&lt;br /&gt;
| [[#InputDetectorSharedMemoryFormat|InputDetector]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A00&lt;br /&gt;
| 0x4000&lt;br /&gt;
| [1.0.0-4.1.0] [[#UniquePadSharedMemoryFormat|UniquePad]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A00&lt;br /&gt;
| 0x32000&lt;br /&gt;
| [[#NpadSharedMemoryFormat|Npad]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3BA00&lt;br /&gt;
| 0x800&lt;br /&gt;
| [[#GestureSharedMemoryFormat|Gesture]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C200&lt;br /&gt;
| 0x1C&lt;br /&gt;
| [5.0.0+] [[#ConsoleSixAxisSensorSharedMemoryFormat|ConsoleSixAxisSensor]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DebugPadSharedMemoryFormat ==&lt;br /&gt;
This is &amp;quot;nn::hid::detail::DebugPadSharedMemoryFormat&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2C8&lt;br /&gt;
| [[#DebugPadLifo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugPadLifo ===&lt;br /&gt;
This is &amp;quot;nn::hid::detail::DebugPadLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x28 * 17&lt;br /&gt;
| Array of [[#DebugPadStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DebugPadStateAtomicStorage ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::DebugPadStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x20&lt;br /&gt;
| [[#DebugPadState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== DebugPadState =====&lt;br /&gt;
This is &amp;quot;nn::hid::DebugPadState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#DebugPadAttributeSet|Attributes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#DebugPadButtonSet|Buttons]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickR]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickL]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TouchScreenSharedMemoryFormat ==&lt;br /&gt;
This is &amp;quot;nn::hid::detail::TouchScreenSharedMemoryFormat&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2C38&lt;br /&gt;
| [[#TouchScreenLifo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TouchScreenLifo ===&lt;br /&gt;
This is &amp;quot;nn::hid::detail::TouchScreenLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x298 * 17&lt;br /&gt;
| Array of [[#TouchScreenStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TouchScreenStateAtomicStorage ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::TouchScreenStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x290&lt;br /&gt;
| [[#TouchScreenState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== TouchScreenState =====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::TouchScreenState&amp;quot; / &amp;quot;nn::hid::TouchScreenState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| s32 Count&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x28 * 16&lt;br /&gt;
| [[#TouchState|Touches]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MouseSharedMemoryFormat ==&lt;br /&gt;
This is &amp;quot;nn::hid::detail::MouseSharedMemoryFormat&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x350&lt;br /&gt;
| [[#MouseLifo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== MouseLifo ===&lt;br /&gt;
This is &amp;quot;nn::hid::detail::MouseLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x30 * 17	&lt;br /&gt;
| Array of [[#MouseStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== MouseStateAtomicStorage ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::MouseStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x28&lt;br /&gt;
| [[#MouseState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== MouseState =====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::MouseState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| X&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Y&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| DeltaX&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| DeltaY&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| WheelDeltaX&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| WheelDeltaY&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#MouseButtonSet|Buttons]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#MouseAttributeSet|Attributes]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KeyboardSharedMemoryFormat ==&lt;br /&gt;
This is &amp;quot;nn::hid::detail::KeyboardSharedMemoryFormat&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x3D8&lt;br /&gt;
| [[#KeyboardLifo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== KeyboardLifo ===&lt;br /&gt;
This is &amp;quot;nn::hid::detail::KeyboardLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x38 * 17	&lt;br /&gt;
| Array of [[#KeyboardStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== KeyboardStateAtomicStorage ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::KeyboardStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x30&lt;br /&gt;
| [[#KeyboardState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== KeyboardState =====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::KeyboardState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#KeyboardModifierSet|Modifiers]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x20&lt;br /&gt;
| [[#KeyboardKeySet|Keys]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== BasicXpadSharedMemoryFormat ==&lt;br /&gt;
This is &amp;quot;nn::hid::detail::BasicXpadSharedMemoryFormat&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x400 * 4&lt;br /&gt;
| Array of [[#BasicXpadSharedMemoryEntry]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BasicXpadSharedMemoryEntry ===&lt;br /&gt;
This is &amp;quot;nn::hid::detail::BasicXpadSharedMemoryEntry&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x2C8&lt;br /&gt;
| [[#BasicXpadLifo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== BasicXpadLifo ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::BasicXpadLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x28 * 17	&lt;br /&gt;
| Array of [[#BasicXpadStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== BasicXpadStateAtomicStorage =====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::BasicXpadStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x20&lt;br /&gt;
| [[#BasicXpadState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== BasicXpadState ======&lt;br /&gt;
This is &amp;quot;nn::hid::detail::BasicXpadState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#BasicXpadAttributeSet|Attributes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#BasicXpadButtonSet|Buttons]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickR]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DigitizerSharedMemoryFormat ==&lt;br /&gt;
This is &amp;quot;nn::hid::server::DigitizerSharedMemoryFormat&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x680&lt;br /&gt;
| [[#DigitizerLifo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DigitizerLifo ===&lt;br /&gt;
This is &amp;quot;nn::hid::server::DigitizerLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x60 * 17	&lt;br /&gt;
| Array of [[#DigitizerStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DigitizerStateAtomicStorage ====&lt;br /&gt;
This is &amp;quot;nn::hid::server::DigitizerStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x58&lt;br /&gt;
| [[#DigitizerState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== DigitizerState =====&lt;br /&gt;
This is &amp;quot;nn::hid::DigitizerState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#DigitizerAttributeSet|Attributes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#DigitizerButtonSet|Buttons]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x4&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HomeButtonSharedMemoryFormat ==&lt;br /&gt;
This is &amp;quot;nn::hid::detail::HomeButtonSharedMemoryFormat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is used by [[AM_services|AM]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1B8&lt;br /&gt;
| [[#HomeButtonLifo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== HomeButtonLifo ===&lt;br /&gt;
This is &amp;quot;nn::hid::detail::HomeButtonLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x18 * 17&lt;br /&gt;
| Array of [[#HomeButtonStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== HomeButtonStateAtomicStorage ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::HomeButtonStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x10&lt;br /&gt;
| [[#HomeButtonState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== HomeButtonState =====&lt;br /&gt;
This is &amp;quot;nn::hid::system::HomeButtonState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#HomeButtonSet|Buttons]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SleepButtonSharedMemoryFormat ==&lt;br /&gt;
This is &amp;quot;nn::hid::detail::SleepButtonSharedMemoryFormat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is used by [[AM_services|AM]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1B8&lt;br /&gt;
| [[#SleepButtonLifo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SleepButtonLifo ===&lt;br /&gt;
This is &amp;quot;nn::hid::detail::SleepButtonLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x18 * 17&lt;br /&gt;
| Array of [[#SleepButtonStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SleepButtonStateAtomicStorage ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::SleepButtonStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x10&lt;br /&gt;
| [[#SleepButtonState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SleepButtonState =====&lt;br /&gt;
This is &amp;quot;nn::hid::system::SleepButtonState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#SleepButtonSet|Buttons]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CaptureButtonSharedMemoryFormat ==&lt;br /&gt;
This is &amp;quot;nn::hid::detail::CaptureButtonSharedMemoryFormat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is used by [[AM_services|AM]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1B8&lt;br /&gt;
| [[#CaptureButtonLifo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CaptureButtonLifo ===&lt;br /&gt;
This is &amp;quot;nn::hid::detail::CaptureButtonLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x18 * 17&lt;br /&gt;
| Array of [[#CaptureButtonStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CaptureButtonStateAtomicStorage ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::CaptureButtonStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x10&lt;br /&gt;
| [[#CaptureButtonState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== CaptureButtonState =====&lt;br /&gt;
This is &amp;quot;nn::hid::system::CaptureButtonState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#CaptureButtonSet|Buttons]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== InputDetectorSharedMemoryFormat ==&lt;br /&gt;
This is &amp;quot;nn::hid::detail::InputDetectorSharedMemoryFormat&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x80 * 16&lt;br /&gt;
| Array of [[#InputDetectorSharedMemoryEntry]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== InputDetectorSharedMemoryEntry ===&lt;br /&gt;
This is &amp;quot;nn::hid::detail::InputDetectorSharedMemoryEntry&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x50&lt;br /&gt;
| [[#InputDetectorLifo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== InputDetectorLifo ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::InputDetectorLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x18 * 2&lt;br /&gt;
| Array of [[#InputDetectorStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== InputDetectorStateAtomicStorage =====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::InputDetectorStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x10&lt;br /&gt;
| [[#InputDetectorState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== InputDetectorState ======&lt;br /&gt;
This is &amp;quot;nn::hid::detail::InputDetectorState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#InputSourceState|InputSourceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UniquePadSharedMemoryFormat ==&lt;br /&gt;
This is &amp;quot;nn::hid::detail::UniquePadSharedMemoryFormat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] This section has been removed from [[#SharedMemoryFormat]]. [[#UniquePadSharedMemoryFormat]] is now a specialization of [[#NpadSharedMemoryFormat]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x400 * 16&lt;br /&gt;
| Array of [[#UniquePadSharedMemoryEntry]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UniquePadSharedMemoryEntry ==&lt;br /&gt;
This is &amp;quot;nn::hid::detail::UniquePadSharedMemoryEntry&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1E0&lt;br /&gt;
| [[#UniquePadLifo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== UniquePadLifo ===&lt;br /&gt;
This is &amp;quot;nn::hid::detail::UniquePadLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x80&lt;br /&gt;
| [[#UniquePadConfigLifo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x70 * 2&lt;br /&gt;
| Array of [[#AnalogStickCalibrationStateImplLifo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x160&lt;br /&gt;
| 0x40&lt;br /&gt;
| [[#SixAxisSensorUserCalibrationStateLifo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A0&lt;br /&gt;
| 0x40&lt;br /&gt;
| UniquePadConfigMutex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== UniquePadConfigLifo ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::UniquePadConfigLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x30 * 2&lt;br /&gt;
| Array of [[#UniquePadConfigAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== UniquePadConfigAtomicStorage =====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::UniquePadConfigAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x28&lt;br /&gt;
| [[#UniquePadConfig]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== UniquePadConfig ======&lt;br /&gt;
This is &amp;quot;nn::hid::detail::UniquePadConfig&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#UniquePadType|Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#UniquePadInterface|Interface]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x10&lt;br /&gt;
| [[#UniquePadSerialNumber|SerialNumber]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| ControllerNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x1&lt;br /&gt;
| IsActive&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 0x3&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== AnalogStickCalibrationStateImplLifo ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::AnalogStickCalibrationStateImplLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x28 * 2&lt;br /&gt;
| Array of [[#AnalogStickCalibrationStateImplAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== AnalogStickCalibrationStateImplAtomicStorage =====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::AnalogStickCalibrationStateImplAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x20&lt;br /&gt;
| [[#AnalogStickCalibrationStateImpl]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== AnalogStickCalibrationStateImpl ======&lt;br /&gt;
This is &amp;quot;nn::hid::detail::AnalogStickCalibrationStateImpl&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|State]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickCalibrationFlagsSet|Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickManualCalibrationStage|Stage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SixAxisSensorUserCalibrationStateLifo ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::SixAxisSensorUserCalibrationStateLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x20 * 2&lt;br /&gt;
| Array of [[#SixAxisSensorUserCalibrationStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SixAxisSensorUserCalibrationStateAtomicStorage =====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::SixAxisSensorUserCalibrationStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x18&lt;br /&gt;
| [[#SixAxisSensorUserCalibrationState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== SixAxisSensorUserCalibrationState ======&lt;br /&gt;
This is &amp;quot;nn::hid::detail::UniquePadConfig&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SixAxisSensorUserCalibrationFlagsSet|Flags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#SixAxisSensorUserCalibrationStage|Stage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NpadSharedMemoryFormat ==&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadSharedMemoryFormat&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x5000 * 10&lt;br /&gt;
| Array of [[#NpadSharedMemoryEntry]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each entry describes an available controller:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Entry&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 to 7&lt;br /&gt;
| Players 1 to 8&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Handheld Mode&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| Other&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NpadSharedMemoryEntry ==&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadSharedMemoryEntry&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x43F0 ([1.0.0-8.1.0] 0x4410)&lt;br /&gt;
| [[#NpadInternalState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== NpadInternalState ===&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadInternalState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#NpadStyleSet|StyleSet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#NpadJoyAssignmentMode|JoyAssignmentMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xC&lt;br /&gt;
| [[#NpadFullKeyColorState|FullKeyColor]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x14&lt;br /&gt;
| [[#NpadJoyColorState|JoyColor]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x350&lt;br /&gt;
| [[#NpadFullKeyLifo|FullKeyLifo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x378&lt;br /&gt;
| 0x350&lt;br /&gt;
| [[#NpadHandheldLifo|HandheldLifo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C8&lt;br /&gt;
| 0x350&lt;br /&gt;
| [[#NpadJoyDualLifo|JoyDualLifo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xA18&lt;br /&gt;
| 0x350&lt;br /&gt;
| [[#NpadJoyLeftLifo|JoyLeftLifo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD68&lt;br /&gt;
| 0x350&lt;br /&gt;
| [[#NpadJoyRightLifo|JoyRightLifo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10B8&lt;br /&gt;
| 0x350&lt;br /&gt;
| [[#NpadPalmaLifo|PalmaLifo]] ([1.0.0-3.0.2] [[#NpadSystemLifo|SystemLifo]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1408&lt;br /&gt;
| 0x350&lt;br /&gt;
| [[#NpadSystemExtLifo|SystemExtLifo]] ([4.0.0+] also used for NpadSystem)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1758&lt;br /&gt;
| 0x708&lt;br /&gt;
| [[#NpadSixAxisSensorLifo|FullKeySixAxisSensorLifo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E60&lt;br /&gt;
| 0x708&lt;br /&gt;
| [[#NpadSixAxisSensorLifo|HandheldSixAxisSensorLifo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2568&lt;br /&gt;
| 0x708&lt;br /&gt;
| [[#NpadSixAxisSensorLifo|JoyDualLeftSixAxisSensorLifo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C70&lt;br /&gt;
| 0x708&lt;br /&gt;
| [[#NpadSixAxisSensorLifo|JoyDualRightSixAxisSensorLifo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3378&lt;br /&gt;
| 0x708&lt;br /&gt;
| [[#NpadSixAxisSensorLifo|JoyLeftSixAxisSensorLifo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A80&lt;br /&gt;
| 0x708&lt;br /&gt;
| [[#NpadSixAxisSensorLifo|JoyRightSixAxisSensorLifo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4188&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#DeviceType|DeviceType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x418C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x4190&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#NpadSystemProperties|SystemProperties]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4198&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#NpadSystemButtonProperties|SystemButtonProperties]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x419C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#BatteryLevel|BatteryLevelJoyDual]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x41A0&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#BatteryLevel|BatteryLevelJoyLeft]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x41A4&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#BatteryLevel|BatteryLevelJoyRight]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x41A8&lt;br /&gt;
| 0x60&lt;br /&gt;
| [1.0.0-8.1.0] [[#NfcXcdDeviceHandleState|NfcXcdDeviceHandle]] (replaced by [[#GetXcdHandleForNpadWithNfc]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x41A8&lt;br /&gt;
| 0x4&lt;br /&gt;
| [9.0.0+] [[#AppletFooterUiAttribute|AppletFooterUiAttributes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x41AC&lt;br /&gt;
| 0x1&lt;br /&gt;
| [9.0.0+] [[#AppletFooterUiType|AppletFooterUiType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x41AD&lt;br /&gt;
| 0x7B&lt;br /&gt;
| [9.0.0+] Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x4208&lt;br /&gt;
| 0x40&lt;br /&gt;
| [1.0.0-8.1.0] Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x4228 ([1.0.0-8.1.0] 0x4248)&lt;br /&gt;
| 0x1B8&lt;br /&gt;
| [[#NpadGcTriggerLifo|GcTriggerLifo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x43E0 ([1.0.0-8.1.0] 0x4400)&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#NpadLarkType|LarkTypeLAndMain]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x43E4 ([1.0.0-8.1.0] 0x4404)&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#NpadLarkType|LarkTypeR]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x43E8 ([1.0.0-8.1.0] 0x4408)&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#NpadLuciaType|LuciaType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x43EC ([1.0.0-8.1.0] 0x440C)&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#NpadLagerType|LagerType]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NpadFullKeyLifo ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadFullKeyLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x30 * 17&lt;br /&gt;
| Array of [[#NpadFullKeyStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== NpadFullKeyStateAtomicStorage =====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadFullKeyStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x28&lt;br /&gt;
| [[#NpadFullKeyState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== NpadFullKeyState ======&lt;br /&gt;
This is &amp;quot;nn::hid::NpadFullKeyState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#NpadButtonSet|Buttons]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickR]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#NpadAttributesSet|Attributes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NpadHandheldLifo ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadHandheldLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x30 * 17&lt;br /&gt;
| Array of [[#NpadHandheldStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== NpadHandheldStateAtomicStorage =====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadHandheldStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x28&lt;br /&gt;
| [[#NpadHandheldState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== NpadHandheldState ======&lt;br /&gt;
This is &amp;quot;nn::hid::NpadHandheldState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#NpadButtonSet|Buttons]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickR]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#NpadAttributesSet|Attributes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NpadJoyDualLifo ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadJoyDualLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x30 * 17&lt;br /&gt;
| Array of [[#NpadJoyDualStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== NpadJoyDualStateAtomicStorage =====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadJoyDualStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x28&lt;br /&gt;
| [[#NpadJoyDualState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== NpadJoyDualState ======&lt;br /&gt;
This is &amp;quot;nn::hid::NpadJoyDualState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#NpadButtonSet|Buttons]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickR]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#NpadAttributesSet|Attributes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NpadJoyLeftLifo ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadJoyLeftLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x30 * 17&lt;br /&gt;
| Array of [[#NpadJoyLeftStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== NpadJoyLeftStateAtomicStorage =====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadJoyLeftStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x28&lt;br /&gt;
| [[#NpadJoyLeftState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== NpadJoyLeftState ======&lt;br /&gt;
This is &amp;quot;nn::hid::NpadJoyLeftState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#NpadButtonSet|Buttons]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickR]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#NpadAttributesSet|Attributes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NpadJoyRightLifo ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadJoyRightLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x30 * 17&lt;br /&gt;
| Array of [[#NpadJoyRightStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== NpadJoyRightStateAtomicStorage =====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadJoyRightStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x28&lt;br /&gt;
| [[#NpadJoyRightState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== NpadJoyRightState ======&lt;br /&gt;
This is &amp;quot;nn::hid::NpadJoyRightState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#NpadButtonSet|Buttons]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickR]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#NpadAttributesSet|Attributes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NpadPalmaLifo ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadPalmaLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x30 * 17&lt;br /&gt;
| Array of [[#NpadPalmaStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== NpadPalmaStateAtomicStorage =====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadPalmaStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x28&lt;br /&gt;
| [[#NpadPalmaState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== NpadPalmaState ======&lt;br /&gt;
This is &amp;quot;nn::hid::NpadPalmaState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#NpadButtonSet|Buttons]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickR]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#NpadAttributesSet|Attributes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NpadSystemLifo ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadSystemLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x30 * 17&lt;br /&gt;
| Array of [[#NpadSystemStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== NpadSystemStateAtomicStorage =====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadSystemStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x28&lt;br /&gt;
| [[#NpadSystemState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== NpadSystemState ======&lt;br /&gt;
This is &amp;quot;nn::hid::system::NpadSystemState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#NpadButtonSet|Buttons]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickR]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#NpadAttributesSet|Attributes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NpadSystemExtLifo ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadSystemExtLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x30 * 17&lt;br /&gt;
| Array of [[#NpadSystemExtStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== NpadSystemExtStateAtomicStorage =====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadSystemExtStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x28&lt;br /&gt;
| [[#NpadSystemExtState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== NpadSystemExtState ======&lt;br /&gt;
This is &amp;quot;nn::hid::system::NpadSystemExtState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#NpadButtonSet|Buttons]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickR]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#NpadAttributesSet|Attributes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NpadSixAxisSensorLifo ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadSixAxisSensorLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x68 * 17&lt;br /&gt;
| Array of [[#SixAxisSensorStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SixAxisSensorStateAtomicStorage =====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::SixAxisSensorStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x60&lt;br /&gt;
| [[#SixAxisSensorState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== SixAxisSensorState ======&lt;br /&gt;
This is &amp;quot;nn::hid::SixAxisSensorState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| DeltaTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| AccelerationX&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| AccelerationY&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| AccelerationZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| AngularVelocityX&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| AngularVelocityY&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| AngularVelocityZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| AngleX&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| AngleY&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| AngleZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x24&lt;br /&gt;
| [[#DirectionState|Direction]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#SixAxisSensorAttributeSet|Attributes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NfcXcdDeviceHandleState ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NfcXcdDeviceHandleState&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x20 * 2&lt;br /&gt;
| Array of [[#NfcXcdDeviceHandleStateImplAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== NfcXcdDeviceHandleStateImplAtomicStorage =====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NfcXcdDeviceHandleStateImplAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x18&lt;br /&gt;
| [[#NfcXcdDeviceHandleStateImpl]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== NfcXcdDeviceHandleStateImpl ======&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NfcXcdDeviceHandleStateImpl&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#DeviceHandle|Handle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x1&lt;br /&gt;
| IsAvailable&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 0x1&lt;br /&gt;
| IsActivated&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0x6&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== NpadGcTriggerLifo ====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadGcTriggerLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x18 * 17&lt;br /&gt;
| Array of [[#NpadGcTriggerStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== NpadGcTriggerStateAtomicStorage =====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadGcTriggerStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x10&lt;br /&gt;
| [[#NpadGcTriggerState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== NpadGcTriggerState ======&lt;br /&gt;
This is &amp;quot;nn::hid::server::NpadGcTriggerState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| TriggerL&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| TriggerR&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GestureSharedMemoryFormat ==&lt;br /&gt;
This is &amp;quot;nn::hid::detail::GestureSharedMemoryFormat&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x708&lt;br /&gt;
| [[#GestureLifo]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GestureLifo ===&lt;br /&gt;
This is &amp;quot;nn::hid::detail::GestureLifo&amp;quot;. This is a RingLifo object.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| RingLifoVptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| BufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Tail&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x68 * 17&lt;br /&gt;
| Array of [[#GestureDummyStateAtomicStorage]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== GestureDummyStateAtomicStorage =====&lt;br /&gt;
This is &amp;quot;nn::hid::detail::GestureDummyStateAtomicStorage&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x60&lt;br /&gt;
| [[#GestureDummyState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== GestureDummyState ======&lt;br /&gt;
This is &amp;quot;nn::hid::detail::GestureDummyState&amp;quot; / &amp;quot;nn::hid::GestureState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| ContextNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#GestureType|Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#GestureDirection|Direction]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| X&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Y&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| s32 DeltaX&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| s32 DeltaY&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| float VelocityX&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| float VelocityY&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#GestureAttributeSet|Attributes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x4&lt;br /&gt;
| Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x4&lt;br /&gt;
| RotationAngle&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x4&lt;br /&gt;
| s32 PointCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0x8 * 4&lt;br /&gt;
| [[#GesturePoint|Points]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ConsoleSixAxisSensorSharedMemoryFormat ==&lt;br /&gt;
This is &amp;quot;nn::hid::detail::ConsoleSixAxisSensorSharedMemoryFormat&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x1&lt;br /&gt;
| IsSevenSixAxisSensorAtRest&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 0x3&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| VerticalizationError&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0xC&lt;br /&gt;
| GyroBias&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AnalogStickState =&lt;br /&gt;
This is &amp;quot;nn::hid::AnalogStickState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| X&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Y&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= TouchState =&lt;br /&gt;
This is &amp;quot;nn::hid::TouchState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| DeltaTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#TouchAttributeSet|Attributes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| FingerId&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| X&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Y&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| DiameterX&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| DiameterY&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| RotationAngle&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= TouchScreenConfigurationForNx =&lt;br /&gt;
This is &amp;quot;nn::hid::TouchScreenConfigurationForNx&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#TouchScreenModeForNx|Mode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xF&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= TouchScreenModeForNx =&lt;br /&gt;
This is &amp;quot;nn::hid::TouchScreenModeForNx&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || UseSystemSetting&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Finger&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Heat2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= InputSourceState =&lt;br /&gt;
This is &amp;quot;nn::hid::system::InputSourceState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NpadControllerColor =&lt;br /&gt;
This is &amp;quot;nn::hid::NpadControllerColor&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Main&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sub&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NpadFullKeyColorState =&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadFullKeyColorState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ColorAttribute|Attribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#NpadControllerColor|FullKey]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NpadJoyColorState =&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadJoyColorState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ColorAttribute|Attribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#NpadControllerColor|Left]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#NpadControllerColor|Right]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DirectionState =&lt;br /&gt;
This is &amp;quot;nn::hid::DirectionState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| XX&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| XY&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| XZ&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| YX&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| YY&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| YZ&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| ZX&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| ZY&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| ZZ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= GesturePoint =&lt;br /&gt;
This is &amp;quot;nn::hid::GesturePoint&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| X&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Y&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ColorAttribute =&lt;br /&gt;
This is &amp;quot;nn::hid::detail::ColorAttribute&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Ok&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ReadError&lt;br /&gt;
|-&lt;br /&gt;
| 2 || NoController&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DebugPadAttributeSet =&lt;br /&gt;
This is &amp;quot;nn::hid::DebugPadAttributeSet&amp;quot;. This is a BitFlagSet object for [[#DebugPadAttribute]].&lt;br /&gt;
&lt;br /&gt;
= DebugPadAttribute =&lt;br /&gt;
This is &amp;quot;nn::hid::DebugPadAttribute&amp;quot;. This is a 32-bit flag.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| IsConnected&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= TouchAttributeSet =&lt;br /&gt;
This is &amp;quot;nn::hid::TouchAttributeSet&amp;quot;. This is a BitFlagSet object for [[#TouchAttribute]].&lt;br /&gt;
&lt;br /&gt;
= TouchAttribute =&lt;br /&gt;
This is &amp;quot;nn::hid::TouchAttribute&amp;quot;. This is a 32-bit flag.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Start&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| End&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MouseAttributeSet =&lt;br /&gt;
This is &amp;quot;nn::hid::MouseAttributeSet&amp;quot;. This is a BitFlagSet object for [[#MouseAttribute]].&lt;br /&gt;
&lt;br /&gt;
= MouseAttribute =&lt;br /&gt;
This is &amp;quot;nn::hid::MouseAttribute&amp;quot;. This is a 32-bit flag.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Transferable&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| IsConnected&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BasicXpadAttributeSet =&lt;br /&gt;
This is &amp;quot;nn::hid::BasicXpadAttributeSet&amp;quot;. This is a BitFlagSet object for [[#BasicXpadAttribute]].&lt;br /&gt;
&lt;br /&gt;
= NpadAttributesSet =&lt;br /&gt;
This is &amp;quot;nn::hid::NpadAttributesSet&amp;quot;. This is a BitFlagSet object for [[#NpadAttribute]].&lt;br /&gt;
&lt;br /&gt;
= NpadAttribute =&lt;br /&gt;
This is &amp;quot;nn::hid::NpadAttribute&amp;quot;. This is a 32-bit flag.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| IsConnected&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| IsWired&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| IsLeftConnected&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| IsLeftWired&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| IsRightConnected&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| IsRightWired&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SixAxisSensorAttributeSet =&lt;br /&gt;
This is &amp;quot;nn::hid::SixAxisSensorAttributeSet&amp;quot;. This is a BitFlagSet object for [[#SixAxisSensorAttribute]].&lt;br /&gt;
&lt;br /&gt;
= SixAxisSensorAttribute =&lt;br /&gt;
This is &amp;quot;nn::hid::SixAxisSensorAttribute&amp;quot;. This is a 32-bit flag.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| IsConnected&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| IsInterpolated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= GestureAttributeSet =&lt;br /&gt;
This is &amp;quot;nn::hid::GestureAttributeSet&amp;quot;. This is a BitFlagSet object for [[#GestureAttribute]].&lt;br /&gt;
&lt;br /&gt;
= GestureAttribute =&lt;br /&gt;
This is &amp;quot;nn::hid::GestureAttribute&amp;quot;. This is a 32-bit flag.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| IsNewTouch&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| IsDoubleTap&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DebugPadButtonSet =&lt;br /&gt;
This is &amp;quot;nn::hid::DebugPadButtonSet&amp;quot;. This is a BitFlagSet object for [[#DebugPadButton]].&lt;br /&gt;
&lt;br /&gt;
= DebugPadButton =&lt;br /&gt;
This is &amp;quot;nn::hid::DebugPadButton&amp;quot;. This is a 32-bit flag.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| A&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| B&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Y&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| L&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| R&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| ZL&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| ZR&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Start&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| Select&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| Left&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| Up&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Right&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| Down&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MouseButtonSet =&lt;br /&gt;
This is &amp;quot;nn::hid::MouseButtonSet&amp;quot;. This is a BitFlagSet object for [[#MouseButton]].&lt;br /&gt;
&lt;br /&gt;
= MouseButton =&lt;br /&gt;
This is &amp;quot;nn::hid::MouseButton&amp;quot;. This is a 32-bit flag.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Left&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Right&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Middle&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Forward&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Back&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KeyboardModifierSet =&lt;br /&gt;
This is &amp;quot;nn::hid::KeyboardModifierSet&amp;quot;. This is a BitFlagSet object for [[#KeyboardModifier]].&lt;br /&gt;
&lt;br /&gt;
= KeyboardModifier =&lt;br /&gt;
This is &amp;quot;nn::hid::KeyboardModifier&amp;quot;. This is a 32-bit flag.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Control&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Shift&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| LeftAlt&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| RightAlt&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Gui&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| CapsLock&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ScrollLock&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| NumLock&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| Katakana&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Hiragana&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KeyboardKeySet =&lt;br /&gt;
This is &amp;quot;nn::hid::KeyboardKeySet&amp;quot;. This is a BitFlagSet object for [[#KeyboardKey]].&lt;br /&gt;
&lt;br /&gt;
= KeyboardKey =&lt;br /&gt;
This is &amp;quot;nn::hid::KeyboardKey&amp;quot;. This is a 256-bit flag.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| A&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| B&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| D&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| E&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| F&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| G&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| H&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| I&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| J&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| K&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| L&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| M&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| N&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| O&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| P&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| Q&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| R&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| S&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| T&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| U&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| V&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| W&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| X&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Y&lt;br /&gt;
|-&lt;br /&gt;
| 29&lt;br /&gt;
| Z&lt;br /&gt;
|-&lt;br /&gt;
| 30&lt;br /&gt;
| D1&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| D2&lt;br /&gt;
|-&lt;br /&gt;
| 32&lt;br /&gt;
| D3&lt;br /&gt;
|-&lt;br /&gt;
| 33&lt;br /&gt;
| D4&lt;br /&gt;
|-&lt;br /&gt;
| 34&lt;br /&gt;
| D5&lt;br /&gt;
|-&lt;br /&gt;
| 35&lt;br /&gt;
| D6&lt;br /&gt;
|-&lt;br /&gt;
| 36&lt;br /&gt;
| D7&lt;br /&gt;
|-&lt;br /&gt;
| 37&lt;br /&gt;
| D8&lt;br /&gt;
|-&lt;br /&gt;
| 38&lt;br /&gt;
| D9&lt;br /&gt;
|-&lt;br /&gt;
| 39&lt;br /&gt;
| D0&lt;br /&gt;
|-&lt;br /&gt;
| 40&lt;br /&gt;
| Return&lt;br /&gt;
|-&lt;br /&gt;
| 41&lt;br /&gt;
| Escape&lt;br /&gt;
|-&lt;br /&gt;
| 42&lt;br /&gt;
| Backspace&lt;br /&gt;
|-&lt;br /&gt;
| 43&lt;br /&gt;
| Tab&lt;br /&gt;
|-&lt;br /&gt;
| 44&lt;br /&gt;
| Space&lt;br /&gt;
|-&lt;br /&gt;
| 45&lt;br /&gt;
| Minus&lt;br /&gt;
|-&lt;br /&gt;
| 46&lt;br /&gt;
| Plus&lt;br /&gt;
|-&lt;br /&gt;
| 47&lt;br /&gt;
| OpenBracket&lt;br /&gt;
|-&lt;br /&gt;
| 48&lt;br /&gt;
| CloseBracket&lt;br /&gt;
|-&lt;br /&gt;
| 49&lt;br /&gt;
| Pipe&lt;br /&gt;
|-&lt;br /&gt;
| 50&lt;br /&gt;
| Tilde&lt;br /&gt;
|-&lt;br /&gt;
| 51&lt;br /&gt;
| Semicolon&lt;br /&gt;
|-&lt;br /&gt;
| 52&lt;br /&gt;
| Quote&lt;br /&gt;
|-&lt;br /&gt;
| 53&lt;br /&gt;
| Backquote&lt;br /&gt;
|-&lt;br /&gt;
| 54&lt;br /&gt;
| Comma&lt;br /&gt;
|-&lt;br /&gt;
| 55&lt;br /&gt;
| Period&lt;br /&gt;
|-&lt;br /&gt;
| 56&lt;br /&gt;
| Slash&lt;br /&gt;
|-&lt;br /&gt;
| 57&lt;br /&gt;
| CapsLock&lt;br /&gt;
|-&lt;br /&gt;
| 58&lt;br /&gt;
| F1&lt;br /&gt;
|-&lt;br /&gt;
| 59&lt;br /&gt;
| F2&lt;br /&gt;
|-&lt;br /&gt;
| 60&lt;br /&gt;
| F3&lt;br /&gt;
|-&lt;br /&gt;
| 61&lt;br /&gt;
| F4&lt;br /&gt;
|-&lt;br /&gt;
| 62&lt;br /&gt;
| F5&lt;br /&gt;
|-&lt;br /&gt;
| 63&lt;br /&gt;
| F6&lt;br /&gt;
|-&lt;br /&gt;
| 64&lt;br /&gt;
| F7&lt;br /&gt;
|-&lt;br /&gt;
| 65&lt;br /&gt;
| F8&lt;br /&gt;
|-&lt;br /&gt;
| 66&lt;br /&gt;
| F9&lt;br /&gt;
|-&lt;br /&gt;
| 67&lt;br /&gt;
| F10&lt;br /&gt;
|-&lt;br /&gt;
| 68&lt;br /&gt;
| F11&lt;br /&gt;
|-&lt;br /&gt;
| 69&lt;br /&gt;
| F12&lt;br /&gt;
|-&lt;br /&gt;
| 70&lt;br /&gt;
| PrintScreen&lt;br /&gt;
|-&lt;br /&gt;
| 71&lt;br /&gt;
| ScrollLock&lt;br /&gt;
|-&lt;br /&gt;
| 72&lt;br /&gt;
| Pause&lt;br /&gt;
|-&lt;br /&gt;
| 73&lt;br /&gt;
| Insert&lt;br /&gt;
|-&lt;br /&gt;
| 74&lt;br /&gt;
| Home&lt;br /&gt;
|-&lt;br /&gt;
| 75&lt;br /&gt;
| PageUp&lt;br /&gt;
|-&lt;br /&gt;
| 76&lt;br /&gt;
| Delete&lt;br /&gt;
|-&lt;br /&gt;
| 77&lt;br /&gt;
| End&lt;br /&gt;
|-&lt;br /&gt;
| 78&lt;br /&gt;
| PageDown&lt;br /&gt;
|-&lt;br /&gt;
| 79&lt;br /&gt;
| RightArrow&lt;br /&gt;
|-&lt;br /&gt;
| 80&lt;br /&gt;
| LeftArrow&lt;br /&gt;
|-&lt;br /&gt;
| 81&lt;br /&gt;
| DownArrow&lt;br /&gt;
|-&lt;br /&gt;
| 82&lt;br /&gt;
| UpArrow&lt;br /&gt;
|-&lt;br /&gt;
| 83&lt;br /&gt;
| NumLock&lt;br /&gt;
|-&lt;br /&gt;
| 84&lt;br /&gt;
| NumPadDivide&lt;br /&gt;
|-&lt;br /&gt;
| 85&lt;br /&gt;
| NumPadMultiply&lt;br /&gt;
|-&lt;br /&gt;
| 86&lt;br /&gt;
| NumPadSubtract&lt;br /&gt;
|-&lt;br /&gt;
| 87&lt;br /&gt;
| NumPadAdd&lt;br /&gt;
|-&lt;br /&gt;
| 88&lt;br /&gt;
| NumPadEnter&lt;br /&gt;
|-&lt;br /&gt;
| 89&lt;br /&gt;
| NumPad1&lt;br /&gt;
|-&lt;br /&gt;
| 90&lt;br /&gt;
| NumPad2&lt;br /&gt;
|-&lt;br /&gt;
| 91&lt;br /&gt;
| NumPad3&lt;br /&gt;
|-&lt;br /&gt;
| 92&lt;br /&gt;
| NumPad4&lt;br /&gt;
|-&lt;br /&gt;
| 93&lt;br /&gt;
| NumPad5&lt;br /&gt;
|-&lt;br /&gt;
| 94&lt;br /&gt;
| NumPad6&lt;br /&gt;
|-&lt;br /&gt;
| 95&lt;br /&gt;
| NumPad7&lt;br /&gt;
|-&lt;br /&gt;
| 96&lt;br /&gt;
| NumPad8&lt;br /&gt;
|-&lt;br /&gt;
| 97&lt;br /&gt;
| NumPad9&lt;br /&gt;
|-&lt;br /&gt;
| 98&lt;br /&gt;
| NumPad0&lt;br /&gt;
|-&lt;br /&gt;
| 99&lt;br /&gt;
| NumPadDot&lt;br /&gt;
|-&lt;br /&gt;
| 100&lt;br /&gt;
| Backslash&lt;br /&gt;
|-&lt;br /&gt;
| 101&lt;br /&gt;
| Application&lt;br /&gt;
|-&lt;br /&gt;
| 102&lt;br /&gt;
| Power&lt;br /&gt;
|-&lt;br /&gt;
| 103&lt;br /&gt;
| NumPadEquals&lt;br /&gt;
|-&lt;br /&gt;
| 104&lt;br /&gt;
| F13&lt;br /&gt;
|-&lt;br /&gt;
| 105&lt;br /&gt;
| F14&lt;br /&gt;
|-&lt;br /&gt;
| 106&lt;br /&gt;
| F15&lt;br /&gt;
|-&lt;br /&gt;
| 107&lt;br /&gt;
| F16&lt;br /&gt;
|-&lt;br /&gt;
| 108&lt;br /&gt;
| F17&lt;br /&gt;
|-&lt;br /&gt;
| 109&lt;br /&gt;
| F18&lt;br /&gt;
|-&lt;br /&gt;
| 110&lt;br /&gt;
| F19&lt;br /&gt;
|-&lt;br /&gt;
| 111&lt;br /&gt;
| F20&lt;br /&gt;
|-&lt;br /&gt;
| 112&lt;br /&gt;
| F21&lt;br /&gt;
|-&lt;br /&gt;
| 113&lt;br /&gt;
| F22&lt;br /&gt;
|-&lt;br /&gt;
| 114&lt;br /&gt;
| F23&lt;br /&gt;
|-&lt;br /&gt;
| 115&lt;br /&gt;
| F24&lt;br /&gt;
|-&lt;br /&gt;
| 133&lt;br /&gt;
| NumPadComma&lt;br /&gt;
|-&lt;br /&gt;
| 135&lt;br /&gt;
| Ro&lt;br /&gt;
|-&lt;br /&gt;
| 136&lt;br /&gt;
| KatakanaHiragana&lt;br /&gt;
|-&lt;br /&gt;
| 137&lt;br /&gt;
| Yen&lt;br /&gt;
|-&lt;br /&gt;
| 138&lt;br /&gt;
| Henkan&lt;br /&gt;
|-&lt;br /&gt;
| 139&lt;br /&gt;
| Muhenkan&lt;br /&gt;
|-&lt;br /&gt;
| 140&lt;br /&gt;
| NumPadCommaPc98&lt;br /&gt;
|-&lt;br /&gt;
| 144&lt;br /&gt;
| HangulEnglish&lt;br /&gt;
|-&lt;br /&gt;
| 145&lt;br /&gt;
| Hanja&lt;br /&gt;
|-&lt;br /&gt;
| 146&lt;br /&gt;
| Katakana&lt;br /&gt;
|-&lt;br /&gt;
| 147&lt;br /&gt;
| Hiragana&lt;br /&gt;
|-&lt;br /&gt;
| 148&lt;br /&gt;
| ZenkakuHankaku&lt;br /&gt;
|-&lt;br /&gt;
| 224&lt;br /&gt;
| LeftControl&lt;br /&gt;
|-&lt;br /&gt;
| 225&lt;br /&gt;
| LeftShift&lt;br /&gt;
|-&lt;br /&gt;
| 226&lt;br /&gt;
| LeftAlt&lt;br /&gt;
|-&lt;br /&gt;
| 227&lt;br /&gt;
| LeftGui&lt;br /&gt;
|-&lt;br /&gt;
| 228&lt;br /&gt;
| RightControl&lt;br /&gt;
|-&lt;br /&gt;
| 229&lt;br /&gt;
| RightShift&lt;br /&gt;
|-&lt;br /&gt;
| 230&lt;br /&gt;
| RightAlt&lt;br /&gt;
|-&lt;br /&gt;
| 231&lt;br /&gt;
| RightGui&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KeyboardLockKeyEventSet =&lt;br /&gt;
This is &amp;quot;nn::hid::system::KeyboardLockKeyEventSet&amp;quot;. This is a BitFlagSet object for [[#KeyboardLockKeyEvent]].&lt;br /&gt;
&lt;br /&gt;
= KeyboardLockKeyEvent =&lt;br /&gt;
This is &amp;quot;nn::hid::system::KeyboardLockKeyEvent&amp;quot;. This is a 32-bit flag.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| NumLockOn&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| NumLockOff&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| NumLockToggle&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| CapsLockOn&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| CapsLockOff&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| CapsLockToggle&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| ScrollLockOn&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| ScrollLockOff&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ScrollLockToggle&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BasicXpadButtonSet =&lt;br /&gt;
This is &amp;quot;nn::hid::BasicXpadButtonSet&amp;quot;. This is a BitFlagSet object for [[#BasicXpadButton]].&lt;br /&gt;
&lt;br /&gt;
= HomeButtonSet =&lt;br /&gt;
This is &amp;quot;nn::hid::system::HomeButtonSet&amp;quot;. This is a BitFlagSet object for [[#HomeButton]].&lt;br /&gt;
&lt;br /&gt;
= SleepButtonSet =&lt;br /&gt;
This is &amp;quot;nn::hid::system::SleepButtonSet&amp;quot;. This is a BitFlagSet object for [[#SleepButton]].&lt;br /&gt;
&lt;br /&gt;
= CaptureButtonSet =&lt;br /&gt;
This is &amp;quot;nn::hid::system::CaptureButtonSet&amp;quot;. This is a BitFlagSet object for [[#CaptureButton]].&lt;br /&gt;
&lt;br /&gt;
= NpadButtonSet =&lt;br /&gt;
This is &amp;quot;nn::hid::NpadButtonSet&amp;quot;. This is a BitFlagSet object for [[#NpadButton]].&lt;br /&gt;
&lt;br /&gt;
= NpadButton =&lt;br /&gt;
This is &amp;quot;nn::hid::NpadButton&amp;quot;. This is a 64-bit flag.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| A&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| B&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Y&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| StickL&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| StickR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| L&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| R&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ZL&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ZR&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| Plus&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| Minus&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Left&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| Up&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Right&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| Down&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| StickLLeft&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| StickLUp&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| StickLRight&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| StickLDown&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| StickRLeft&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| StickRUp&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| StickRRight&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| StickRDown&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| LeftSL&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| LeftSR&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| RightSL&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| RightSR&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Palma&lt;br /&gt;
|-&lt;br /&gt;
| 29&lt;br /&gt;
| Verification&lt;br /&gt;
|-&lt;br /&gt;
| 30&lt;br /&gt;
| HandheldLeftB (Left B button on NES controllers in Handheld mode)&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| LagonCLeft (Left C button in N64 controller)&lt;br /&gt;
|-&lt;br /&gt;
| 32&lt;br /&gt;
| LagonCUp (Up C button in N64 controller)&lt;br /&gt;
|-&lt;br /&gt;
| 33&lt;br /&gt;
| LagonCRight (Right C button in N64 controller)&lt;br /&gt;
|-&lt;br /&gt;
| 34&lt;br /&gt;
| LagonCDown (Down C button in N64 controller)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AnalogStickCalibrationFlagsSet =&lt;br /&gt;
This is &amp;quot;nn::hid::detail::AnalogStickCalibrationFlagsSet&amp;quot;. This is a BitFlagSet object for [[#AnalogStickCalibrationFlags]].&lt;br /&gt;
&lt;br /&gt;
= SixAxisSensorUserCalibrationFlagsSet =&lt;br /&gt;
This is &amp;quot;nn::hid::detail::SixAxisSensorUserCalibrationFlagsSet&amp;quot;. This is a BitFlagSet object for [[#SixAxisSensorUserCalibrationFlags]].&lt;br /&gt;
&lt;br /&gt;
= NpadStyleSet =&lt;br /&gt;
This is &amp;quot;nn::hid::NpadStyleSet&amp;quot;. This is a BitFlagSet object for [[#NpadStyleTag]].&lt;br /&gt;
&lt;br /&gt;
= NpadStyleTag =&lt;br /&gt;
This is &amp;quot;nn::hid::NpadStyleTag&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| NpadStyleFullKey&lt;br /&gt;
| Pro Controller&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| NpadStyleHandheld&lt;br /&gt;
| Joy-Con controller in handheld mode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| NpadStyleJoyDual&lt;br /&gt;
| Joy-Con controller in dual mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| NpadStyleJoyLeft&lt;br /&gt;
| Joy-Con left controller in single mode&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| NpadStyleJoyRight&lt;br /&gt;
| Joy-Con right controller in single mode&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| NpadStyleGc&lt;br /&gt;
| GameCube controller&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| NpadStylePalma&lt;br /&gt;
| Poké Ball Plus controller&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| NpadStyleLark&lt;br /&gt;
| NES/Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| NpadStyleHandheldLark&lt;br /&gt;
| NES/Famicom controller in handheld mode&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| NpadStyleLucia&lt;br /&gt;
| SNES controller&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| NpadStyleLagon&lt;br /&gt;
| N64 controller&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| NpadStyleLager&lt;br /&gt;
| Sega Genesis controller&lt;br /&gt;
|-&lt;br /&gt;
| 12-28&lt;br /&gt;
| Reserved&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 29&lt;br /&gt;
| NpadStyleSystemExt&lt;br /&gt;
| Generic external controller&lt;br /&gt;
|-&lt;br /&gt;
| 30&lt;br /&gt;
| NpadStyleSystem&lt;br /&gt;
| Generic controller&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Reserved&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NpadDeviceTypeSet =&lt;br /&gt;
This is &amp;quot;nn::hid::system::NpadDeviceType&amp;quot;. This is a BitFlagSet object for [[#NpadDeviceType]].&lt;br /&gt;
&lt;br /&gt;
= NpadSystemPropertiesSet =&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadSystemPropertiesSet&amp;quot;. This is a BitFlagSet object for [[#NpadSystemProperties]].&lt;br /&gt;
&lt;br /&gt;
= NpadSystemProperties =&lt;br /&gt;
This is &amp;quot;nn::hid::NpadSystemProperties&amp;quot;. This is a 64-bit flag.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| IsChargingJoyDual&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| IsChargingJoyLeft&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| IsChargingJoyRight&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| IsPoweredJoyDual&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| IsPoweredJoyLeft&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| IsPoweredJoyRight&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| IsUnsuportedButtonPressedOnNpadSystem&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| IsUnsuportedButtonPressedOnNpadSystemExt&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| IsAbxyButtonOriented&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| IsSlSrButtonOriented&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| [4.0.0+] IsPlusAvailable&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| [4.0.0+] IsMinusAvailable&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| [8.0.0+] IsDirectionalButtonsAvailable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NpadSystemButtonPropertiesSet =&lt;br /&gt;
This is &amp;quot;nn::hid::detail::NpadSystemButtonPropertiesSet&amp;quot;. This is a BitFlagSet object for [[#NpadSystemButtonProperties]].&lt;br /&gt;
&lt;br /&gt;
= NpadSystemButtonProperties =&lt;br /&gt;
This is &amp;quot;nn::hid::NpadSystemButtonProperties&amp;quot;. This is a 32-bit flag.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| IsUnintendedHomeButtonInputProtectionEnabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AppletFooterUiAttributesSet =&lt;br /&gt;
This is &amp;quot;nn::hid::system::AppletFooterUiAttributesSet&amp;quot;. This is a BitFlagSet object for [[#AppletFooterUiAttribute]].&lt;br /&gt;
&lt;br /&gt;
= UniquePadType =&lt;br /&gt;
This is &amp;quot;nn::hid::system::UniquePadType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Embedded&lt;br /&gt;
|-&lt;br /&gt;
| 1 || FullKeyController&lt;br /&gt;
|-&lt;br /&gt;
| 2 || RightController&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LeftController&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DebugPadController&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= UniquePadInterface =&lt;br /&gt;
This is &amp;quot;nn::hid::system::UniquePadInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Embedded&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Rail&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Usb&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= UniquePadSerialNumber =&lt;br /&gt;
This is &amp;quot;nn::hid::system::UniquePadSerialNumber&amp;quot;. This is a 0x10 byte value.&lt;br /&gt;
&lt;br /&gt;
= UniquePadId =&lt;br /&gt;
This is &amp;quot;nn::hid::system::UniquePadId&amp;quot;. This is a 8 byte value.&lt;br /&gt;
&lt;br /&gt;
= AnalogStickManualCalibrationStage =&lt;br /&gt;
This is &amp;quot;nn::hid::system::AnalogStickManualCalibrationStage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ReleaseFromRight&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ReleaseFromBottom&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ReleaseFromLeft&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ReleaseFromTop&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Rotate&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Update&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Completed&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Clear&lt;br /&gt;
|-&lt;br /&gt;
| 8 || ClearCompleted&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SixAxisSensorUserCalibrationStage =&lt;br /&gt;
This is &amp;quot;nn::hid::system::SixAxisSensorUserCalibrationStage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Measuring&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Update&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Completed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NpadJoyHoldType =&lt;br /&gt;
This is &amp;quot;nn::hid::NpadJoyHoldType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Vertical&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Horizontal&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NpadJoyDeviceType =&lt;br /&gt;
This is &amp;quot;nn::hid::NpadJoyDeviceType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Left&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Right&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NpadHandheldActivationMode =&lt;br /&gt;
This is &amp;quot;nn::hid::NpadHandheldActivationMode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This controls how many joycons must be attached for handheld mode to be triggered (Dual = 2, Single = 1, None = 0).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Dual&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Single&lt;br /&gt;
|-&lt;br /&gt;
| 2 || None&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NpadJoyAssignmentMode =&lt;br /&gt;
This is &amp;quot;nn::hid::NpadJoyAssignmentMode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Dual&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Single&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NpadCommunicationMode =&lt;br /&gt;
This is &amp;quot;nn::hid::NpadCommunicationMode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 5ms&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 10ms&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 15ms&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Default&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AppletDetailedUiType =&lt;br /&gt;
This is &amp;quot;nn::hid::system::AppletDetailedUiType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000000 || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x01000000 || HandheldNone&lt;br /&gt;
|-&lt;br /&gt;
| 0x02000000 || HandheldJoyConLeftOnly&lt;br /&gt;
|-&lt;br /&gt;
| 0x02000001 || HandheldLarkHvc1Only&lt;br /&gt;
|-&lt;br /&gt;
| 0x02000002 || HandheldLarkNesLeftOnly&lt;br /&gt;
|-&lt;br /&gt;
| 0x03000000 || HandheldJoyConRightOnly&lt;br /&gt;
|-&lt;br /&gt;
| 0x03000001 || HandheldLarkHvc2Only&lt;br /&gt;
|-&lt;br /&gt;
| 0x03000002 || HandheldLarkNesRightOnly&lt;br /&gt;
|-&lt;br /&gt;
| 0x04000000 || HandheldJoyConLeftJoyConRight&lt;br /&gt;
|-&lt;br /&gt;
| 0x04000001 || HandheldJoyConLeftLarkHvc2&lt;br /&gt;
|-&lt;br /&gt;
| 0x04000002 || HandheldJoyConLeftLarkNesRight&lt;br /&gt;
|-&lt;br /&gt;
| 0x04000003 || HandheldLarkHvc1JoyConRight&lt;br /&gt;
|-&lt;br /&gt;
| 0x04000004 || HandheldLarkHvc1LarkHvc2&lt;br /&gt;
|-&lt;br /&gt;
| 0x04000005 || HandheldLarkHvc1LarkNesRight&lt;br /&gt;
|-&lt;br /&gt;
| 0x04000006 || HandheldLarkNesLeftJoyConRight&lt;br /&gt;
|-&lt;br /&gt;
| 0x04000007 || HandheldLarkNesLeftLarkHvc2&lt;br /&gt;
|-&lt;br /&gt;
| 0x04000008 || HandheldLarkNesLeftLarkNesRight&lt;br /&gt;
|-&lt;br /&gt;
| 0x05000000 || JoyDual&lt;br /&gt;
|-&lt;br /&gt;
| 0x06000000 || JoyDualLeftOnly&lt;br /&gt;
|-&lt;br /&gt;
| 0x07000000 || JoyDualRightOnly&lt;br /&gt;
|-&lt;br /&gt;
| 0x08000000 || JoyLeftHorizontal&lt;br /&gt;
|-&lt;br /&gt;
| 0x09000000 || JoyLeftVertical&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A000000 || JoyRightHorizontal&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B000000 || JoyRightVertical&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C000000 || SwitchProController&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D000000 || CompatibleProController&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E000000 || CompatibleJoyCon&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F000000 || LarkHvc1&lt;br /&gt;
|-&lt;br /&gt;
| 0x10000000 || LarkHvc2&lt;br /&gt;
|-&lt;br /&gt;
| 0x11000000 || LarkNesLeft&lt;br /&gt;
|-&lt;br /&gt;
| 0x12000000 || LarkNesRight&lt;br /&gt;
|-&lt;br /&gt;
| 0x13000000 || LuciaU&lt;br /&gt;
|-&lt;br /&gt;
| 0x13000001 || LuciaJ&lt;br /&gt;
|-&lt;br /&gt;
| 0x13000002 || LuciaE&lt;br /&gt;
|-&lt;br /&gt;
| 0x14000000 || Verification&lt;br /&gt;
|-&lt;br /&gt;
| 0x15000000 || [13.0.0+] Lagon&lt;br /&gt;
|-&lt;br /&gt;
| 0xFFFFFFFF || Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AppletFooterUiType =&lt;br /&gt;
This is &amp;quot;nn::hid::system::AppletFooterUiType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || None&lt;br /&gt;
|-&lt;br /&gt;
| 1 || HandheldNone&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HandheldJoyConLeftOnly&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HandheldJoyConRightOnly&lt;br /&gt;
|-&lt;br /&gt;
| 4 || HandheldJoyConLeftJoyConRight&lt;br /&gt;
|-&lt;br /&gt;
| 5 || JoyDual&lt;br /&gt;
|-&lt;br /&gt;
| 6 || JoyDualLeftOnly&lt;br /&gt;
|-&lt;br /&gt;
| 7 || JoyDualRightOnly&lt;br /&gt;
|-&lt;br /&gt;
| 8 || JoyLeftHorizontal&lt;br /&gt;
|-&lt;br /&gt;
| 9 || JoyLeftVertical&lt;br /&gt;
|-&lt;br /&gt;
| 10 || JoyRightHorizontal&lt;br /&gt;
|-&lt;br /&gt;
| 11 || JoyRightVertical&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SwitchProController&lt;br /&gt;
|-&lt;br /&gt;
| 13 || CompatibleProController&lt;br /&gt;
|-&lt;br /&gt;
| 14 || CompatibleJoyCon&lt;br /&gt;
|-&lt;br /&gt;
| 15 || LarkHvc1&lt;br /&gt;
|-&lt;br /&gt;
| 16 || LarkHvc2&lt;br /&gt;
|-&lt;br /&gt;
| 17 || LarkNesLeft&lt;br /&gt;
|-&lt;br /&gt;
| 18 || LarkNesRight&lt;br /&gt;
|-&lt;br /&gt;
| 19 || Lucia&lt;br /&gt;
|-&lt;br /&gt;
| 20 || Verification&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [13.0.0+] Lagon&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NpadIdType =&lt;br /&gt;
This is &amp;quot;nn::hid::NpadIdType&amp;quot;. This is the controller index used in [[#SharedMemoryFormat|sharedmem]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || No1&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || No2&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || No3&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || No4&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || No5&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || No6&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || No7&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || No8&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Other&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || Handheld&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NpadInterfaceType =&lt;br /&gt;
This is &amp;quot;nn::hid::NpadInterfaceType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Rail&lt;br /&gt;
|-&lt;br /&gt;
| 3 || USB&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NpadLarkType =&lt;br /&gt;
This is &amp;quot;nn::hid::NpadLarkType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || H1&lt;br /&gt;
|-&lt;br /&gt;
| 2 || H2&lt;br /&gt;
|-&lt;br /&gt;
| 3 || NL&lt;br /&gt;
|-&lt;br /&gt;
| 4 || NR&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NpadLuciaType =&lt;br /&gt;
This is &amp;quot;nn::hid::NpadLuciaType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || J&lt;br /&gt;
|-&lt;br /&gt;
| 2 || E&lt;br /&gt;
|-&lt;br /&gt;
| 3 || U&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NpadLagerType =&lt;br /&gt;
This is &amp;quot;nn::hid::NpadLagerType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || J&lt;br /&gt;
|-&lt;br /&gt;
| 2 || E&lt;br /&gt;
|-&lt;br /&gt;
| 3 || U&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= GestureDirection =&lt;br /&gt;
This is &amp;quot;nn::hid::GestureDirection&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || None&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Left&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Up&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Right&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Down&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= GestureType =&lt;br /&gt;
This is &amp;quot;nn::hid::GestureType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Idle&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Complete&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Cancel&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Touch&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Press&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Tap&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Pan&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Swipe&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Pinch&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Rotate&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DeviceHandle =&lt;br /&gt;
This is &amp;quot;nn::xcd::DeviceHandle&amp;quot;. This is a 8 byte value.&lt;br /&gt;
&lt;br /&gt;
= DeviceType =&lt;br /&gt;
This is &amp;quot;nn::hid::system::DeviceType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FullKey&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| DebugPad&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| HandheldLeft&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| HandheldRight&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| JoyLeft&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| JoyRight&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Palma&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| LarkHvcLeft&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| LarkHvcRight&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| LarkNesLeft&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| LarkNesRight&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| HandheldLarkHvcLeft&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| HandheldLarkHvcRight&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| HandheldLarkNesLeft&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| HandheldLarkNesRight&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| Lucia&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Lagon&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| Lager&lt;br /&gt;
|-&lt;br /&gt;
| 18-30&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| System&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DeviceTypeInternal =&lt;br /&gt;
This is &amp;quot;nn::hid::detail::DeviceTypeInternal&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7&lt;br /&gt;
| BIT(N*4+0) = Pro Controller, BIT(N*4+1) = Joy-Con Left, BIT(N*4+2) = Joy-Con Right, BIT(N*4+3) = invalid. Where N is 0-1.&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| Pro Controller&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| Famicom left controller&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Famicom right controller (with microphone)&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| NES left controller&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| NES right controller&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| Generic external controller&lt;br /&gt;
|-&lt;br /&gt;
| 18-20&lt;br /&gt;
| Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 21-23&lt;br /&gt;
| Generic controller&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] This is &amp;quot;nn::hidtypes::DeviceType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  [[#DeviceType|DeviceType]]&lt;br /&gt;
!  [[#UniquePadType|UniquePadType]]&lt;br /&gt;
!  [[#AppletDetailedUiType|AppletDetailedUiType]]&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || JoyRight, HandheldRight || RightController || JoyDual, JoyRightHorizontal, JoyRightVertical, JoyDualRightOnly, HandheldJoyConRightOnly, HandheldJoyConLeftJoyConRight, HandheldLarkHvc1JoyConRight, HandheldLarkNesLeftJoyConRight, HandheldNone || Joy-Con right controller (USB PID 0x2007)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || JoyLeft, HandheldLeft || LeftController || JoyDual, JoyLeftHorizontal, JoyLeftVertical, JoyDualLeftOnly, HandheldJoyConLeftOnly, HandheldJoyConLeftJoyConRight, HandheldJoyConLeftLarkHvc2, HandheldJoyConLeftLarkNesRight, HandheldNone || Joy-Con left controller (USB PID 0x2006)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || FullKey || FullKeyController || SwitchProController || Pro Controller (USB PID 0x2008)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || JoyLeft || LeftController || || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 5 || JoyRight || RightController || || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 6 || FullKey || FullKeyController || || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 7 || LarkHvcLeft, HandheldLarkHvcLeft || LeftController || LarkHvc1, HandheldLarkHvc1Only, HandheldLarkHvc1JoyConRight, HandheldLarkHvc1LarkHvc2, HandheldLarkHvc1LarkNesRight, HandheldNone || Famicom left controller&lt;br /&gt;
|-&lt;br /&gt;
| 8 || LarkHvcRight, HandheldLarkHvcRight || RightController || LarkHvc2, HandheldLarkHvc2Only, HandheldJoyConLeftLarkHvc2, HandheldLarkHvc1LarkHvc2, HandheldLarkNesLeftLarkHvc2, HandheldNone || Famicom right controller (with microphone)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || LarkNesLeft, HandheldLarkNesLeft || LeftController || LarkNesLeft, HandheldLarkNesLeftOnly, HandheldLarkNesLeftJoyConRight, HandheldLarkNesLeftLarkHvc2, HandheldLarkNesLeftLarkNesRight, HandheldNone || NES left controller&lt;br /&gt;
|-&lt;br /&gt;
| 10 || LarkNesRight, HandheldLarkNesRight || RightController || LarkNesRight, HandheldLarkNesRightOnly, HandheldJoyConLeftLarkNesRight, HandheldLarkHvc1LarkNesRight, HandheldLarkNesLeftLarkNesRight, HandheldNone || NES right controller&lt;br /&gt;
|-&lt;br /&gt;
| 11 || Lucia || FullKeyController || LuciaU, LuciaJ, LuciaE || SNES controller (USB PID 0x2017)&lt;br /&gt;
|-&lt;br /&gt;
| 12 || Palma || Embedded || Unknown || Poké Ball Plus controller&lt;br /&gt;
|-&lt;br /&gt;
| 13 || FullKey || FullKeyController || || Gc controller&lt;br /&gt;
|-&lt;br /&gt;
| 14 || HandheldLeft || LeftController || || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 15 || FullKey || FullKeyController || || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 16 || FullKey || FullKeyController || || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 17 || DebugPad || DebugPadController || Verification || Debug controller&lt;br /&gt;
|-&lt;br /&gt;
| 18 || HandheldRight || RightController || || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 19 || System || Embedded || CompatibleProController || Third party Pro Controller&lt;br /&gt;
|-&lt;br /&gt;
| 20 || System || Embedded || CompatibleJoyCon, HandheldNone || Third party Joy-Con right controller&lt;br /&gt;
|-&lt;br /&gt;
| 21 || System || Embedded || CompatibleJoyCon, HandheldNone || Third party Joy-Con left controller&lt;br /&gt;
|-&lt;br /&gt;
| 22 || Lagon || FullKeyController || Lagon || N64 controller (USB PID 0x2019)&lt;br /&gt;
|-&lt;br /&gt;
| 23 || ? || ? || ? || Joy-Con Charging Grip (USB PID 0x200E)&lt;br /&gt;
|-&lt;br /&gt;
| 24 || ? || ? || ? || Nintendo, USB PID 0x200F&lt;br /&gt;
|-&lt;br /&gt;
| 25 || ? || ? || ? || Nintendo, USB PID 0x2008&lt;br /&gt;
|-&lt;br /&gt;
| 26 || ? || ? || ? || Nintendo, USB PID 0x2018&lt;br /&gt;
|-&lt;br /&gt;
| 27 || ? || ? || ? || Nintendo, USB PID 0x201A&lt;br /&gt;
|-&lt;br /&gt;
| 28 || Lager || FullKeyController || || Sega Genesis controller (USB PID 0x201E)&lt;br /&gt;
|-&lt;br /&gt;
| 29 || ? || ? || ? || Nintendo, USB PID 0x201F&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NpadPowerInfo =&lt;br /&gt;
This is &amp;quot;nn::hid::system::NpadPowerInfo&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| IsPowered&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| IsCharging&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x6&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x6&lt;br /&gt;
| [[#BatteryLevel|BatteryLevel]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BatteryLevel =&lt;br /&gt;
This is &amp;quot;nn::hid::system::NpadBatteryLevel&amp;quot;. This is a 4 byte value.&lt;br /&gt;
&lt;br /&gt;
= ConsoleSixAxisSensorHandle =&lt;br /&gt;
This is &amp;quot;nn::hid::ConsoleSixAxisSensorHandle&amp;quot;. This is a 4-byte struct with 4-byte alignment.&lt;br /&gt;
&lt;br /&gt;
sdknso GetConsoleSixAxisSensorHandle always returns a handle with value 0x13.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || TypeValue&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SixAxisSensorHandle =&lt;br /&gt;
This is &amp;quot;nn::hid::SixAxisSensorHandle&amp;quot;. This is a 4-byte struct with 4-byte alignment.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || TypeValue&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || NpadStyleIndex&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x1 || DeviceIdx&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= VibrationDeviceHandle =&lt;br /&gt;
This is &amp;quot;nn::hid::VibrationDeviceHandle&amp;quot;. This is a 4-byte struct with 4-byte alignment.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || TypeValue&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || NpadStyleIndex&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || [[#NpadIdType|PlayerNumber]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x1 || DeviceIdx&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= VibrationDeviceInfo =&lt;br /&gt;
This is &amp;quot;nn::hid::VibrationDeviceInfo&amp;quot; / &amp;quot;nn::hid::VibrationDeviceInfoForIpc&amp;quot;. This is a 0x8-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || [[#VibrationDeviceType|DeviceType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || [[#VibrationDevicePosition|Position]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= VibrationDeviceType =&lt;br /&gt;
This is &amp;quot;nn::hid::VibrationDeviceType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 1 || LinearResonantActuator&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GcErm&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= VibrationDevicePosition =&lt;br /&gt;
This is &amp;quot;nn::hid::VibrationDevicePosition&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || None&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Left&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Right&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= VibrationValue =&lt;br /&gt;
This is &amp;quot;nn::hid::VibrationValue&amp;quot;. This is a 0x10-byte struct, which contains 4 float values.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| AmplitudeLow&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| FrequencyLow&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| AmplitudeHigh&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| FrequencyHigh&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= VibrationGcErmCommand =&lt;br /&gt;
This is &amp;quot;nn::hid::VibrationGcErmCommand&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Name&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Stop || Stops the vibration with a decay phase.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Start || Starts the vibration.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopHard || Stops the vibration immediately, with no decay phase.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AccelerometerPlayMode =&lt;br /&gt;
This is &amp;quot;nn::hid::debug::AccelerometerPlayMode&amp;quot; (pre-10.0.0 this is &amp;quot;nn::hid::AccelerometerPlayMode&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Loose&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Tight&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= GyroscopeZeroDriftMode =&lt;br /&gt;
This is &amp;quot;nn::hid::GyroscopeZeroDriftMode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Loose&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Standard&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Tight&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PalmaConnectionHandle =&lt;br /&gt;
This is &amp;quot;nn::hid::PalmaConnectionHandle&amp;quot;. This is a 0x8-byte struct with 8-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= PalmaOperationInfo =&lt;br /&gt;
This is &amp;quot;nn::hid::PalmaOperationInfo&amp;quot;. This is a 0x148-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || [[#PalmaOperationType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || Result&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x140 || Buffer for [[#GetPalmaOperationInfo]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PalmaOperationType =&lt;br /&gt;
This is &amp;quot;nn::hid::PalmaOperationType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || PlayActivity&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetFrModeType&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ReadStep&lt;br /&gt;
|-&lt;br /&gt;
| 3 || EnableStep&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ResetStep&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ReadApplicationSection&lt;br /&gt;
|-&lt;br /&gt;
| 6 || WriteApplicationSection&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ReadUniqueCode&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetUniqueCodeInvalid&lt;br /&gt;
|-&lt;br /&gt;
| 9 || WriteActivityEntry&lt;br /&gt;
|-&lt;br /&gt;
| 10 || WriteRgbLedPatternEntry&lt;br /&gt;
|-&lt;br /&gt;
| 11 || WriteWaveEntry&lt;br /&gt;
|-&lt;br /&gt;
| 12 || ReadDataBaseIdentificationVersion&lt;br /&gt;
|-&lt;br /&gt;
| 13 || WriteDataBaseIdentificationVersion&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SuspendFeature&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [5.1.0+] ReadPlayLog&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [5.1.0+] ResetPlayLog&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PalmaFrModeType =&lt;br /&gt;
This is &amp;quot;nn::hid::PalmaFrModeType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Off&lt;br /&gt;
|-&lt;br /&gt;
| 1 || B01&lt;br /&gt;
|-&lt;br /&gt;
| 2 || B02&lt;br /&gt;
|-&lt;br /&gt;
| 3 || B03&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Downloaded&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PalmaApplicationSectionAccessBuffer =&lt;br /&gt;
This is &amp;quot;nn::hid::PalmaApplicationSectionAccessBuffer&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
= PalmaActivityEntry =&lt;br /&gt;
This is &amp;quot;nn::hid::PalmaActivityEntry&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;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || RgbLedPatternIndex.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || [[#PalmaWaveSet|WaveSet]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x2 || WaveIndex.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PalmaWaveSet =&lt;br /&gt;
This is &amp;quot;nn::hid::PalmaWaveSet&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Small&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Medium&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Large&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PalmaFeature =&lt;br /&gt;
This is &amp;quot;nn::hid::PalmaFeature&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;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FrMode&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| RumbleFeedback&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Step&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| MuteSwitch&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AbstractedPadState =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Type, only 1 bit can be set. Converted to [[#HdlsDeviceInfo]]::type internally by [[#SetAutoPilotVirtualPadState]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x1 || Flags. [[#SetAutoPilotVirtualPadState]] only uses bit0: when clear it will skip using the rest of the input and run [[#UnsetAutoPilotVirtualPadState]] internally.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || 0x3 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || RGBA Single Body Color&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || RGBA Single Buttons Color&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || See [[#HiddbgHdlsDeviceInfo]]::[[#NpadInterfaceType]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x3 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x24 || [[#HdlsState]]. Unknown if the last 4-bytes are included in this struct, [[#SetAutoPilotVirtualPadState]]/[[#hiddbgGetAbstractedPadsState]] only uses the first 0x20-bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x60 || Unused with [[#SetAutoPilotVirtualPadState]]/[[#GetAbstractedPadsState]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Normally the input state is merged with an existing controller selected by Type. However in some cases (BIT(2-5) with type2!=0x2 and BIT(31)) it&#039;s detected as a dedicated controller.&lt;br /&gt;
&lt;br /&gt;
Type:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  [[#HdlsDeviceInfo]]::type bits&lt;br /&gt;
!  Description&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || 15 || || [[#DeviceType]] |= BIT(1)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || 1 || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || 3 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || 11 || || [[#DeviceType]] |= BIT(11)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 12 || || [[#DeviceType]] |= BIT(12)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 13 || || [[#DeviceType]] |= BIT(13)&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 14 || || [[#DeviceType]] |= BIT(14)&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 15 || || [[#DeviceType]] |= BIT(11)&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 12 || || [[#DeviceType]] |= BIT(12)&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 13 || || [[#DeviceType]] |= BIT(13)&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 14 || || [[#DeviceType]] |= BIT(14)&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 17 || || &lt;br /&gt;
|-&lt;br /&gt;
| 31 || 21 || || [[#DeviceType]] = BIT(31)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The above &amp;quot;[[#DeviceType]] |=&amp;quot; notes only apply when type2 is 0x2.&lt;br /&gt;
&lt;br /&gt;
= DebugPadAutoPilotState =&lt;br /&gt;
This is &amp;quot;nn::hid::debug::DebugPadAutoPilotState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#DebugPadAttributeSet|Attributes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#DebugPadButtonSet|Buttons]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#AnalogStickState|AnalogStickR]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MouseAutoPilotState =&lt;br /&gt;
This is &amp;quot;nn::hid::debug::MouseAutoPilotState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| X&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Y&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| DeltaX&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| DeltaY&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| WheelDelta&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#MouseButtonSet|Buttons]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#MouseAttributeSet|Attributes]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KeyboardAutoPilotState =&lt;br /&gt;
This is &amp;quot;nn::hid::debug::KeyboardAutoPilotState&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| [[#KeyboardModifierSet|Modifiers]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x20&lt;br /&gt;
| [[#KeyboardKeySet|Keys]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SleepButtonAutoPilotState =&lt;br /&gt;
This is &amp;quot;nn::hid::debug::SleepButtonAutoPilotState&amp;quot;. This is a 0x8-byte struct with 8-byte alignment.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Buttons (only bit0 is used)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PowerInfo =&lt;br /&gt;
This is &amp;quot;nn::hidtypes::PowerInfo&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;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || BatteryLevel&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || [[#PowerAttribute]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PowerAttribute =&lt;br /&gt;
This is &amp;quot;nn::hidtypes::PowerAttribute&amp;quot;. This is a 32-bit flag.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| IsPowered&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| IsCharging&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= HdlsAttribute =&lt;br /&gt;
This is &amp;quot;nn::hidtypes::HdlsAttribute&amp;quot;. This is a 32-bit flag.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| HasVirtualSixAxisSensorAcceleration&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| HasVirtualSixAxisSensorAngle&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= HdlsHandle =&lt;br /&gt;
This is &amp;quot;nn::hid::debug::HdlsHandle&amp;quot;. This is a 0x8-byte struct with 8-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= HdlsSessionId =&lt;br /&gt;
This is &amp;quot;nn::hid::debug::detail::HdlsSessionId&amp;quot;. This is a 0x8-byte struct with 8-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= HdlsNpadAssignment =&lt;br /&gt;
This is a 0x208-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || s32 Total entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x200(0x20*0x10) || Array of [[#HdlsNpadAssignmentEntry]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= HdlsNpadAssignmentEntry =&lt;br /&gt;
This is a 0x20-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#HdlsHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x8 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x1 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0x7 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= HdlsStateList =&lt;br /&gt;
This is a 0x408-byte struct.&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] This is a 0x488-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || s32 Total entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || &amp;lt;[[#HdlsStateListEntry]] size&amp;gt;*0x10 || Array of [[#HdlsStateListEntry]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This contains a list of all controllers, including non-virtual controllers.&lt;br /&gt;
&lt;br /&gt;
= HdlsStateListEntry =&lt;br /&gt;
This is a 0x40-byte struct. &lt;br /&gt;
&lt;br /&gt;
[9.0.0+] This is a 0x48-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#HdlsHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || [[#HdlsDeviceInfo]] size || [[#HdlsDeviceInfo]]. With [[#ApplyHdlsStateList]] this is only used when creating new devices.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + [[#HdlsDeviceInfo]] size, with 8-byte alignment || 0x24 || [[#HdlsState]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;Immediately following the above&amp;gt; || 0x4 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= HdlsDeviceInfo =&lt;br /&gt;
This is &amp;quot;nn::hid::debug::HdlsDeviceInfo&amp;quot;. This is a 0x10-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || [[#DeviceTypeInternal]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || RGBA Single Body Color&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || RGBA Single Buttons Color&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x1 || [[#NpadInterfaceType]]. Additional type field used with the above type field, if the value doesn&#039;t match one of the following a default is used. Type Pro-Controller: value 0x3 indicates that the controller is connected via USB. Type bit21: value 0x3 = unknown. When value is 0x2, state is merged with an existing controller (when the type value is compatible with this). Otherwise, it&#039;s a dedicated controller.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 0x3 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] This is a 0x14-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || [[#DeviceTypeInternal]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || [[#NpadInterfaceType]]. Similar to the field from the old struct.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || RGBA Single Body Color&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || RGBA Single Buttons Color&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || RGBA Left Grip Color&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || RGBA Right Grip Color&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= HdlsState =&lt;br /&gt;
This is &amp;quot;nn::hid::debug::HdlsState&amp;quot;. This is a 0x24-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || IsPowered for the main PowerInfo.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || ORRed with IsPowered to set the value of the first byte for the controller [[#NpadSystemProperties]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x6 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || BatteryLevel for the main PowerInfo.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || [[#NpadButton|Buttons]]. Bit18 = HOME and bit19 = Capture.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x10(4*2*2) || Joystick data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x1 || Indicator. Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases).&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0x3 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] (0x28-bytes):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#PowerInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || [[#NpadButton|Buttons]], masked with 0xfffffffff00fffff. See above table regarding HOME/Capture buttons.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x10(4*2*2) || Joystick data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x1 || Indicator. Unused for input. Set with output from [[#DumpHdlsStates]] (zero in some cases).&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0x7 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[12.0.0+] (0x40-bytes):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#PowerInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || [[#NpadButton|Buttons]], masked with 0xfffffffff00fffff. See above table regarding HOME/Capture buttons.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x10(4*2*2) || Joystick data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xC || VirtualSixAxisSensorAcceleration&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xC || VirtualSixAxisSensorAngle&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x4 || [[#HdlsAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x1 || Indicator. Unused for input.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || 0x3 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DebugRegisteredDevice =&lt;br /&gt;
This is &amp;quot;nn::hid::debug::RegisteredDevice&amp;quot;. This is a 0x58-byte struct with 2-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= RegisteredDevice =&lt;br /&gt;
This is &amp;quot;nn::hid::system::RegisteredDevice&amp;quot;. This is a 0x68-byte struct with 4-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= NotificationLedPattern =&lt;br /&gt;
This is &amp;quot;nn::hid::system::NotificationLedPattern&amp;quot;. This is a 0x48-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Subcommand argdata bytepos || Subcommand argdata nibble || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || 0x0 || Low || Mini Cycle Base Duration. Value 0x1-0xF: 12.5ms - 187.5ms. Value 0x0 = 0ms/OFF.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || 0x0 || High || Number of Mini Cycles + 1. Value 0x0-0xF: 1 - 16 mini cycles.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x1 || 0x1 || Low || Number of Full Cycles. Value 0x1-0xF: 1 - 15 full cycles. Value 0x0 is repeat forever, but if Mini Cycle Base Duration is set to 0x0, it does the 1st Mini Cycle with a 12.5ms base duration and then the LED stays on with LED Start Intensity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || 0x1 || High || LED Start Intensity. Value 0x0-0xF: 0% - 100%. (In HW, 1 - 241 duty)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x1 || 0x2 || High || Mini Cycle 1 LED Intensity. Value 0x0-0xF: 0% - 100%. (In HW, 1 - 241 duty)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || 0x1 || 0x3 || High || Fading Transition Steps to Mini Cycle 1 (Uses PWM). Value 0x0: Instant. Each step duration is based on Mini Cycle Step Duration Multiplier.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || 0x3 || Low || Final Step Duration Multiplier of Mini Cycle 1. Value is a Multiplier of Mini Cycle Base Duration. Value 0x0: 12.5ms, 0x1 - xF: 1x - 15x.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || || || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x1 || 0x2 || Low || Mini Cycle 2 LED Intensity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || 0x1 || 0x4 || High || Fading Transition Steps to Mini Cycle 2 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x1 || 0x4 || Low || Final Step Duration Multiplier of Mini Cycle 2 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x1 || || || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x1 || 0x5 || High || Mini Cycle 3 LED Intensity.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 0x1 || 0x6 || High || Fading Transition Steps to Mini Cycle 3 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x1 || 0x6 || Low || Final Step Duration Multiplier of Mini Cycle 3 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x1 || || || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || 0x5 || Low || Mini Cycle 4 LED Intensity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x1 || 0x7 || High || Fading Transition Duration to Mini Cycle 4 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x1 || 0x7 || Low || Final Step Duration Multiplier of Mini Cycle 4 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x1 || || || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x1 || 0x8 || High || Mini Cycle 5 LED Intensity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0x1 || 0x9 || High || Fading Transition Steps to Mini Cycle 5 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0x1 || 0x9 || Low || Final Step Duration Multiplier of Mini Cycle 5 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0x1 || || || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x1 || 0x8 || Low || Mini Cycle 6 LED Intensity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0x1 || 0xA || High || Fading Transition Steps to Mini Cycle 6 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0x1 || 0xA || Low || Final Step Duration Multiplier of Mini Cycle 6 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0x1 || || || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x1 || 0xB || High || Mini Cycle 7 LED Intensity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0x1 || 0xC || High || Fading Transition Steps  to Mini Cycle 7 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0x1 || 0xC || Low || Final Step Duration Multiplier of Mini Cycle 7 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x1 || || || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x1 || 0xB || Low || Mini Cycle 8 LED Intensity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0x1 || 0xD || Low || Fading Transition Steps to Mini Cycle 8 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0x1 || 0xD || High || Final Step Duration Multiplier of Mini Cycle 8 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0x1 || || || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x1 || 0xE || High || Mini Cycle 9 LED Intensity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x1 || 0xF || High || Fading Transition Steps to Mini Cycle 9 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x1 || 0xF || Low || Final Step Duration Multiplier of Mini Cycle 9 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x1 || || || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x1 || 0xE || Low || Mini Cycle 10 LED Intensity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x1 || 0x10 || High || Fading Transition Steps to Mini Cycle 10 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x1 || 0x10 || Low || Final Step Duration Multiplier of Mini Cycle 10 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x1 || || || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x1 || 0x11 || High || Mini Cycle 11 LED Intensity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x1 || 0x12 || High || Fading Transition Steps to Mini Cycle 11 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x1 || 0x12 || Low || Final Step Duration Multiplier of Mini Cycle 11 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x1 || || || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x1 || 0x11 || Low || Mini Cycle 12 LED Intensity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x1 || 0x13 || High || Fading Transition Steps to Mini Cycle 12 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x1 || 0x13 || Low || Final Step Duration Multiplier of Mini Cycle 12 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x1 || || || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x1 || 0x14 || High || Mini Cycle 13 LED Intensity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0x1 || 0x15 || High || Fading Transition Steps to Mini Cycle 13 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0x1 || 0x15 || Low || Final Step Duration Multiplier of Mini Cycle 13 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x1 || || || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x1 || 0x14 || Low || Mini Cycle 14 LED Intensity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x1 || 0x16 || High || Fading Transition Steps to Mini Cycle 14 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x1 || 0x16 || Low || Final Step Duration Multiplier of Mini Cycle 14 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x1 || || || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x1 || 0x17 || High || Mini Cycle 15 LED Intensity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || 0x1 || 0x18 || High || Fading Transition Steps to Mini Cycle 15 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x1 || 0x18 || Low || Final Step Duration Multiplier of Mini Cycle 15 (see above).&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1 || || || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0x1 || 0x17 || Low || Mini Cycle 16 LED Intensity.&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x1 || 0x19 || High || Fading Transition Steps to Mini Cycle 16 (see above). (Unused in older Joy-Con / Pro-Con FW. Unknown for new.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x1 || 0x19 || Low || Final Step Duration Multiplier of Mini Cycle 16 (see above). (Unused in older Joy-Con / Pro-Con FW. Unknown for new.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x1 || || || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x1 || 0x1A || High || Unknown (Unused in older Joy-Con / Pro-Con FW. Unknown for new.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x1 || 0x1A || Low || Unknown (Unused in older Joy-Con / Pro-Con FW. Unknown for new.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x1 || || || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x1 || || || Padding&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The above descriptions in the table are based on the info from [https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering/blob/master/bluetooth_hid_subcommands_notes.md here].&lt;br /&gt;
&lt;br /&gt;
argdata in the subcommand is initialized as follows: &amp;lt;code&amp;gt;((u8*)cmd_argdata)[pos] = u8_in[pos2] | u8_in[pos3]&amp;lt;&amp;lt;4;&amp;lt;/code&amp;gt; Hence, 4bits from pairs of 2-bytes of the input struct are combined to write to the subcommand. Only the low 4bits of each used byte in the struct is used. This is written to stack initially, then copied to the actual cmd_argdata (the data immediately following the subcommandID byte). There&#039;s a total of 0x1B-bytes of cmd_argdata initialized from this.&lt;br /&gt;
&lt;br /&gt;
The layout of cmd_argdata is as follows:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1B || See above.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xB || Cleared to zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x5 || Unused&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x8 || Set to an input value, which is hard-coded 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x2 || Set to value 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0x1 || Set to value 1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SystemButtonConfigEmbedded =&lt;br /&gt;
This is &amp;quot;nn::hid::system::ButtonConfigEmbedded&amp;quot;. This is a 0x2C8-byte struct.&lt;br /&gt;
&lt;br /&gt;
= SystemButtonConfigFull =&lt;br /&gt;
This is &amp;quot;nn::hid::system::ButtonConfigFull&amp;quot;. This is a 0x2C8-byte struct.&lt;br /&gt;
&lt;br /&gt;
= SystemButtonConfigLeft =&lt;br /&gt;
This is &amp;quot;nn::hid::system::ButtonConfigLeft&amp;quot;. This is a 0x1C8-byte struct.&lt;br /&gt;
&lt;br /&gt;
= SystemButtonConfigRight =&lt;br /&gt;
This is &amp;quot;nn::hid::system::ButtonConfigRight&amp;quot;. This is a 0x1A0-byte struct.&lt;br /&gt;
&lt;br /&gt;
= ButtonConfigEmbedded =&lt;br /&gt;
This is &amp;quot;nn::hidconfig::ButtonConfigEmbedded&amp;quot;. This is a 0x54-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonLeft]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonUp]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonRight]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || [[#DigitalButtonAssignment|HardwareButtonDown]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonA]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonB]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonX]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || [[#DigitalButtonAssignment|HardwareButtonY]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStickL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStickR]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x4 || [[#DigitalButtonAssignment|HardwareButtonR]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonZL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonZR]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonSelect]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStart]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonCapture]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x8 || [[#AnalogStickAssignment|HardwareStickL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0x8 || [[#AnalogStickAssignment|HardwareStickR]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DigitalButtonAssignment ==&lt;br /&gt;
This is &amp;quot;nn::hidconfig::DigitalButtonAssignment&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || A&lt;br /&gt;
|-&lt;br /&gt;
| 1 || B&lt;br /&gt;
|-&lt;br /&gt;
| 2 || X&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Y&lt;br /&gt;
|-&lt;br /&gt;
| 4 || StickL&lt;br /&gt;
|-&lt;br /&gt;
| 5 || StickR&lt;br /&gt;
|-&lt;br /&gt;
| 6 || L&lt;br /&gt;
|-&lt;br /&gt;
| 7 || R&lt;br /&gt;
|-&lt;br /&gt;
| 8 || ZL&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ZR&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Select&lt;br /&gt;
|-&lt;br /&gt;
| 11 || Start&lt;br /&gt;
|-&lt;br /&gt;
| 12 || Left&lt;br /&gt;
|-&lt;br /&gt;
| 13 || Up&lt;br /&gt;
|-&lt;br /&gt;
| 14 || Right&lt;br /&gt;
|-&lt;br /&gt;
| 15 || Down&lt;br /&gt;
|-&lt;br /&gt;
| 16 || LeftSL&lt;br /&gt;
|-&lt;br /&gt;
| 17 || LeftSR&lt;br /&gt;
|-&lt;br /&gt;
| 18 || RightSL&lt;br /&gt;
|-&lt;br /&gt;
| 19 || RightSR&lt;br /&gt;
|-&lt;br /&gt;
| 20 || HomeButton&lt;br /&gt;
|-&lt;br /&gt;
| 21 || CaptureButton&lt;br /&gt;
|-&lt;br /&gt;
| 22 || Invalid&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AnalogStickAssignment ==&lt;br /&gt;
This is &amp;quot;nn::hidconfig::AnalogStickAssignment&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;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || [[#AnalogStickRotation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x1 || IsPairedStickAssigned&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || 0x3 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AnalogStickRotation ==&lt;br /&gt;
This is &amp;quot;nn::hidconfig::AnalogStickRotation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || None&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Clockwise90&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Anticlockwise90&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ButtonConfigFull =&lt;br /&gt;
This is &amp;quot;nn::hidconfig::ButtonConfigFull&amp;quot;. This is a 0x54-byte struct.&lt;br /&gt;
&lt;br /&gt;
This is identical to [[#ButtonConfigEmbedded]].&lt;br /&gt;
&lt;br /&gt;
= ButtonConfigLeft =&lt;br /&gt;
This is &amp;quot;nn::hidconfig::ButtonConfigLeft&amp;quot;. This is a 0x34-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonLeft]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonUp]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonRight]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || [[#DigitalButtonAssignment|HardwareButtonDown]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStickL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonZL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || [[#DigitalButtonAssignment|HardwareButtonSelect]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonLeftSL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonLeftSR]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonCapture]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x8 || [[#AnalogStickAssignment|HardwareStickL]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ButtonConfigRight =&lt;br /&gt;
This is &amp;quot;nn::hidconfig::ButtonConfigRight&amp;quot;. This is a 0x30-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonA]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonB]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonX]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || [[#DigitalButtonAssignment|HardwareButtonY]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStickR]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonR]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonZR]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || [[#DigitalButtonAssignment|HardwareButtonStart]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonRightSL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || [[#DigitalButtonAssignment|HardwareButtonRightSR]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x8 || [[#AnalogStickAssignment|HardwareStickR]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= StorageName =&lt;br /&gt;
This is &amp;quot;nn::hidconfig::StorageName&amp;quot;. This is a 0x81-byte struct.&lt;br /&gt;
&lt;br /&gt;
This is an UTF-8 NUL-terminated name string.&lt;br /&gt;
&lt;br /&gt;
= IrCameraHandle =&lt;br /&gt;
This is &amp;quot;nn::irsensor::IrCameraHandle&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;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || PlayerNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || DeviceType&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IrCameraStatus =&lt;br /&gt;
This is &amp;quot;nn::irsensor::IrCameraStatus&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Available&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Unsupported&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Unconnected&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IrCameraInternalStatus =&lt;br /&gt;
This is &amp;quot;nn::irsensor::IrCameraInternalStatus&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Stopped&lt;br /&gt;
|-&lt;br /&gt;
| 1 || FirmwareUpdateNeeded&lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || FirmwareVersionRequested&lt;br /&gt;
|-&lt;br /&gt;
| 6 || FirmwareVersionIsInvalid&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [4.0.0+] Ready&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [4.0.0+] Setting&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IrSensorMode =&lt;br /&gt;
This is &amp;quot;nn::irsensor::detail::StatusManager::IrSensorMode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || None&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#MomentProcessorState|MomentProcessor]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ClusteringProcessorState|ClusteringProcessor]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#ImageTransferProcessorState|ImageTransferProcessor]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#PointingProcessorMarkerState|PointingProcessorMarker]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#TeraPluginProcessorState|TeraPluginProcessor]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ImageProcessorStatus =&lt;br /&gt;
This is &amp;quot;nn::irsensor::ImageProcessorStatus&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Stopped&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Running&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ImageTransferProcessorFormat =&lt;br /&gt;
This is &amp;quot;nn::irsensor::ImageTransferProcessorFormat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This controls the IR Sensor image resolution.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 320x240&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 160x120&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 80x60&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [4.0.0+] 40x30&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [4.0.0+] 20x15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MomentProcessorConfig =&lt;br /&gt;
This is &amp;quot;nn::irsensor::MomentProcessorConfig&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;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || ExposureTime (default is 0x493E0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || LightTarget (default is 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || Gain (default is 0x8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || IsNegativeImageUsed (default is 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x2 || WindowOfInterestX (default is 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0x2 || WindowOfInterestY (default is 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x2 || WindowOfInterestWidth (default is 0x140)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0x2 || WindowOfInterestHeight (default is 0xF0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || Preprocess (default is 0x1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || PreprocessIntensityThreshold (default is 0x50)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PackedMomentProcessorConfig =&lt;br /&gt;
This is &amp;quot;nn::irsensor::PackedMomentProcessorConfig&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is converted from [[#MomentProcessorConfig]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || ExposureTime (default is 0x493E0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x1 || LightTarget (default is 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || 0x1 || Gain (default is 0x8)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x1 || IsNegativeImageUsed (default is 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x5 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x2 || WindowOfInterestX (default is 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x2 || WindowOfInterestY (default is 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x2 || WindowOfInterestWidth (default is 0x140)&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0x2 || WindowOfInterestHeight (default is 0xF0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x4 || [[#PackedMcuVersion|RequiredMcuVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x1 || Preprocess (default is 0x1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0x1 || PreprocessIntensityThreshold (default is 0x50)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0x2 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ClusteringProcessorConfig =&lt;br /&gt;
This is &amp;quot;nn::irsensor::ClusteringProcessorConfig&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;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || ExposureTime (default is 200000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || LightTarget (default is 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || Gain (default is 0x2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || IsNegativeImageUsed (default is 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x2 || WindowOfInterestX (default is 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0x2 || WindowOfInterestY (default is 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x2 || WindowOfInterestWidth (default is 320)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0x2 || WindowOfInterestHeight (default is 240)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || ObjectPixelCountMin (default is 0x3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || ObjectPixelCountMax (default is 0x12C00)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x4 || ObjectIntensityMin (default is 150)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x1 || IsExternalLightFilterEnabled (default is 0x1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PackedClusteringProcessorConfig =&lt;br /&gt;
This is &amp;quot;nn::irsensor::PackedClusteringProcessorConfig&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is converted from [[#ClusteringProcessorConfig]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || ExposureTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x1 || LightTarget&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || 0x1 || Gain&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x1 || IsNegativeImageUsed&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x5 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x2 || WindowOfInterestX&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x2 || WindowOfInterestY&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x2 || WindowOfInterestWidth&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0x2 || WindowOfInterestHeight&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x4 || [[#PackedMcuVersion|RequiredMcuVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || ObjectPixelCountMin&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || ObjectPixelCountMax&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x1 || ObjectIntensityMin&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x1 || IsExternalLightFilterEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x2 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ImageTransferProcessorConfig =&lt;br /&gt;
This is &amp;quot;nn::irsensor::ImageTransferProcessorConfig&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;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || ExposureTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || LightTarget&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || Gain&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || IsNegativeImageUsed&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x4 || [[#ImageTransferProcessorFormat|Format]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PackedImageTransferProcessorConfig =&lt;br /&gt;
This is &amp;quot;nn::irsensor::PackedImageTransferProcessorConfig&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is converted from [[#ImageTransferProcessorConfig]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || ExposureTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x1 || LightTarget&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || 0x1 || Gain&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x1 || IsNegativeImageUsed&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x5 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || [[#PackedMcuVersion|RequiredMcuVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x1 || [[#ImageTransferProcessorFormat|Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0x3 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ImageTransferProcessorState =&lt;br /&gt;
This is &amp;quot;nn::irsensor::ImageTransferProcessorState&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;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || SamplingNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || AmbientNoiseLevel&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= TeraPluginProcessorConfig =&lt;br /&gt;
This is &amp;quot;nn::irsensor::TeraPluginProcessorConfig&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;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Mode&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x1 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PackedTeraPluginProcessorConfig =&lt;br /&gt;
This is &amp;quot;nn::irsensor::PackedTeraPluginProcessorConfig&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is converted from [[#TeraPluginProcessorConfig]]. The data starting at offset 0x5 is only initialized by the user-process with [6.0.0+].&lt;br /&gt;
&lt;br /&gt;
[[#TeraPluginProcessorConfig]] +0x0, +0x2, and +0x3 are copied to +0x4, 0x6, and +0x7 here. +0x5 here is set to 0x2 | ([[#TeraPluginProcessorConfig]]+0x1 &amp;lt;&amp;lt; 7).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || [[#PackedMcuVersion|RequiredMcuVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x1 || Mode&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || 0x1 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PointingProcessorConfig =&lt;br /&gt;
This is &amp;quot;nn::irsensor::PointingProcessorConfig&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;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || WindowOfInterestX (default is 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || WindowOfInterestY (default is 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || WindowOfInterestWidth (default is 320)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x2 || WindowOfInterestHeight (default is 240)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PackedPointingProcessorConfig =&lt;br /&gt;
This is &amp;quot;nn::irsensor::PackedPointingProcessorConfig&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is converted from [[#PointingProcessorConfig]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || WindowOfInterestX (default is 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || WindowOfInterestY (default is 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || WindowOfInterestWidth (default is 320)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x2 || WindowOfInterestHeight (default is 240)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || [[#PackedMcuVersion|RequiredMcuVersion]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PackedMcuVersion =&lt;br /&gt;
This is &amp;quot;nn::irsensor::PackedMcuVersion&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;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || MajorVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || MinorVersion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Versions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MajorVersion || MinorVersion || SystemVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0xB || [1.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x12 || [4.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || 0x18 || [5.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1A || [6.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x1B || [8.0.0+]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PackedFunctionLevel =&lt;br /&gt;
This is nn::irsensor::PackedFunctionLevel.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || [[#IrSensorFunctionLevel]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x3 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IrSensorFunctionLevel ==&lt;br /&gt;
This is &amp;quot;nn::irsensor::IrSensorFunctionLevel&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;
! Value || SystemVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [1.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [4.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [5.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [6.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [8.0.0+]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ImageTransferProcessorExConfig =&lt;br /&gt;
This is &amp;quot;nn::irsensor::ImageTransferProcessorExConfig&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;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || ExposureTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || LightTarget&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || Gain&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || IsNegativeImageUsed&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x4 || [[#ImageTransferProcessorFormat|OrigFormat]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || [[#ImageTransferProcessorFormat|TrimmingFormat]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x2 || TrimmingStartX&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0x2 || TrimmingStartY&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x1 || IsExternalLightFilterEnabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PackedImageTransferProcessorExConfig =&lt;br /&gt;
This is &amp;quot;nn::irsensor::PackedImageTransferProcessorExConfig&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is converted from [[#ImageTransferProcessorExConfig]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || ExposureTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x1 || LightTarget&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || 0x1 || Gain&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x1 || IsNegativeImageUsed&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x5 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || [[#PackedMcuVersion|RequiredMcuVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x1 || [[#ImageTransferProcessorFormat|OrigFormat]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0x1 || [[#ImageTransferProcessorFormat|TrimmingFormat]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0x2 || TrimmingStartX&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x2 || TrimmingStartY&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0x1 || IsExternalLightFilterEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0x5 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IrLedProcessorConfig =&lt;br /&gt;
This is &amp;quot;nn::irsensor::IrLedProcessorConfig&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;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || LightTarget&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= PackedIrLedProcessorConfig =&lt;br /&gt;
This is &amp;quot;nn::irsensor::PackedIrLedProcessorConfig&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is converted from [[#IrLedProcessorConfig]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || [[#PackedMcuVersion|RequiredMcuVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x1 || LightTarget&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || 0x3 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AdaptiveClusteringProcessorConfig =&lt;br /&gt;
This is &amp;quot;nn::irsensor::AdaptiveClusteringProcessorConfig&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
AdaptiveClusteringProcessor was added with [5.0.0+].&lt;br /&gt;
&lt;br /&gt;
This is converted to [[#TeraPluginProcessorConfig]] by the user-process. [[#TeraPluginProcessorConfig]]+0x3 is zero.&lt;br /&gt;
&lt;br /&gt;
The default config is all-zero.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || [[#AdaptiveClusteringMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || [6.0.0+] [[#AdaptiveClusteringTargetDistance]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AdaptiveClusteringMode ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || StaticFov&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DynamicFov&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls the mode for [[#TeraPluginProcessorConfig]] (DynamicFov -&amp;gt; 0x10; StaticFov -&amp;gt; 0x0F).&lt;br /&gt;
&lt;br /&gt;
== AdaptiveClusteringTargetDistance ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Near&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Middle&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Far&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls the second and third bytes for [[#TeraPluginProcessorConfig]] (Near-&amp;gt; 0x00, 0x00; Middle -&amp;gt; 0x01, 0x03; Far -&amp;gt; 0x01, 0x08).&lt;br /&gt;
&lt;br /&gt;
= HandAnalysisConfig =&lt;br /&gt;
This is &amp;quot;nn::irsensor::HandAnalysisConfig&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is converted to [[#TeraPluginProcessorConfig]] by the user-process, which is all-zero except the mode.&lt;br /&gt;
* pre-4.0.0: [[#TeraPluginProcessorConfig]] mode = [[#HandAnalysisMode]] - 1.&lt;br /&gt;
* [4.0.0+]: Silhouette = 0x5, Image = 0x6, SilhouetteAndImage = 0x7, SilhouetteOnly = 0xA.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || [[#HandAnalysisMode]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HandAnalysisMode ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || None (invalid)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Silhouette&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Image&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SilhouetteAndImage&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [4.0.0+] SilhouetteOnly&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BusHandle =&lt;br /&gt;
This is &amp;quot;nn::hidbus::BusHandle&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;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || AbstractedPadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x1 || InternalIndex&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || 0x1 || PlayerNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || BusTypeId&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || IsValid&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= JoyPollingReceivedData =&lt;br /&gt;
This is &amp;quot;nn::hidbus::JoyPollingReceivedData&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is copied from the entries in [[#EnableJoyPollingReceiveMode|TransferMemory]] by GetJoyPollingReceivedData.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x30 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x8 || OutSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x8 || SamplingNumber&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BusType =&lt;br /&gt;
This is &amp;quot;nn::hidbus::BusType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || LeftJoyRail&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RightJoyRail&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [6.0.0+] InternalBus (for Lark microphone)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= JoyPollingMode =&lt;br /&gt;
This is &amp;quot;nn::hidbus::JoyPollingMode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SixAxisSensorDisable&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SixAxisSensorEnable&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ButtonOnly&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Other values causes [[#EnableJoyPollingReceiveMode]] to assert.&lt;br /&gt;
&lt;br /&gt;
= StatusManagerType =&lt;br /&gt;
This is &amp;quot;nn::hidbus::detail::StatusManagerType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || None&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 16&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ExternalDevices =&lt;br /&gt;
The following devices are used via hidbus:&lt;br /&gt;
* [[Ring-Con]]&lt;br /&gt;
* Famicom right controller (with microphone)&lt;br /&gt;
** [[#BusType]] is 2, ExternalDeviceId is 0x21. SendAndReceive is not used. EnableJoyPollingReceiveMode is used where the input buffer is an u32 with value 0, [[#JoyPollingMode]] = 2. GetJoyPollingReceivedData is used to get the output data.&lt;br /&gt;
* Used by Starlink: Battle For Atlas.&lt;br /&gt;
** [[#BusType]] is 1, ExternalDeviceId is 0x28. EnableJoyPollingReceiveMode is used where the input buffer is an u16 with value 0x09, [[#JoyPollingMode]] = 0. SendAndReceive is called from 1 func. GetJoyPollingReceivedData is used to determine whether to call the same func which calls SendAndReceive, which is only done if &amp;lt;code&amp;gt;out_size==0x4 &amp;amp;&amp;amp; data[0]==0x09 &amp;amp;&amp;amp; (data[1] &amp;amp; 1 == 1)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= RomFS =&lt;br /&gt;
The hid-sysmodule RomFS contains:&lt;br /&gt;
  ftmFwUpdate&lt;br /&gt;
    ├── NTD_4CD_1801.fts256&lt;br /&gt;
    ├── NTD_4CD_2602.fts256&lt;br /&gt;
    ├── NTD_4CD_3801.fts256&lt;br /&gt;
    └── NTD_4CD_xxxx.fts256 [7.0.0+]&lt;br /&gt;
&lt;br /&gt;
These are firmware files for the touchscreen controller.&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] The hid-sysmodule RomFS now contains:&lt;br /&gt;
  ftmFwUpdate&lt;br /&gt;
    ├── FTS_00120100.fts256&lt;br /&gt;
    ├── FTS_32000001.fts256&lt;br /&gt;
    ├── FTS_32000102.fts256&lt;br /&gt;
    ├── FTS_32000302.fts256&lt;br /&gt;
    └── FTS_32000402.fts256&lt;br /&gt;
&lt;br /&gt;
= Firmware update =&lt;br /&gt;
HID-sysmodule mounts the contents of title [[Title_list|0100000000000822]] as &amp;quot;systemData&amp;quot; or the contents of title [[Title_list|010000000000B22B]] as &amp;quot;systemDataD&amp;quot;. Both titles contain the same files, but [[Title_list|0100000000000822]] is used on retail units while [[Title_list|010000000000B22B]] is used for development.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+]: The RomFs for hid-sysmodule was removed, the data which used to be in that RomFs was moved into this SystemData (the below .fts256 files).&lt;br /&gt;
&lt;br /&gt;
These titles contain the following files:&lt;br /&gt;
* &#039;&#039;&#039;ExpectVersionInfo.csv&#039;&#039;&#039; - List in the format &amp;quot;[device],[type],[version]&amp;quot; where &amp;quot;device&amp;quot; can be &amp;quot;JoyLeft&amp;quot;, &amp;quot;JoyRight&amp;quot;, &amp;quot;FullKey&amp;quot;, &amp;quot;Palma&amp;quot; or &amp;quot;Handheld&amp;quot;, &amp;quot;type&amp;quot; can be &amp;quot;BT&amp;quot;, &amp;quot;MCU&amp;quot;, &amp;quot;USB&amp;quot; or &amp;quot;SioH&amp;quot; and &amp;quot;version&amp;quot; is the hexadecimal representation of the firmware file&#039;s version.&lt;br /&gt;
* &#039;&#039;&#039;FirmwareInfo.csv&#039;&#039;&#039; - List in the format &amp;quot;[device],[type],[version],[file]&amp;quot; where &amp;quot;device&amp;quot;, &amp;quot;type&amp;quot; and &amp;quot;version&amp;quot; should match the values from &amp;quot;ExpectVersionInfo&amp;quot; and &amp;quot;file&amp;quot; is the name of the firmware file.&lt;br /&gt;
* &#039;&#039;&#039;ukyosakyo_ep2_ota.bin&#039;&#039;&#039; - Left/Right Joy-Con BT firmware.&lt;br /&gt;
* &#039;&#039;&#039;raizo_ep2_ota.bin&#039;&#039;&#039; - Pro Controller BT firmware.&lt;br /&gt;
* &#039;&#039;&#039;tera_ota.bin&#039;&#039;&#039; - Right Joy-Con MCU firmware. &lt;br /&gt;
* &#039;&#039;&#039;tera_ota_iap.bin&#039;&#039;&#039; - Right Joy-Con MCU (IAP profile) firmware.&lt;br /&gt;
* &#039;&#039;&#039;tera_fullkey_ota.bin&#039;&#039;&#039; - Pro Controller MCU firmware.&lt;br /&gt;
* &#039;&#039;&#039;tera_fullkey_ota_iap.bin&#039;&#039;&#039; - Pro Controller MCU (IAP profile) firmware.&lt;br /&gt;
* [6.0.0+] &#039;&#039;&#039;ProController.dfu&#039;&#039;&#039; - Pro Controller USB firmware.&lt;br /&gt;
* [6.1.0+] &#039;&#039;&#039;PalmaFw.bin&#039;&#039;&#039; - Poké Ball Plus BT firmware.&lt;br /&gt;
* [9.0.0+] &#039;&#039;&#039;ExpectVersionInfo-platform.hoag.csv&#039;&#039;&#039; - Same as &amp;quot;ExpectVersionInfo.csv&amp;quot; but for the Switch Lite platform.&lt;br /&gt;
* [9.0.0+] &#039;&#039;&#039;FirmwareInfo-platform.hoag.csv&#039;&#039;&#039; - Same as &amp;quot;FirmwareInfo.csv&amp;quot; but for the Switch Lite platform.&lt;br /&gt;
* [9.0.0+] &#039;&#039;&#039;sioh.bin&#039;&#039;&#039; - Switch Lite Joy-Con firmware. &lt;br /&gt;
* [9.0.0+] &#039;&#039;&#039;sioh_iap.bin&#039;&#039;&#039; - Switch Lite Joy-Con (IAP profile) firmware.&lt;br /&gt;
* [10.0.0+] &#039;&#039;&#039;FTS_00120100.fts256&#039;&#039;&#039;&lt;br /&gt;
* [10.0.0+] &#039;&#039;&#039;FTS_32000001.fts256&#039;&#039;&#039;&lt;br /&gt;
* [10.0.0+] &#039;&#039;&#039;FTS_32000102.fts256&#039;&#039;&#039;&lt;br /&gt;
* [10.0.0+] &#039;&#039;&#039;FTS_32000302.fts256&#039;&#039;&#039;&lt;br /&gt;
* [10.0.0+] &#039;&#039;&#039;FTS_32000402.fts256&#039;&#039;&#039;&lt;br /&gt;
* [10.0.0+] &#039;&#039;&#039;TouchScreenConfiguration.csv&#039;&#039;&#039;&lt;br /&gt;
* [10.0.0+] &#039;&#039;&#039;TouchScreenFirmwareInfo.csv&#039;&#039;&#039;&lt;br /&gt;
* [13.0.0+] &#039;&#039;&#039;FTS_33000510.fts256&#039;&#039;&#039;&lt;br /&gt;
* [13.0.0+] &#039;&#039;&#039;FTS_98000004.ftb&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Testpads&amp;diff=10950</id>
		<title>Testpads</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Testpads&amp;diff=10950"/>
		<updated>2021-05-15T06:15:25Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: Notes on JTAG and lockout&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo Switch mainboard has a series of testpads on the front and back, presumably used in factory test, diagnostics, and early board bringup procedures.&lt;br /&gt;
&lt;br /&gt;
== Raw Logic captures ==&lt;br /&gt;
&lt;br /&gt;
These are reference materials, taken from poking at I/O on various testpads. https://github.com/hedgeberg/Switch-Logic-Captures&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
[[File:Switchre_side1.jpg|200px]]&lt;br /&gt;
[[File:Switchre_side2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== Pinouts ==&lt;br /&gt;
&lt;br /&gt;
=== Cluster A ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Batt GND? || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Battery pulse? || Pulse train || 0-3.3V || L-5? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Battery Vdd || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Speaker R + || Square wave || 0-3.3V || ||  || Speaker Right +&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Speaker R - || Square wave || 0-3.3V || ||  || Speaker Right -&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Weak GND? || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SDA || I2C || 0-1.8V || || || I2C Port 0	&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SCL || I2C || 0-1.8V  || || || I2C Port 0&lt;br /&gt;
|-&lt;br /&gt;
| 9 || USB-PWR-WAVE? || Square wave || 0-3.3V || K-4, K-5? || ~11 Hz || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || USB-PWR-WAVE? || Square wave || 0-3.3V || K-4, K-5? || ~11 Hz || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster B ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||  || DBVDD || || || || from ALC5639 pin 43&lt;br /&gt;
|-&lt;br /&gt;
| 2 || D+ || USB-C || || || || Cluster B - 3&lt;br /&gt;
|-&lt;br /&gt;
| 3 || D- || USB-C || || || || Cluster B - 2&lt;br /&gt;
|-&lt;br /&gt;
| 4 || +3.3V || XRST || || || || from M92T36 pin 4&lt;br /&gt;
|-&lt;br /&gt;
| 5 || +3.3V || VSVR || || || || from M92T36 pin 6&lt;br /&gt;
|-&lt;br /&gt;
| 5(b) || VUSB || VB || || || || from M92T36 pin 9&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GND ||  || || || || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster C ===&lt;br /&gt;
The JTAG pins are multiplexed between NV_JTAG and ARM_JTAG by the TRST pin:&lt;br /&gt;
&lt;br /&gt;
* NV_JTAG contains a single TAP (ID 0x221173D7) for boundary scan board verification.&lt;br /&gt;
* ARM_JTAG contains two debugging TAPs for CoreSight (ID 0x5BA00477) and BPMP (ID 0x4F1F0F0F).&lt;br /&gt;
&lt;br /&gt;
Note: NV_JTAG and ARM_JTAG are locked out by [[Fuses#Cache|FUSE_ARM_JTAG_DIS]] on production devices.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || JTAG_TDI || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART1_RX || || 0-1.8V || || || UART-A RX&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART1_TX || || 0-1.8V || || || UART-A TX&lt;br /&gt;
|-&lt;br /&gt;
| 4 || JTAG_TCK || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || JTAG_RTCK || || 0-1.8V || || || Unused for NV_JTAG&lt;br /&gt;
|-&lt;br /&gt;
| 6 || UART1_RTS || || 0-1.8V || || || UART-A RTS Flow control&lt;br /&gt;
|-&lt;br /&gt;
| 7 || JTAG_TDO || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || UART1_CTS || || 0-1.8V || || || UART-A CTS Flow control&lt;br /&gt;
|-&lt;br /&gt;
| 9 || JTAG_TMS || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || JTAG_TRST_N || || 0-1.8V || || || Not a TAP reset; Multiplexes between NV_JTAG (HI) and ARM_JTAG (LO)&lt;br /&gt;
|-&lt;br /&gt;
| 11 || +1.8V || || 0-1.8V || || || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster D ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Seaker L + || || || || || Speaker Left +&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Seaker L - || || || || || Speaker Left - &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster E ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Vol (-)  || || || || || Button Vol (-)&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Reset || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 || Power Button || Pushbutton || 4V-0V || || || Active low&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster G ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SD card detect || || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || GND || || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || Vol(+) || || || || || Button Vol (+)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Li-Ion Batt Vdd Mirror || || || || || Power Supply&lt;br /&gt;
|-&lt;br /&gt;
| 9 || BUTTON_HOME || || || || || RCM strap&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster H ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||  || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||  || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 ||  || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Screen_on || On/Off || 0-1.8v || I-2 ||  || Screen power state, active high&lt;br /&gt;
|-&lt;br /&gt;
| 5 ||  || Flow control || 0-1.8V || I-5 || Flow control for pad I-4? ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||  || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 ||  || UART || 0-1.8V || I-4 || 1.5MBaud?||&lt;br /&gt;
|-&lt;br /&gt;
| 8 ||  || UART || 0-1.8V || I-3 || 1.5MBaud?||&lt;br /&gt;
|-&lt;br /&gt;
| 9 ||  || || ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||  || || || || H-12 || On the same trace&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||  || || || || || Goes to a small ceramic cap near WiFi/BT IC?&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||  || || || H-10 || || On the same trace&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster I ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Screen_on || On/Off || 0-1.8V || || || Screen power state, active high&lt;br /&gt;
|-&lt;br /&gt;
| 3 || || UART || 0-1.8V || || 1.5MBaud? || Communication CPU -&amp;gt; Bluetooth using HCI &lt;br /&gt;
|-&lt;br /&gt;
| 4 || || UART || 0-1.8V || || 1.5MBaud? || Communication Bluetooth -&amp;gt; CPU using HCI &lt;br /&gt;
|-&lt;br /&gt;
| 5 || || Flow control || 0-1.8V || || || Flow control for pad I-4?&lt;br /&gt;
|-&lt;br /&gt;
| 6 || || || 0-1.8V || || || Needs testing with chip/touch screen interface board plugged in&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster J ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ? || Edge || 0-1.8V || || || Turns on around same time as pad J-3&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ? || Edge || 0-1.8V || || || Turns on around same time as pad J-1, slightly after&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Power button || Pushbutton || 4V-0V || || || Active low&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ? || Constant? || 0V || Ground?-NT || ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ? || Edge || 0-1.8V || || || Turns on with pad J-6, ~1s after J-1/J-3&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ? || Edge || 0-1.8V || || || Turns on with pad J-5, ~1s after J-1/J-3&lt;br /&gt;
|-&lt;br /&gt;
| 8 || ? || Edge? || 0-1.8V || || || Turns on ~1s after J-6/J-7, turns off at unknown point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster K ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || D- || USB-C || || || || Cluster B - 3&lt;br /&gt;
|-&lt;br /&gt;
| 3 || D+ || USB-C || || || || Cluster B - 2&lt;br /&gt;
|-&lt;br /&gt;
| 4 || USB-PWR-WAVE? || Square wave || 0V-3.3V || A-9, A-10? || ~11 Hz ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || USB-PWR-WAVE? || Square wave || 0V-3.3V || A-9, A-10? || ~11 Hz || Appears to mirror K4. Duty cycle 66.67%. Low on screen lock. Off until first interaction.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || USB-C V+ || Supply power || || || || support fast charger : &amp;quot;normal mode = 5V+&amp;quot;  &amp;quot;Fast changer = 12V+&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| 7 || BQ24193 VBUS + M92T36 VEX || Power supply? || ~3V-0V || None known || N/A || 0 when usb-c not plugged in, falls slowly on first interaction if USB-C plugged in. Power draw related?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster L ===&lt;br /&gt;
&lt;br /&gt;
TODO: Update diagram&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Li-Ion Batt Vdd Mirror || Power Supply || Std. Li-Ion || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Li-Ion Batt Vdd || Battery Input || Std. Li-Ion || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Mirrored Ground? || || || || || Holds steady @ 0, looks like a decoupled isolated ground&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Battery pulse? ||  || || || &amp;lt;1 Hz || Duty cycle ~0%&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GND || || || || ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Testpads&amp;diff=10907</id>
		<title>Testpads</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Testpads&amp;diff=10907"/>
		<updated>2021-05-02T04:41:34Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: JTAG pins and UART-A ball names&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo Switch mainboard has a series of testpads on the front and back, presumably used in factory test, diagnostics, and early board bringup procedures.&lt;br /&gt;
&lt;br /&gt;
== Raw Logic captures ==&lt;br /&gt;
&lt;br /&gt;
These are reference materials, taken from poking at I/O on various testpads. https://github.com/hedgeberg/Switch-Logic-Captures&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
[[File:Switchre_side1.jpg|200px]]&lt;br /&gt;
[[File:Switchre_side2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== Pinouts ==&lt;br /&gt;
&lt;br /&gt;
=== Cluster A ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Batt GND? || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Battery pulse? || Pulse train || 0-3.3V || L-5? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Battery Vdd || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Speaker R + || Square wave || 0-3.3V || ||  || Speaker Right +&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Speaker R - || Square wave || 0-3.3V || ||  || Speaker Right -&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Weak GND? || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SDA || I2C || 0-1.8V || || || I2C Port 0	&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SCL || I2C || 0-1.8V  || || || I2C Port 0&lt;br /&gt;
|-&lt;br /&gt;
| 9 || USB-PWR-WAVE? || Square wave || 0-3.3V || K-4, K-5? || ~11 Hz || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || USB-PWR-WAVE? || Square wave || 0-3.3V || K-4, K-5? || ~11 Hz || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster B ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||  || DBVDD || || || || from ALC5639 pin 43&lt;br /&gt;
|-&lt;br /&gt;
| 2 || D+ || USB-C || || || || Cluster B - 3&lt;br /&gt;
|-&lt;br /&gt;
| 3 || D- || USB-C || || || || Cluster B - 2&lt;br /&gt;
|-&lt;br /&gt;
| 4 || +3.3V || XRST || || || || from M92T36 pin 4&lt;br /&gt;
|-&lt;br /&gt;
| 5 || +3.3V || VSVR || || || || from M92T36 pin 6&lt;br /&gt;
|-&lt;br /&gt;
| 5(b) || VUSB || VB || || || || from M92T36 pin 9&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GND ||  || || || || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster C ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || JTAG_TDI || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART1_RX || || 0-1.8V || || || UART-A RX&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART1_TX || || 0-1.8V || || || UART-A TX&lt;br /&gt;
|-&lt;br /&gt;
| 4 || JTAG_TCK || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || JTAG_RTCK || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || UART1_RTS || || 0-1.8V || || || UART-A RTS Flow control&lt;br /&gt;
|-&lt;br /&gt;
| 7 || JTAG_TDO || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || UART1_CTS || || 0-1.8V || || || UART-A CTS Flow control&lt;br /&gt;
|-&lt;br /&gt;
| 9 || JTAG_TMS || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || JTAG_TRST_N || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 11 || +1.8V || || 0-1.8V || || || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster D ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Seaker L + || || || || || Speaker Left +&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Seaker L - || || || || || Speaker Left - &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster E ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Vol (-)  || || || || || Button Vol (-)&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Reset || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 || Power Button || Pushbutton || 4V-0V || || || Active low&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster G ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SD card detect || || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || GND || || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || Vol(+) || || || || || Button Vol (+)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Li-Ion Batt Vdd Mirror || || || || || Power Supply&lt;br /&gt;
|-&lt;br /&gt;
| 9 || BUTTON_HOME || || || || || RCM strap&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster H ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||  || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||  || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 ||  || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Screen_on || On/Off || 0-1.8v || I-2 ||  || Screen power state, active high&lt;br /&gt;
|-&lt;br /&gt;
| 5 ||  || Flow control || 0-1.8V || I-5 || Flow control for pad I-4? ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||  || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 ||  || UART || 0-1.8V || I-4 || 1.5MBaud?||&lt;br /&gt;
|-&lt;br /&gt;
| 8 ||  || UART || 0-1.8V || I-3 || 1.5MBaud?||&lt;br /&gt;
|-&lt;br /&gt;
| 9 ||  || || ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||  || || || || H-12 || On the same trace&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||  || || || || || Goes to a small ceramic cap near WiFi/BT IC?&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||  || || || H-10 || || On the same trace&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster I ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Screen_on || On/Off || 0-1.8V || || || Screen power state, active high&lt;br /&gt;
|-&lt;br /&gt;
| 3 || || UART || 0-1.8V || || 1.5MBaud? || Communication CPU -&amp;gt; Bluetooth using HCI &lt;br /&gt;
|-&lt;br /&gt;
| 4 || || UART || 0-1.8V || || 1.5MBaud? || Communication Bluetooth -&amp;gt; CPU using HCI &lt;br /&gt;
|-&lt;br /&gt;
| 5 || || Flow control || 0-1.8V || || || Flow control for pad I-4?&lt;br /&gt;
|-&lt;br /&gt;
| 6 || || || 0-1.8V || || || Needs testing with chip/touch screen interface board plugged in&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster J ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ? || Edge || 0-1.8V || || || Turns on around same time as pad J-3&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ? || Edge || 0-1.8V || || || Turns on around same time as pad J-1, slightly after&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Power button || Pushbutton || 4V-0V || || || Active low&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ? || Constant? || 0V || Ground?-NT || ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ? || Edge || 0-1.8V || || || Turns on with pad J-6, ~1s after J-1/J-3&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ? || Edge || 0-1.8V || || || Turns on with pad J-5, ~1s after J-1/J-3&lt;br /&gt;
|-&lt;br /&gt;
| 8 || ? || Edge? || 0-1.8V || || || Turns on ~1s after J-6/J-7, turns off at unknown point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster K ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || D- || USB-C || || || || Cluster B - 3&lt;br /&gt;
|-&lt;br /&gt;
| 3 || D+ || USB-C || || || || Cluster B - 2&lt;br /&gt;
|-&lt;br /&gt;
| 4 || USB-PWR-WAVE? || Square wave || 0V-3.3V || A-9, A-10? || ~11 Hz ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || USB-PWR-WAVE? || Square wave || 0V-3.3V || A-9, A-10? || ~11 Hz || Appears to mirror K4. Duty cycle 66.67%. Low on screen lock. Off until first interaction.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || USB-C V+ || Supply power || || || || support fast charger : &amp;quot;normal mode = 5V+&amp;quot;  &amp;quot;Fast changer = 12V+&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| 7 || BQ24193 VBUS + M92T36 VEX || Power supply? || ~3V-0V || None known || N/A || 0 when usb-c not plugged in, falls slowly on first interaction if USB-C plugged in. Power draw related?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster L ===&lt;br /&gt;
&lt;br /&gt;
TODO: Update diagram&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Li-Ion Batt Vdd Mirror || Power Supply || Std. Li-Ion || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Li-Ion Batt Vdd || Battery Input || Std. Li-Ion || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Mirrored Ground? || || || || || Holds steady @ 0, looks like a decoupled isolated ground&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Battery pulse? ||  || || || &amp;lt;1 Hz || Duty cycle ~0%&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GND || || || || ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Testpads&amp;diff=10905</id>
		<title>Testpads</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Testpads&amp;diff=10905"/>
		<updated>2021-05-01T06:11:49Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: Cluster G TP1 - SD card detect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo Switch mainboard has a series of testpads on the front and back, presumably used in factory test, diagnostics, and early board bringup procedures.&lt;br /&gt;
&lt;br /&gt;
== Raw Logic captures ==&lt;br /&gt;
&lt;br /&gt;
These are reference materials, taken from poking at I/O on various testpads. https://github.com/hedgeberg/Switch-Logic-Captures&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
[[File:Switchre_side1.jpg|200px]]&lt;br /&gt;
[[File:Switchre_side2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== Pinouts ==&lt;br /&gt;
&lt;br /&gt;
=== Cluster A ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Batt GND? || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Battery pulse? || Pulse train || 0-3.3V || L-5? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Battery Vdd || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Speaker R + || Square wave || 0-3.3V || ||  || Speaker Right +&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Speaker R - || Square wave || 0-3.3V || ||  || Speaker Right -&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Weak GND? || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SDA || I2C || 0-1.8V || || || I2C Port 0	&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SCL || I2C || 0-1.8V  || || || I2C Port 0&lt;br /&gt;
|-&lt;br /&gt;
| 9 || USB-PWR-WAVE? || Square wave || 0-3.3V || K-4, K-5? || ~11 Hz || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || USB-PWR-WAVE? || Square wave || 0-3.3V || K-4, K-5? || ~11 Hz || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster B ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||  || DBVDD || || || || from ALC5639 pin 43&lt;br /&gt;
|-&lt;br /&gt;
| 2 || D+ || USB-C || || || || Cluster B - 3&lt;br /&gt;
|-&lt;br /&gt;
| 3 || D- || USB-C || || || || Cluster B - 2&lt;br /&gt;
|-&lt;br /&gt;
| 4 || +3.3V || XRST || || || || from M92T36 pin 4&lt;br /&gt;
|-&lt;br /&gt;
| 5 || +3.3V || VSVR || || || || from M92T36 pin 6&lt;br /&gt;
|-&lt;br /&gt;
| 5(b) || VUSB || VB || || || || from M92T36 pin 9&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GND ||  || || || || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster C ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ?? || || 0-1.8V || || || No clue. This is definitely important, we just have no idea how. May need to interface with dock for comms.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-A RX || || 0-1.8V || || || UART input&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-A TX || || 0-1.8V || || || UART output&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || UART-A RTS || || 0-1.8V || || || UART-A Flow control&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || UART-A CTS || || 0-1.8V || || || UART-A Flow control&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 11 || +1.8V || || 0-1.8V || || || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster D ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Seaker L + || || || || || Speaker Left +&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Seaker L - || || || || || Speaker Left - &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster E ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Vol (-)  || || || || || Button Vol (-)&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Reset || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 || Power Button || Pushbutton || 4V-0V || || || Active low&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster G ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SD card detect || || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || GND || || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || Vol(+) || || || || || Button Vol (+)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Li-Ion Batt Vdd Mirror || || || || || Power Supply&lt;br /&gt;
|-&lt;br /&gt;
| 9 || BUTTON_HOME || || || || || RCM strap&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster H ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||  || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||  || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 ||  || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Screen_on || On/Off || 0-1.8v || I-2 ||  || Screen power state, active high&lt;br /&gt;
|-&lt;br /&gt;
| 5 ||  || Flow control || 0-1.8V || I-5 || Flow control for pad I-4? ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||  || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 ||  || UART || 0-1.8V || I-4 || 1.5MBaud?||&lt;br /&gt;
|-&lt;br /&gt;
| 8 ||  || UART || 0-1.8V || I-3 || 1.5MBaud?||&lt;br /&gt;
|-&lt;br /&gt;
| 9 ||  || || ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||  || || || || H-12 || On the same trace&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||  || || || || || Goes to a small ceramic cap near WiFi/BT IC?&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||  || || || H-10 || || On the same trace&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster I ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Screen_on || On/Off || 0-1.8V || || || Screen power state, active high&lt;br /&gt;
|-&lt;br /&gt;
| 3 || || UART || 0-1.8V || || 1.5MBaud? || Communication CPU -&amp;gt; Bluetooth using HCI &lt;br /&gt;
|-&lt;br /&gt;
| 4 || || UART || 0-1.8V || || 1.5MBaud? || Communication Bluetooth -&amp;gt; CPU using HCI &lt;br /&gt;
|-&lt;br /&gt;
| 5 || || Flow control || 0-1.8V || || || Flow control for pad I-4?&lt;br /&gt;
|-&lt;br /&gt;
| 6 || || || 0-1.8V || || || Needs testing with chip/touch screen interface board plugged in&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster J ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ? || Edge || 0-1.8V || || || Turns on around same time as pad J-3&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ? || Edge || 0-1.8V || || || Turns on around same time as pad J-1, slightly after&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Power button || Pushbutton || 4V-0V || || || Active low&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ? || Constant? || 0V || Ground?-NT || ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ? || Edge || 0-1.8V || || || Turns on with pad J-6, ~1s after J-1/J-3&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ? || Edge || 0-1.8V || || || Turns on with pad J-5, ~1s after J-1/J-3&lt;br /&gt;
|-&lt;br /&gt;
| 8 || ? || Edge? || 0-1.8V || || || Turns on ~1s after J-6/J-7, turns off at unknown point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster K ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || D- || USB-C || || || || Cluster B - 3&lt;br /&gt;
|-&lt;br /&gt;
| 3 || D+ || USB-C || || || || Cluster B - 2&lt;br /&gt;
|-&lt;br /&gt;
| 4 || USB-PWR-WAVE? || Square wave || 0V-3.3V || A-9, A-10? || ~11 Hz ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || USB-PWR-WAVE? || Square wave || 0V-3.3V || A-9, A-10? || ~11 Hz || Appears to mirror K4. Duty cycle 66.67%. Low on screen lock. Off until first interaction.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || USB-C V+ || Supply power || || || || support fast charger : &amp;quot;normal mode = 5V+&amp;quot;  &amp;quot;Fast changer = 12V+&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| 7 || BQ24193 VBUS + M92T36 VEX || Power supply? || ~3V-0V || None known || N/A || 0 when usb-c not plugged in, falls slowly on first interaction if USB-C plugged in. Power draw related?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster L ===&lt;br /&gt;
&lt;br /&gt;
TODO: Update diagram&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Li-Ion Batt Vdd Mirror || Power Supply || Std. Li-Ion || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Li-Ion Batt Vdd || Battery Input || Std. Li-Ion || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Mirrored Ground? || || || || || Holds steady @ 0, looks like a decoupled isolated ground&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Battery pulse? ||  || || || &amp;lt;1 Hz || Duty cycle ~0%&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GND || || || || ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Switch_System_Flaws&amp;diff=10904</id>
		<title>Switch System Flaws</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Switch_System_Flaws&amp;diff=10904"/>
		<updated>2021-04-30T19:55:13Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: not really a vulnerability per-se but funky flawed behavior nonetheless&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Exploits are used to execute unofficial code (homebrew) on the Nintendo Switch. This page is a list of publicly known Switch system flaws.&lt;br /&gt;
&lt;br /&gt;
For userland applications/applets flaws see [[Switch_Userland_Flaws|here]]. &lt;br /&gt;
&lt;br /&gt;
= System flaws =&lt;br /&gt;
== Hardware == &lt;br /&gt;
Flaws in this category pertain to the underlying hardware that powers the Switch.&lt;br /&gt;
&lt;br /&gt;
This includes components shared across Tegra based devices such as the [[TSEC]], the [[Security_Engine|Security Engine]], the [[GPU]] and so on.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Fixed with hardware model/revision&lt;br /&gt;
!  Newest hardware model/revision this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| CVE-2018-6242 (leveraged by the ShofEL2 and Fusée Gelée exploits)&lt;br /&gt;
| The USB software stack provided inside the boot instruction rom (IROM/bootROM) contains a copy operation whose length can be controlled by an attacker. By carefully constructing a USB control request, an attacker can leverage this vulnerability to copy the contents of an attacker-controlled buffer over the active execution stack, gaining control of the Boot and Power Management processor (BPMP) before any lock-outs or privilege reductions occur. This execution can then be used to exfiltrate secrets and to load arbitrary code onto the main CPU Complex (CCPLEX) &amp;quot;application processors&amp;quot; at the highest possible level of privilege (typically as the TrustZone Secure Monitor at PL3/EL3).&lt;br /&gt;
| HAC-001-01 (Mariko/Tegra214/Tegra210b01) (also fixed independently on Tegra186).&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| January 2018&lt;br /&gt;
| April 23, 2018&lt;br /&gt;
| [[User:Shuffle2|shuffle2]] and fail0verflow (originally),&amp;lt;br&amp;gt; [[User:Ktemkin|ktemkin]] and ReSwitched Team (independently),&amp;lt;br&amp;gt; [[User:Naehrwert|naehrwert]] (independently),&amp;lt;br&amp;gt; [[User:Hexkyz|hexkyz]] (independently),&amp;lt;br&amp;gt; st4rk with [[User:Shinyquagsire23|Shiny Quagsire]] and Dazzozo (independently),&amp;lt;br&amp;gt; and many others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| GMMU DMA attack&lt;br /&gt;
| The Switch&#039;s GPU includes a separate MMU (GMMU) that is allowed to bypass the system&#039;s IOMMU (SMMU). By accessing the GPU&#039;s MMIO region and manipulating the page table entries in the GMMU, an attacker can read/write any portion of the DRAM (except memory carveouts).&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] Works around this hardware flaw by using memory pool partitioning. You can no longer escalate into sysmodules with GPU DMA because all their memory is allocated using heap that&#039;s carved out.&lt;br /&gt;
&lt;br /&gt;
HAC-001-01 (Mariko/Tegra214/Tegra210b01): Fixes this by adding a new register which restricts what memory untranslated DMA requests may access. Untranslated GPU DMA may now only access the GPU carveout (physmem 0x80002000-0x80006000), which the GPU already has legitimate and exclusive access to.&lt;br /&gt;
| HAC-001-01 (Mariko/Tegra214/Tegra210b01)&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| Summer 2017&lt;br /&gt;
| December 28, 2017&lt;br /&gt;
| [[User:hexkyz|hexkyz]], [[User:SciresM|SciresM]] and [[User:qlutoo|qlutoo]]&lt;br /&gt;
|-&lt;br /&gt;
| Weak Security Engine context validation&lt;br /&gt;
| The Tegra X1 supports a &amp;quot;deep sleep&amp;quot; feature, where everything but DRAM and the PMC registers lose their content (and the SoC loses power). Upon awaking, the bootrom re-executes, restoring system state. Among these stored states is the Security Engine&#039;s saved state, which uses AES-128-CBC with a random key and all-zeroes IV. However, the bootrom doesn&#039;t perform a MAC on this data, and only validates the last block. This allows one to control most of security engine&#039;s state upon wakeup, if one has a way to modify the encrypted state buffer.&lt;br /&gt;
&lt;br /&gt;
With a way to modify the encrypted state buffer, one can thus dump keys from &amp;quot;write-only&amp;quot; keyslots, etc.&lt;br /&gt;
&lt;br /&gt;
This also bypasses the SBK protection of the bootROM: indeed, at warmboot, bootROM will always clear keyslot 0xE to prevent malicious code from saving the SBK. Moving the SBK to another keyslot in the saved context renders this protection moot.&lt;br /&gt;
&lt;br /&gt;
HAC-001-01 (Mariko/Tegra214/Tegra210b01): Fixes this by streamlining the context save process; security engine contexts are now saved to protected memory which the CPU cannot access or modify.&lt;br /&gt;
| HAC-001-01 (Mariko/Tegra214/Tegra210b01)&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| December 2017&lt;br /&gt;
| January 20, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]] and [[User:motezazer|motezazer]]&lt;br /&gt;
|-&lt;br /&gt;
| Security Engine keyslots vulnerable to partial overwrite attack&lt;br /&gt;
| &lt;br /&gt;
The Tegra X1 security engine supports writing keyslot data to the engine with syntax as follows: &lt;br /&gt;
&lt;br /&gt;
SECURITY_ENGINE-&amp;gt;AES_KEYTABLE_ADDR = (keyslot &amp;lt;&amp;lt; 4) | (dword_index_in_keyslot); &lt;br /&gt;
&lt;br /&gt;
SECURITY_ENGINE-&amp;gt;AES_KEYTABLE_DATA = readle32(key, dword_index_in_keyslot * 4); &lt;br /&gt;
&lt;br /&gt;
However, the Security Engine flushes writes to the internal key tables immediately when AES_KEYTABLE_DATA is written -- this allows one to overwrite a single dword of a key at a time, and thus brute force the contents of keyslots in time (2^32 * 8) = 2^35 instead of 2^256.&lt;br /&gt;
| None&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| Theorized Summer 2017 due to suggestive syntax, confirmed April 9, 2018&lt;br /&gt;
| April 9, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]], almost surely others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| Poor validation of bootrom SDRAM configuration parameters leads to arbitrary writes in bootrom&lt;br /&gt;
| &lt;br /&gt;
The Tegra X1 bootrom supports saving SDRAM parameters to scratch registers, and using the saved configuration to enable DRAM during warmboot.&lt;br /&gt;
&lt;br /&gt;
The code that parses these parameters does if (params-&amp;gt;EmcBctSpareN) *params-&amp;gt;EmcBctSpareN = params-&amp;gt;EmcBctSpareNPlusOne for most N, without validating either the address or value written to it.&lt;br /&gt;
There are other arbitrary writes in this code, as well (e.g. BootromPatch parameters intended for patching MISC registers do not check a relative offset to 0x7000000, etc).&lt;br /&gt;
&lt;br /&gt;
This allows a user with access to the PMC registers (via pre-sleep bpmp execution, or otherwise) to gain arbitrary bootrom code execution.&lt;br /&gt;
&lt;br /&gt;
HAC-001-01 (Mariko/Tegra214/Tegra210b01): Fixes this by validating that the spare writes/bootrom patch before performing them.&lt;br /&gt;
| HAC-001-01 (Mariko/Tegra214/Tegra210b01)&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| 2017&lt;br /&gt;
| December 16, 2018&lt;br /&gt;
| Everyone (independently).&lt;br /&gt;
|-&lt;br /&gt;
| TSEC ROM does not clear crypto registers after signature verification&lt;br /&gt;
|&lt;br /&gt;
TSEC supports executing signed-microcode at a greater privilege level than normal payloads.&lt;br /&gt;
&lt;br /&gt;
When jumping to signed microcode, the caller is expected to load hardware crypto register $c6 = &amp;lt;signature&amp;gt;, $c7 = &amp;lt;seed (zero for all officially-signed microcode)&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
TSEC ROM then calculates the expected signature and compares it to the user-supplied one in $c6. On match, the secure payload is executed, and on failure an exception is raised.&lt;br /&gt;
&lt;br /&gt;
However, TSEC ROM fails to clear the crypto registers used to calculate the expected signature in either of the success/failure cases.&lt;br /&gt;
&lt;br /&gt;
Thus, with some way of obtaining the contents of crypto registers (e.g. ROP under some secure payload), an attacker can dump intermediary values from signature calculation.&lt;br /&gt;
&lt;br /&gt;
With enough data/trial/error, this is enough to reconstruct the signature algorithm:&lt;br /&gt;
* mac = &amp;lt;davies meyer hash of (page || address of page) for each 0x100 page in the payload&amp;gt;&lt;br /&gt;
* key = AES-ENCRYPT(hardware csecret 0x1, seed)&lt;br /&gt;
* signature = AES-ENCRYPT(key, mac)&lt;br /&gt;
&lt;br /&gt;
| None&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| Late 2018/Early 2019&lt;br /&gt;
| August 2020&lt;br /&gt;
| [[User:qlutoo|qlutoo]]/[[User:Hexkyz|hexkyz]]/[[User:Shuffle2|shuffle2]], [[User:SciresM|SciresM]]/[[User:motezazer|motezazer]] (independently).&lt;br /&gt;
|-&lt;br /&gt;
| TSEC signature validation design flaw leads to fake-signing&lt;br /&gt;
|&lt;br /&gt;
As mentioned above, when jumping to signed microcode the caller is expected to load hardware crypto register $c6 = &amp;lt;signature&amp;gt;, $c7 = &amp;lt;seed (zero for all officially-signed microcode)&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
However, TSEC ROM performs no validation on the input seed used to generate the signing key.&lt;br /&gt;
&lt;br /&gt;
This leads to the following attack:&lt;br /&gt;
* Attacker gains rop under any secure microcode payload with signature = S.&lt;br /&gt;
* Attacker uses the &amp;quot;csigenc&amp;quot; instruction to obtain K = AES-ENCRYPT(hardware csecret 0x1, S).&lt;br /&gt;
* Attacker jumps to their own microcode with $c6 = &amp;lt;signature calculated on pc using K&amp;gt;, $c7 = S&lt;br /&gt;
* TSEC ROM calculates key = AES-ENCRYPT(hardware csecret 0x1, S) = K, and the signature check passes.&lt;br /&gt;
* Attackers microcode is executed in secure mode as though it were signed by NVidia.&lt;br /&gt;
&lt;br /&gt;
Thus an attacker who has exploited *any* secure payload may use this to obtain a &amp;quot;fake signature key&amp;quot;, which can be used to sign and execute arbitrary microcode in secure mode.&lt;br /&gt;
&lt;br /&gt;
Note: this does not break the TSEC cryptosystem, as the csigenc mechanism relies on the signature of the executing microcode, and fakesigning produces different signatures from NVidia that cannot be controlled.&lt;br /&gt;
| None&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| Late 2018/Early 2019&lt;br /&gt;
| August 2020&lt;br /&gt;
| [[User:qlutoo|qlutoo]]/[[User:Hexkyz|hexkyz]]/[[User:Shuffle2|shuffle2]], [[User:SciresM|SciresM]]/[[User:motezazer|motezazer]] (independently).&lt;br /&gt;
|-&lt;br /&gt;
| ROP under TSEC secure bootrom via DMA engine stack overwrite (--xploit)&lt;br /&gt;
| TSEC DMA engine does not stop when entering TSEC secure bootrom. By pointing TSEC DMA to current stack before secure bootrom entry, stack can be controlled. &lt;br /&gt;
&lt;br /&gt;
One can then use blind ROP against the TSEC secure bootrom (which is execute only, and cannot be dumped).&lt;br /&gt;
&lt;br /&gt;
With sufficient effort, an attacker can construct a ROP chain that leads to csigcmp being executed with fully controlled arguments.&lt;br /&gt;
&lt;br /&gt;
This allows for arbitrary heavy secure mode code execution with the current signature set to an arbitrary value.&lt;br /&gt;
&lt;br /&gt;
This completely breaks the TSEC cryptosystem, by allowing one to obtain the result of csigenc with signature = &amp;lt;any desired value&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This has many uses/results, notably including dumping the &amp;quot;true&amp;quot; signature key (set signature = zeroes, perform csigenc using csecret 0x1).&lt;br /&gt;
| None&lt;br /&gt;
| TSEC for all Tegra devices&lt;br /&gt;
| Late 2018&lt;br /&gt;
| Jan 2021&lt;br /&gt;
| [[User:Hexkyz|hexkyz]]/[[User:SciresM|SciresM]], [[User:Vale|Vale]]/[[User:Thog|Thog]] (independently), [[User:Tatsuko|Tatsuko]] (independently), possibly others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| Boot straps are not relatched on watchdog resets (strapwn)&lt;br /&gt;
| On boot, the BOOTSELECT, RCM and RAM_CODE straps are latched from external GPIO to determine which boot medium to use and verify from in bootrom. However, APB_MISC_PP_STRAPPING_OPT_A can be overwritten with arbitrary values following bootrom. Write access to PP_STRAPPING_OPT_A would otherwise be mundane, however these straps are not relatched during a watchdog reset (despite being latched during other software resets), allowing for arbitrary straps to be selected and executed in bootrom.&lt;br /&gt;
&lt;br /&gt;
This allows setting NVPROD_UART on some hardware configurations where it would normally be unavailable (ie on Jetson Nano boards), but is otherwise mostly useless and/or useful for testing unintended boot options (such as USB Mass Storage boot) without having to move boot strap resistors.&lt;br /&gt;
| Unknown&lt;br /&gt;
| HAC-001 (Tegra210)&lt;br /&gt;
| May 2020&lt;br /&gt;
| April 30, 2021&lt;br /&gt;
| [[User:Shinyquagsire23|Shiny Quagsire]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
=== Bootloader ===&lt;br /&gt;
Flaws in this category pertain to any bootloader component such as the [[Package1#Package1ldr|package1ldr]], the [[Package1#Section_1|NX bootloader]] or the [[Package1#Section_0|warmboot binary]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
|  Null-dereference in panic()&lt;br /&gt;
|  The Switch&#039;s stage 1 bootloader, on panic(), clears the stack and then attempts to clear the Security Engine. However, it does so by dereferencing a pointer to the SE in .bss (initially NULL), and this pointer doesn&#039;t get initialized until partway into the bootloader&#039;s main() after several functions that might panic() are called. Thus, a panic() caused prior to SE initialization would result in the SE pointer still being NULL when dereferenced. &lt;br /&gt;
The BPMP doesn&#039;t have an active MPU and the bus won&#039;t data abort on an invalid address, so no exception will be entered: it&#039;ll end up overwriting some exception vectors with NULL before halting.&lt;br /&gt;
&lt;br /&gt;
In 3.0.0, this was fixed by moving the security engine initialization earlier in main(), before the first function that could potentially panic().&lt;br /&gt;
|  Some exception vectors overwritten with NULL, before SBK/other keyslots are cleared. Probably useless for anything more interesting.&lt;br /&gt;
|  [[3.0.0]]&lt;br /&gt;
|  [[3.0.0]]&lt;br /&gt;
|  Early July, 2017&lt;br /&gt;
|  July 30, 2017&lt;br /&gt;
|  Everyone who diff&#039;d 2.3.0 and 3.0.0 Package1&lt;br /&gt;
|-&lt;br /&gt;
|  FUSE_DIS_PGM not written by package1 &lt;br /&gt;
|  The switch&#039;s hardware fuse driver contains a write-once bit in a register called &amp;quot;FUSE_DIS_PGM&amp;quot;, which disables burning fuses until the next reboot. While Nintendo&#039;s bootloader code for waking up from sleep writes this on all firmware, the actual package1 initial bootloader forgets to write to it on cold reboot. &lt;br /&gt;
&lt;br /&gt;
This isn&#039;t too big of a problem because another fuse is burnt on retail devices (production mode), which prevents burning *all* fuses other than ODM_RESERVED ones in hardware.&lt;br /&gt;
&lt;br /&gt;
This was fixed in 3.0.0 by writing to the register on cold boot (although the write happens in TZ instead of package1 where it should take place, possibly to obfuscate the fact that they made this mistake).&lt;br /&gt;
|  Burning arbitrary ODM reserved fuses with TZ code execution, which should never be possible for non-bootloader code.&lt;br /&gt;
&lt;br /&gt;
Warning: one could irreparably brick one&#039;s console by playing with this.&lt;br /&gt;
|  [[3.0.0]]&lt;br /&gt;
|  [[3.0.0]]&lt;br /&gt;
|  Late summer/early fall 2017&lt;br /&gt;
|  December 31, 2017&lt;br /&gt;
|  [[User:SciresM|SciresM]], [[User:motezazer|motezazer]]&lt;br /&gt;
|-&lt;br /&gt;
|  maconstack (TSEC firmware leaves MAC on the stack)&lt;br /&gt;
|  Package1ldr loads a firmware blob into TSEC early on boot. This piece of code runs on the TSEC in Authenticated Mode and has the sole purpose of generating the per-console TSEC key (see [[Cryptosystem]]).&lt;br /&gt;
&lt;br /&gt;
As a way to mitigate attacks, the TSEC firmware blob is split into 3 stages: [[TSEC_Firmware#Boot|Boot]] which is unencrypted and unsigned, [[TSEC_Firmware#KeygenLdr|KeygenLdr]] which is unencrypted but signed and [[TSEC_Firmware#Keygen|Keygen]] which is encrypted and signed.&lt;br /&gt;
Boot loads a static pre-generated signature into the Falcon&#039;s CPU crypto registers, loads KeygenLdr into the Falcon&#039;s CODE region and jumps to it. Execution will proceed into KeygenLdr in Heavy Secure Mode if, and only if, the loaded signature matches the one Falcon calculates internally for KeygenLdr.&lt;br /&gt;
&lt;br /&gt;
Among various things, KeygenLdr will attempt to do a &amp;quot;backwards&amp;quot; security check by calculating a CMAC over Boot and comparing it with a known hash stored in the TSEC firmware&#039;s key data (a small buffer stored after Boot&#039;s code). If the hashes don&#039;t match, execution aborts.&lt;br /&gt;
&lt;br /&gt;
KeygenLdr stores the calculated Boot&#039;s CMAC in the stack, but forgets to clear it. Since the stack is located in Falcon&#039;s DATA region, loading the TSEC firmware blob and dumping the DATA region afterwards (via MMIO) will reveal the calculated hash.&lt;br /&gt;
This allows using KeygenLdr as an oracle to generate a valid CMAC for arbitrary Boot code. Replacing the CMAC in the TSEC firmware&#039;s key data region results in KeygenLdr accepting any Boot code, thus rendering this security measure useless.&lt;br /&gt;
&lt;br /&gt;
Additionally, since signed Falcon code can&#039;t be revoked without an hardware revision, an attacker can always reuse the flawed KeygenLdr code even if a fix is issued.&lt;br /&gt;
|  Running TSEC firmware&#039;s KeygenLdr in a user controlled environment.&lt;br /&gt;
|  None&lt;br /&gt;
|  [[5.0.2]]&lt;br /&gt;
|  January 2018&lt;br /&gt;
|  April 29, 2018&lt;br /&gt;
|  [[User:Hexkyz|hexkyz]], [[User:Rei|Reisyukaku]] (independently), probably others (independently).&lt;br /&gt;
|-&lt;br /&gt;
|  Stack smash in TSEC firmware&#039;s KeygenLdr&lt;br /&gt;
|  Given that we can control the [[TSEC_Firmware#Key_data|key data]] (which is not authenticated) and the [[TSEC_Firmware#Boot|Boot]] blob (see &amp;quot;maconstack&amp;quot;), as well as the fact Non-secure and Heavy Secure code share the same stack, we can use this to attack KeygenLdr. KeygenLdr uses memcpy to copy over a payload to DMEM to verify it, which can be abused to smash the stack (in DMEM) and write over the return address of said function.&lt;br /&gt;
|  ROP under KeygenLdr in Heavy Secure mode.&lt;br /&gt;
|  None&lt;br /&gt;
|  [[8.0.1]]&lt;br /&gt;
|  Early 2018&lt;br /&gt;
|  May 21, 2019&lt;br /&gt;
|  Everyone (independently).&lt;br /&gt;
|-&lt;br /&gt;
|  pk1ldrhax&lt;br /&gt;
|  Package1ldr decrypts and verifies the keyblob inside of the current BCT in order to get the package1 key, and then uses the package1 key to decrypt package1. It then validates package1 before jumping to it by checking the PK11 magic number, and that the section sizes sum to the expected size (and are individually less than the expected size). &lt;br /&gt;
&lt;br /&gt;
However, package1ldr does not actually validate the package1 key against a fixed vector (much like kernel9loader forgot to do so on the 3ds). This would normally not matter, as keyblobs are validated -- however, with bootrom code execution one can dump SBK and forge keyblobs, and thus control the package1 key. &lt;br /&gt;
&lt;br /&gt;
Thus (&#039;&#039;&#039;in theory, but not in practice due to the size of the brute force required&#039;&#039;&#039;) one can replace the package1 key with garbage, causing package1 to decrypt into garbage, and hope that this garbage passes validation checks and that package1ldr jumping into the garbage will do something useful.&lt;br /&gt;
&lt;br /&gt;
This was fixed incidentally in [[6.2.0]], as pk1ldr does not use keyblob data to decrypt package1 any more.&lt;br /&gt;
&lt;br /&gt;
|  With a large enough brute force: arbitrary package1 code execution from coldboot.&lt;br /&gt;
&lt;br /&gt;
However, a usable brute force is on the order of &amp;gt;= ~2^80, so &#039;&#039;&#039;this is almost certainly not actually usable in any meaningful context&#039;&#039;&#039;.&lt;br /&gt;
|  [[6.2.0]]&lt;br /&gt;
|  [[6.2.0]]&lt;br /&gt;
|  Early 2017 (as soon as plaintext package1ldr was first dumped)&lt;br /&gt;
|  November 20, 2018&lt;br /&gt;
|  Everyone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TrustZone ===&lt;br /&gt;
Flaws in this category pertain exclusively to the [[Package1#Section_2|Secure Monitor]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
|  Non-atomic mutexes&lt;br /&gt;
|  When an [[SMC]] is called, TrustZone sets a global variable to mark that an SMC is in progress, so that two SMCs using shared resources (like the security engine) do not trample on one another. On 1.0.0, this global variable was written using non-atomic writes, and thus a race condition is possible.&lt;br /&gt;
&lt;br /&gt;
However, the SMC handler enforces that all SMCs must be called from core #3, unless the top-level handler ID is 1 (SMCs internal to the kernel). Thus, the only SMCs that can be run side-by-side are [any userland smc] and smcGetRandomBytesForKernel, and this turns out to not really be abusable.&lt;br /&gt;
| Mostly useless. Maybe some oob-write into unused (and thus useless) memory if running smcGetRandomBytesForKernel and smcGetRandomBytesForUser at the same time.&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| December 2017 (Probably earlier by others)&lt;br /&gt;
| January 18, 2018&lt;br /&gt;
| [[User:SciresM|SciresM]], probably others (independently).&lt;br /&gt;
|-&lt;br /&gt;
|  jamais vu (non-secure world access to PMC MMIO and pre-deep sleep firmware)&lt;br /&gt;
|  On [[1.0.0]], one could map in the PMC registers in userland. In addition, [[AM_services|am]] ran a little-kernel based firmware on the BPMP at runtime. With code execution under am, one could modify the BPMP&#039;s little-kernel firmware to hook deep sleep entry, and modify TrustZone/Security engine state. &lt;br /&gt;
&lt;br /&gt;
This was fixed in [[2.0.0]] by making the PMC secure-world only, blacklisting the BPMP&#039;s exception vectors from being mapped, and thoroughly checking for malicious behavior on deep sleep entry.&lt;br /&gt;
|  Arbitrary TrustZone code execution.&lt;br /&gt;
|  [[2.0.0]]&lt;br /&gt;
|  [[2.0.0]]&lt;br /&gt;
|  December, 2017&lt;br /&gt;
|  January 20, 2018&lt;br /&gt;
|  [[User:SciresM|SciresM]] and [[User:motezazer|motezazer]]&lt;br /&gt;
|-&lt;br /&gt;
|  Missed BPMP Exception Vector Writes&lt;br /&gt;
|  Starting in [[2.0.0]], the BPMP is asleep at runtime, and is turned on by TrustZone during [[SMC|smcCpuSuspend]] in order to initiate the deep sleep process. When it does so, it is held in RESET, and TrustZone attempts to write to the BPMP exception vectors at 0x6000F200 to register EVP_RESET = lp0_entry_fw_crt0, and all other EVPs to a function that simply reboots. However, while they successfully write EVP_RESET, they miss all the other vectors, accidentally writing to the 0x6000F004-0x6000F020 region instead of the 0x6000F204-0x6000F220 region they want to write to. This results in all the exception vectors for the BPMP other than RESET being &amp;quot;undefined&amp;quot; (attacker controlled).&lt;br /&gt;
&lt;br /&gt;
With some way of causing an exception vector to be taken at the right time, this would give pre-sleep code execution (and thus arbitrary TrustZone code execution, via the security engine flaw). However, none of the abort vectors are really triggerable, and interrupts are disabled for the BPMP when it is taken out of reset. Thus, this is useless in practice.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[4.0.0]] by writing to the correct registers.&lt;br /&gt;
|  Theoretically: Arbitrary TrustZone code execution. In practice: Useless.&lt;br /&gt;
|  [[4.0.0]]&lt;br /&gt;
|  [[4.0.0]]&lt;br /&gt;
|  January, 2018&lt;br /&gt;
|  February 23, 2018&lt;br /&gt;
|  [[User:SciresM|SciresM]] and [[User:motezazer|motezazer]], [[User:Naehrwert|naehrwert]], [[User:Hexkyz|hexkyz]], probably others (independently).&lt;br /&gt;
|-&lt;br /&gt;
|  TSEC has access to the secure kernel carveout &lt;br /&gt;
|  TrustZone is responsible for managing security carveouts to prevent DMA controllers from accessing the carveout which contains the kernel, sysmodules, and other critical operating system data.&lt;br /&gt;
&lt;br /&gt;
Until [[8.0.0]], the list of devices that could access the carveout included the TSEC. However, the TSEC can bypass the SMMU when in authenticated mode by writing to a certain register. Thus, pwning nvservices would allow one to take over the TSEC, and use it to write to normally protected mmio/memory.&lt;br /&gt;
&lt;br /&gt;
In [[8.0.0]], this was fixed by removing TSEC access, and adding TSECB access (TSECB cannot bypass the SMMU).&lt;br /&gt;
| With access to the TSEC mmio (nvservices ROP) and code execution in TSEC Heavy Secure mode, kernel code execution, probably.&lt;br /&gt;
| [[8.0.0]]&lt;br /&gt;
| [[8.0.0]]&lt;br /&gt;
| 2017 (when TrustZone code plaintext was first obtained).&lt;br /&gt;
| April 15, 2019&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
|  deja vu (insufficient system state validation on suspend leads to pre-sleep BPMP code execution)&lt;br /&gt;
|  Jamais Vu was fixed in [[2.0.0]] by making the PMC secure-world only, blacklisting the BPMP&#039;s exception vectors from being mapped, and thoroughly checking for malicious behavior on deep sleep entry, since gaining pre-sleep code execution on the BPMP compromises the system.&lt;br /&gt;
&lt;br /&gt;
However, the state validation performed by Nintendo&#039;s Secure Monitor was insufficient to prevent pre-sleep execution from being obtained.&lt;br /&gt;
&lt;br /&gt;
Prior to [[6.0.0]], one could use a DMA controller that had access to IRAM and was not held in reset (there were multiple) to race TrustZone&#039;s writes to the BPMP firmware in IRAM, and thus overwrite Nintendo&#039;s firmware with an attacker&#039;s to gain pre-sleep code execution.&lt;br /&gt;
&lt;br /&gt;
[[6.0.0]] addressed this by performing TrustZone state MAC writes and locking PMC scratch *before* turning on the BPMP, fixing the original Jamais Vu exploit entirely. In addition, the BPMP firmware in TrustZone&#039;s .rodata is now memcmp&#039;d to the actual data after it is written to IRAM. This mitigates race attacks that modify the firmware.&lt;br /&gt;
&lt;br /&gt;
However, Nintendo both forgot to validate the BPMP exception vectors after writing them, and forgot to hold in reset a DMA controller that can write to the BPMP&#039;s exception vectors.&lt;br /&gt;
&lt;br /&gt;
AHB-DMA is not blacklisted by kernel mapping whitelist (Nintendo probably forgot it, because the TX1 TRM does not really document that it&#039;s present, although the MMIO works as documented in older (Tegra 3 and before) TRMs).&lt;br /&gt;
&lt;br /&gt;
Thus, with kernel code execution (or some other way of accessing AHB-DMA, e.g. nspwn on &amp;lt;= 4.1.0, TSEC hax, or other arbitrary mmio access flaws), one can DMA to the BPMP&#039;s exception vectors as they are written, causing TrustZone to start the BPMP executing an attacker&#039;s firmware at a different location than TrustZone intends/validates.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[8.0.0]] by blocking AHB-DMA arbitration and verifying it is held in reset during suspend, and thus there are no more devices that can write to the relevant MMIO at the right time.&lt;br /&gt;
&lt;br /&gt;
|  Arbitrary TrustZone/BootROM code execution, by using either the original Jamais Vu flaw (prior to [[6.0.0]] or a warmboot bootrom exploit (any firmware where pre-sleep execution can be gained).&lt;br /&gt;
|  [[8.0.0]]&lt;br /&gt;
|  [[8.0.0]]&lt;br /&gt;
|  December 2017&lt;br /&gt;
|  April 15, 2019&lt;br /&gt;
|  [[User:SciresM|SciresM]], [[User:motezazer|motezazer]] and ktemkin,  [[User:Naehrwert|naehrwert]] (independently), almost certainly others (independently)&lt;br /&gt;
|-&lt;br /&gt;
| TrustZone allows using imported RSA exponents with arbitrary modulus&lt;br /&gt;
| TrustZone supports &amp;quot;importing&amp;quot; RSA private exponents for use by userland -- these are stored encrypted with TrustZone only keydata in NAND, and decrypted only to TZRAM. This prevents a console that has compromised userland from learning the private exponents of these keys and doing calculations with them offline. In practice, this is used for FS (gamecard communications), ES (drm), and SSL (console client cert communications).&lt;br /&gt;
&lt;br /&gt;
However, the actual SMC API only imports the RSA exponent, and not the modulus, which is passed separately by userland in each call. There is no validation done on the modulus passed in -- this means that userland can pass in any message and modulus it chooses, and obtain the result of (message ^ private exponent) % modulus back from the secure monitor.&lt;br /&gt;
&lt;br /&gt;
By choosing a prime number modulus P such that P has &amp;quot;smooth&amp;quot; order (totient(P) == P-1 is divisible only by &amp;quot;small&amp;quot; primes), one can efficiently use the [[wikipedia:Pohlig-Hellman algorithm|Pohlig-Hellman algorithm]] to calculate the discrete logarithm of such a result directly, and thus obtain the private exponent.&lt;br /&gt;
&lt;br /&gt;
This is mostly useless in practice, given the general availability of other exploits to obtain these decrypted exponents.&lt;br /&gt;
&lt;br /&gt;
This was fixed in 10.0.0 by importing the modulus in addition to the exponent for the ES device key and ES client cert key. For backwards compatibility reasons the SSL key and Lotus key still only import the exponent.&lt;br /&gt;
&lt;br /&gt;
StorageExpMod also now validates that the exponentiation of &amp;quot;DDDDD...&amp;quot; about the provided modulus by the imported exponent and then the fixed public exponent returns &amp;quot;DDDDD...&amp;quot;, and returns invalid argument if validation fails.&lt;br /&gt;
| With userland privileges sufficient to use an imported RSA key: obtaining that RSA key&#039;s private exponent.&lt;br /&gt;
|  [[10.0.0]]&lt;br /&gt;
|  [[10.0.0]]&lt;br /&gt;
|  August 14, 2019&lt;br /&gt;
|  August 14, 2019&lt;br /&gt;
|  [[User:SciresM|SciresM]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
Flaws in this category pertain exclusively to the [[Package2#Section_0|HorizonOS Kernel]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Syscall Infoleaks&lt;br /&gt;
| Many syscalls leaked kernel pointers on sad paths (for example svcSetHeapSize and svcQueryMemory), until they landed a bunch of fixes in 2.0.0.&lt;br /&gt;
| Nothing really.&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| svcWaitSynchronization/svcReplyAndReceive bad cleanup on error&lt;br /&gt;
| If there is a page fault when fetching handles from the userspace array, it cleans up by dereferencing all objects despite having only loaded first N. Allows the attacker to make arbitrary decrefs on any kernel synchronization object, and thus can be used to get UAF. Haven&#039;t actually been tried on real HW though, but should work (tm).&lt;br /&gt;
| Kernel code execution&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| &lt;br /&gt;
| 24 April&lt;br /&gt;
| [[User:qlutoo|qlutoo]]&lt;br /&gt;
|-&lt;br /&gt;
| Bad irq_id check in CreateInterruptEvent&lt;br /&gt;
| CreateInterruptEvent syscall is designed to work only for irq_id &amp;gt;= 32. All irq_ids &amp;lt; 32 are &amp;quot;per-core&amp;quot; and reserved for kernel use (watchdog/scheduling/core communications).&lt;br /&gt;
On 1.0.0 you could supply irq_id &amp;lt; 32 and it would write outside the SharedIrqs table.&lt;br /&gt;
| You can register irq&#039;s in the Core3Irqs table, and thus register per-core irqs for core3, that are normally reserved for kernel. Useless.&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| ~October&lt;br /&gt;
| 17 October&lt;br /&gt;
| [[User:qlutoo|qlutoo]]&lt;br /&gt;
|-&lt;br /&gt;
| Kernel .text mapped executable in usermode&lt;br /&gt;
| Prior to [[3.0.2]] the kernel .text was [[Memory_layout|mapped]] in usermode as executable. This can be used for usermode ROP for bypassing ASLR, but SVCs/IPC are not usable by running kernel .text in usermode.&lt;br /&gt;
| Executing kernel .text in usermode&lt;br /&gt;
| [[3.0.2]]&lt;br /&gt;
| [[3.0.2]]&lt;br /&gt;
| &lt;br /&gt;
| 34c3 (December 28, 2017)&lt;br /&gt;
| [[User:qlutoo|qlutoo]]&lt;br /&gt;
|-&lt;br /&gt;
| Memory Controller not properly secured&lt;br /&gt;
| The Switch OS originally had the memory controller not set to be accessible only by the secure-world, which was problematic because insecure access can compromise the kernel.&lt;br /&gt;
&lt;br /&gt;
This was fixed partially in [[2.0.0]] by blacklisting the memory controller from being mapped by user-processes, and was fixed entirely in [[4.0.0]] by making the memory controller TZ-only and making all kernel accesses go through [[SMC|smcReadWriteRegister]].&lt;br /&gt;
| With some way to access the memory controller MMIO, arbitrary kernel code execution.&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| January 2018&lt;br /&gt;
| January 2018&lt;br /&gt;
| [[User:SciresM|SciresM]], [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Potential [[SVC|svcWaitForAddress]] thread use-after-free&lt;br /&gt;
| Between [[4.0.0]], where svcWaitForAddress was introduced, and [[7.0.0]], there was a second intrusive rbtree node in KThread for the WaitForAddress tree (the key being (address, priority), sorted lexicographically). Unlike the WaitProcessWideKeyAtomic tree, the kernel forgot to reinsert the WaitForAddress node when the thread&#039;s priority changed (priority inheritance and/or SetPriority), breaking the rbtree invariants; and since the kernel walks through the entire tree to remove intrusive nodes, you could cause threads to stay in the tree even after their deletion.&lt;br /&gt;
&lt;br /&gt;
[[7.0.0]] fixed the issue by using the same intrusive node for both trees. The thread/node knows which tree it is in, and the latter is correctly updated when thread priority changes.&lt;br /&gt;
| It unluckily didn&#039;t look exploitable&lt;br /&gt;
| [[7.0.0]]&lt;br /&gt;
| [[7.0.0]]&lt;br /&gt;
| July 2018&lt;br /&gt;
| February 2019&lt;br /&gt;
| [[User:TuxSH|TuxSH]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FIRM-package System Modules ===&lt;br /&gt;
Flaws in this category pertain to any of the [[Package2#Section_1|built-in system modules]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| Service access control bypass (sm:h, smhax, probably other names)&lt;br /&gt;
| Prior to [[3.0.1]], the &#039;&#039;service manager&#039;&#039; (sm) built-in system module treats a user as though it has full permissions if the user creates a new &amp;quot;sm:&amp;quot; port session but bypasses [[Services_API#Initialize|initialization]]. This is due to the other sm commands skipping the service ACL check for Pids &amp;lt;= 7 (i.e. all kernel bundled modules) and that skipping the initialization command leaves the Pid field uninitialized.&lt;br /&gt;
In [[3.0.1]], sm returns error code 0x415 if [[Services_API#Initialize|Initialize]] has not been called yet.&lt;br /&gt;
| Acquiring, registering, and unregistering arbitrary services&lt;br /&gt;
| [[3.0.1]]&lt;br /&gt;
| [[3.0.1]]&lt;br /&gt;
| May 2017&lt;br /&gt;
| August 17, 2017&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Overly permissive SPL service&lt;br /&gt;
| The concept behind the switch&#039;s [[SMC|Secure Monitor]] is that all cryptographic keydata is located in userspace, but stored as &amp;quot;access keys&amp;quot; encrypted with &amp;quot;keks&amp;quot; that never leave TrustZone. The [[SPL services|spl]] (&amp;quot;security processor liaison&amp;quot;?) service serves as an interface between the rest of the system and the secure monitor. Prior to [[4.0.0]], spl exposed only a single service &amp;quot;spl:&amp;quot;, which provided all TrustZone wrapper functions to all sysmodules with access to it. Thus anyone with access to the spl: service (via smhax or by pwning a sysmodule with access) could do crypto with any access keys they knew. &lt;br /&gt;
&lt;br /&gt;
This was fixed in [[4.0.0]] by splitting spl: into spl:, spl:mig, spl:ssl, spl:es, and spl:fs.&lt;br /&gt;
| Arbitrary spl: crypto with any access keys one knows. For example, one could use the SSL module&#039;s access keys to decrypt their console&#039;s SSL certificate private key without having to pwn the SSL sysmodule.&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| Summer 2017 (after smhax was discovered).&lt;br /&gt;
| December 23, 2017&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Single session services not really single session&lt;br /&gt;
| Several &amp;quot;critical&amp;quot; services (like fsp-ldr, fsp-pr, sm:m, etc) are meant to only ever hold a single session with a specific sysmodule. However, when a sysmodule dies, all its service session handles are released -- and thus killing the holder of a single session handle would allow one (via sm:hax etc) to get access to that service. &lt;br /&gt;
&lt;br /&gt;
This was fixed in [[4.0.0]] by adding a semaphore to these critical single-session services, so that even if one gets access to them an error code will be returned when attempting to use any of their commands.&lt;br /&gt;
| With some way to access these services and kill their session holders (like expLDR): dumping sysmodule code, arbitrary service access, elevated filesystem permissions, etc.&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| [[4.0.0]]&lt;br /&gt;
| May/June 2017 (basically immediately after smhax was discovered)&lt;br /&gt;
| December 30, 2017&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| nspwn&lt;br /&gt;
| fsp-ldr command 0 &amp;quot;MountCode&amp;quot; takes in a Content Path (retrieved from NCM by Loader), and returns an IFileSystem for the resulting ExeFS. These content paths, are normally NCAs, but MountCode also supports a number of other formats, including &amp;quot;.nsp&amp;quot; -- which is just a PFS0.&lt;br /&gt;
&lt;br /&gt;
When a path ending in &amp;quot;.nsp&amp;quot; is parsed by MountCode, the PFS0 is treated as a raw ExeFS. Because there is no NCA header, the ACID signatures are not validated -- and because there are no other signatures in a PFS0, this results in no signature checking happening at all.&lt;br /&gt;
&lt;br /&gt;
The actual .nsp handling is eventually done by {content mounting function} called by MountCode and other FS commands.&lt;br /&gt;
&lt;br /&gt;
Thus, by placing an ExeFS (NSOs + &amp;quot;main.npdm&amp;quot;) and setting one&#039;s desired title ID to &amp;quot;@Sdcard:/some_title.nsp&amp;quot; or &amp;quot;@User:/some_title.nsp&amp;quot; etc one can launch arbitrary unsigned code, with arbitrary unsigned NPDMs.&lt;br /&gt;
&lt;br /&gt;
This appears to have been fixed by only allowing .nsp when the input fstype==7 for the internal content-mounting function, returning 0x2EE202 otherwise.&lt;br /&gt;
| With access to &amp;quot;lr&amp;quot;: Arbitrary code execution with full system privileges.&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| Late 2017&lt;br /&gt;
| April 23, 2018&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
| Single null-byte stack overflow in Loader ContentPath parsing&lt;br /&gt;
| Previously, loader content path parsing looked like this, where path_from_lr was up to 0x300 bytes and not necessarily null-terminated:&lt;br /&gt;
&lt;br /&gt;
  char nca_path[0x300] = {0};&lt;br /&gt;
  strcat(nca_path, path_from_lr);&lt;br /&gt;
  for (int i = 0; nca_path[i]; i++) {&lt;br /&gt;
      if (nca_path[i] == &#039;\\&#039;) { nca_path[i] = &#039;/&#039;); }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Thus, a content path of the maximum length (0x300 bytes) would result in strcat writing a NULL terminator past the end of the nca_path buffer.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[6.0.0]], the new code looks like this:&lt;br /&gt;
&lt;br /&gt;
  char nca_path[0x300];&lt;br /&gt;
  strncpy(nca_path, path_from_lr, sizeof(nca_path));&lt;br /&gt;
  for (int i = 0; i  &amp;lt; sizeof(nca_path) &amp;amp;&amp;amp; nca_path[i]; i++) {&lt;br /&gt;
      if (nca_path[i] == &#039;\\&#039;) { nca_path[i] = &#039;/&#039;); }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| With access to &amp;quot;lr&amp;quot;: single null-byte stack overflow in Loader. Maybe (but probably not) loader code execution.&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| September 2, 2018&lt;br /&gt;
| September 19, 2018&lt;br /&gt;
| SciresM&lt;br /&gt;
|-&lt;br /&gt;
| System modules vulnerable to selective downgrade attacks&lt;br /&gt;
| Horizon has no mechanism for specifying the specific title version to Loader on process creation.&lt;br /&gt;
&lt;br /&gt;
Observing this, one can note that after a system update one could install a downgraded version of a specific system module (e.g. nvservices) while leaving the rest of the OS at the same version.&lt;br /&gt;
&lt;br /&gt;
Unless there was some breaking API change, this allows one to make a console vulnerable once more to an exploit in a sysmodule by downgrading it and nothing else.&lt;br /&gt;
&lt;br /&gt;
This was fixed in [[8.1.0]] by incrementing a version field in NPDM, and checking it against a hardcoded list for certain titles in Loader&#039;s process creation func.&lt;br /&gt;
| With access to content installation commands (or a vulnerable lower version to selectively install newer titles), reintroducing bugs in vulnerable system modules on newer firmware versions.&lt;br /&gt;
| [[8.1.0]]&lt;br /&gt;
| [[8.1.0]]&lt;br /&gt;
| When FIRM was first dumped in 2017.&lt;br /&gt;
| June 17, 2019&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== System Modules ===&lt;br /&gt;
Flaws in this category pertain to any non-built-in system module.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Summary&lt;br /&gt;
!  Description&lt;br /&gt;
!  Successful exploitation result&lt;br /&gt;
!  Fixed in system version&lt;br /&gt;
!  Last system version this flaw was checked for&lt;br /&gt;
!  Timeframe this was discovered&lt;br /&gt;
!  Public disclosure timeframe&lt;br /&gt;
!  Discovered by&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|bluetooth]] GetAdapterProperty/SetAdapterProperty unchecked memcpy size&lt;br /&gt;
| GetAdapterProperty copies data from stack to the output buffer using the buffer size, without checking the size (when not handling the Name type). SetAdapterProperty copies data to stack from the input buffer using the buffer size, without checking the size.&lt;br /&gt;
This requires access to the btdrv service, only hid and btm have access.&lt;br /&gt;
&lt;br /&gt;
This was fixed with [[12.0.0]] by replacing the buffer data with a fixed-size-struct.&lt;br /&gt;
| Stack infoleak with GetAdapterProperty, stack buffer overflow (and hence ROP) with SetAdapterProperty.&lt;br /&gt;
| [[12.0.0]]&lt;br /&gt;
| [[12.0.0]]&lt;br /&gt;
| July 16, 2020&lt;br /&gt;
| April 7, 2021&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|Bluetooth]] A-63146698&lt;br /&gt;
| [https://android.googlesource.com/platform/system/bt/+/226ea26684d4cd609a5b456d3d2cc762453c2d75 A-63146698] / CVE-2017-0785. See also [https://info.armis.com/rs/645-PDC-047/images/BlueBorne%20Technical%20White%20Paper_20171130.pdf here].&lt;br /&gt;
| Bluetooth-sysmodule stack infoleak, which allows defeating ASLR (note: not tested on hw).&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[11.0.0]]&lt;br /&gt;
| Switch: December 2020&lt;br /&gt;
| Switch: December 25, 2020&lt;br /&gt;
| Switch: [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Bluetooth_Driver_services|Bluetooth]] sdp_server.cc process_service_search() continuation request p_req validation&lt;br /&gt;
| With [5.0.0+], the following was added to the if-block prior to loading cont_offset from p_req: &amp;lt;code&amp;gt;(p_req + sizeof(cont_offset) &amp;gt; p_req_end)&amp;lt;/code&amp;gt; (which verifies that cont_offset is within message bounds).&lt;br /&gt;
| Bluetooth-sysmodule out-of-bounds read from heap, probably not useful since the read value must match a state field, etc.&lt;br /&gt;
| [[5.0.0]]&lt;br /&gt;
| [[11.0.0]]&lt;br /&gt;
| Switch: December 2020&lt;br /&gt;
| Switch: December 25, 2020&lt;br /&gt;
| Switch: [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[HID_services#hid:sys|hid:sys]] ButtonConfig s32 array-index not validated&lt;br /&gt;
| The input s32 array-index for [[HID_services#hid:sys|hid:sys]] ButtonConfig cmds 1255-1270 was originally not validated. Using a negative or &amp;gt;=5 index results in accessing out-of-bounds data, with an array stored on stack.&lt;br /&gt;
[10.1.0-10.2.0] Each of these cmds will now Abort if the s32 is negative or &amp;gt;=5. [11.0.0+] Now an unsigned compare is used, with 0 or an error being immediately returned when the value is invalid.&lt;br /&gt;
| hid infoleak, out-of-bounds mem-write anywhere in hid address-space relative to the stack array (with constraints on the data).&lt;br /&gt;
| [[10.1.0]]&lt;br /&gt;
| [[11.0.1]]&lt;br /&gt;
| April 18, 2020&lt;br /&gt;
| July 14, 2020&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| [[Applet_Manager_services#IStorage|AM IStorage]] infoleak&lt;br /&gt;
| Originally the buffer allocated by [[Applet_Manager_services#CreateStorage|CreateStorage]] using the specified input size was not cleared. With [8.0.0+] this was fixed by adding a memset() for the buffer after successful allocation.&lt;br /&gt;
&lt;br /&gt;
Hence, IStorage-&amp;gt;IStorageAccessor-&amp;gt;Read will return uninitialized memory when the Write cmd was not previously used with the specified region.&lt;br /&gt;
| Infoleak from the main [[Applet_Manager_services#IStorage|AM]] heap, allowing defeating ASLR by reading addresses from previously allocated objects.&lt;br /&gt;
| [[8.0.0]]&lt;br /&gt;
| [[8.1.0]]&lt;br /&gt;
| December 2018&lt;br /&gt;
| August 9, 2019&lt;br /&gt;
| [[User:Yellows8|yellows8]]&lt;br /&gt;
|-&lt;br /&gt;
| Out-of-bounds array read for [[BCAT_Content_Container]] secret-data index&lt;br /&gt;
| The [[BCAT_Content_Container]] secret-data index is not validated at all. This is handled before the RSA-signature(?) is ever used. Since the field is an u8, a total of 0x800-bytes relative to the array start can be accessed.&lt;br /&gt;
This is not useful since the string loaded from this array is only involved with key-generation.&lt;br /&gt;
| &lt;br /&gt;
| Unknown&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| August 4, 2017&lt;br /&gt;
| August 6, 2017&lt;br /&gt;
| [[User: shinyquagsire23|Shiny Quagsire]], [[User:Yellows8|yellows8]] (independently)&lt;br /&gt;
|-&lt;br /&gt;
|  OOB Read in NS system module (pl:utoohax, pl:utonium, maybe other names)&lt;br /&gt;
|  Prior to [[3.0.0]], pl:u (Shared Font services implemented in the NS sysmodule) service commands 1,2,3 took in a signed 32-bit index and returned that index of an array but did not check that index at all. This allowed for an arbitrary read within a 34-bit range (33-bit signed) from NS .bss. In [[3.0.0]], sending out of range indexes causes error code 0x60A to be returned.&lt;br /&gt;
|  Dumping full NS .text, .rodata and .data, infoleak, etc&lt;br /&gt;
|  [[3.0.0]]&lt;br /&gt;
|  [[3.0.0]]&lt;br /&gt;
|  April 2017&lt;br /&gt;
|  On exploit&#039;s fix in [[3.0.0]]&lt;br /&gt;
|  [[User:qlutoo|qlutoo]], ReSwitched Team (independently)&lt;br /&gt;
|-&lt;br /&gt;
| Unchecked domain ID in common IPC code&lt;br /&gt;
| Prior to [[2.0.0]], object IDs in [[IPC_Marshalling#Domain_message|domain messages]] are not bounds checked. This out-of-bounds read could be exploited to brute-force ASLR and get PC control in some services that support domain messages.&lt;br /&gt;
|&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| ~July 2017&lt;br /&gt;
| 20 July 2017‎&lt;br /&gt;
| [[User:hthh|hthh]]&lt;br /&gt;
|-&lt;br /&gt;
| expLDR (sysmodule handle table exhaustion)&lt;br /&gt;
| Most sysmodules share common template code to handle IPC control messages. The command DuplicateSession (type 5 command 2)&#039;s template code will abort() if it fails to duplicate a session&#039;s handle for the requester. Because many sysmodules have limited handle table size (smaller than the browser/other entrypoints), repeatedly requesting to duplicate one&#039;s session will cause the sysmodule to run out of handle table space and abort, causing the service to release all its handles cleanly.&lt;br /&gt;
| Sysmodule crashes.  Most usefully, crashing ldr allows access to fsp-ldr and crashing pm allows access to fsp-pr. Useless after [[4.0.0]], which mitigated a number of single-session service access issues.&lt;br /&gt;
| Unfixed&lt;br /&gt;
| [[4.1.0]]&lt;br /&gt;
| 24 June 2017&lt;br /&gt;
| 8 March 2018&lt;br /&gt;
| [[User:daeken|daeken]]&lt;br /&gt;
|-&lt;br /&gt;
| Transfer Memory leak in nvservices system module&lt;br /&gt;
| The nvservices sysmodule does not clear most of its transfer memory prior to release.&lt;br /&gt;
| The calling process can read key bits of memory, including breaking ASLR (by revealing the image base) and exposing the address of other transfer memory to set up attacks. More details here: [https://daeken.svbtle.com/nintendo-switch-nvservices-info-leak transfermeme (nvservices info leak)] by [[User:daeken|daeken]]&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| [[6.0.0]]&lt;br /&gt;
| June 2017&lt;br /&gt;
| 16 October 2018&lt;br /&gt;
| [[User:qlutoo|qlutoo]] and [[User:hexkyz|hexkyz]],&lt;br /&gt;
[[User:daeken|daeken]] (independently)&lt;br /&gt;
|-&lt;br /&gt;
| OOB write in audio system module&lt;br /&gt;
| Prior to [[2.0.0]], the [[Audio_services#audout:u|AppendAudioOutBuffer]] and [[Audio_services#audin:u|AppendAudioInBuffer]] IPC commands would blindly increment the appended buffers&#039; count while using said count value as an index to where the user data should be copied into. This resulted in an 0x28 bytes, user controlled, out-of-bounds memory write into the [[Audio_services|audio]] sysmodule&#039;s memory space.&lt;br /&gt;
Combined with the [[Audio_services#audout:u|GetReleasedAudioOutBuffer]] or [[Audio_services#audin:u|GetReleasedAudioInBuffer]] commands, this could also be used as an 8 byte infoleak.&lt;br /&gt;
&lt;br /&gt;
In [[2.0.0]], the commands now return error code 0x1099 if the number of unreleased buffers exceeds 0x1F.&lt;br /&gt;
| Code execution under audio sysmodule&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| &lt;br /&gt;
| November 2, 2018&lt;br /&gt;
| [[User:hexkyz|hexkyz]], probably others (independently).&lt;br /&gt;
|-&lt;br /&gt;
| nvhax (memory corruption in nvservices system module)&lt;br /&gt;
| Prior to [[6.2.0]], the [[NV_services|nvservices]] ioctl [[NV_services#.2Fdev.2Fnvhost-ctrl-gpu|NVGPU_GPU_IOCTL_WAIT_FOR_PAUSE]] would take a single &amp;quot;pwarpstate&amp;quot; argument which would be interpreted by nvservices as a memory pointer for writing 2 &amp;quot;warpstate&amp;quot; structs (one for each Streaming Multiprocessor).&lt;br /&gt;
This resulted in nvservices attempting to blindly memcpy into this user supplied address and trigger a crash. However, if paired with an infoleak, this could be used to arbitrarily write 0x30 bytes anywhere in nvservices&#039; memory space.&lt;br /&gt;
Additionally, the &amp;quot;warpstate&amp;quot; struct itself was never initialized, which means nvservices would leak the 0x30 bytes from the stack. By invoking other ioctls it was also possible to partially control the stack contents and achieve a usable arbitrary memory write primitive.&lt;br /&gt;
&lt;br /&gt;
In [[6.2.0]], [[NV_services#.2Fdev.2Fnvhost-ctrl-gpu|NVGPU_GPU_IOCTL_WAIT_FOR_PAUSE]] now takes 2 inline &amp;quot;warpstate&amp;quot; structs instead of a &amp;quot;pwarpstate&amp;quot; pointer, thus effectively avoiding the bad memcpy.&lt;br /&gt;
| Code execution under nvservices sysmodule&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| April 5, 2017&lt;br /&gt;
| November 24, 2018&lt;br /&gt;
| [[User:hexkyz|hexkyz]]&lt;br /&gt;
|-&lt;br /&gt;
| Infoleak in nvservices system module&lt;br /&gt;
| The [[NV_services|nvservices]] ioctl [[NV_services#NVMAP_IOC_ALLOC|NVMAP_IOC_ALLOC]] takes an optional argument &amp;quot;addr&amp;quot; which allows the calling process to pass a pointer to user allocated memory for backing a nvmap object. If &amp;quot;addr&amp;quot; is left as 0, nvservices uses the transfer memory region (donated by the user during initialization) instead, when allocating memory for the nvmap object.&lt;br /&gt;
By design, freeing the nvmap object by calling the ioctl [[NV_services#NVMAP_IOC_FREE|NVMAP_IOC_FREE]] returns, in its &amp;quot;refcount&amp;quot; argument, the user address previously supplied if the reference count reaches 0.&lt;br /&gt;
However, prior to [[6.2.0]], the case where the transfer memory region is used to allocate the nvmap object was not taken into account, thus resulting in [[NV_services#NVMAP_IOC_FREE|NVMAP_IOC_FREE]] leaking back an address from within the transfer memory region mapped in nvservices&#039; memory space.&lt;br /&gt;
&lt;br /&gt;
In [[6.2.0]], [[NV_services#NVMAP_IOC_FREE|NVMAP_IOC_FREE]] no longer returns the address when the transfer memory region is used instead of user supplied memory.&lt;br /&gt;
| Combined with other vulnerabilities: Defeating ASLR in nvservices sysmodule.&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| [[6.2.0]]&lt;br /&gt;
| April 2017&lt;br /&gt;
| November 24, 2018&lt;br /&gt;
| Everyone&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Secure_Monitor&amp;diff=7036</id>
		<title>Secure Monitor</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Secure_Monitor&amp;diff=7036"/>
		<updated>2019-06-19T15:48:41Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: /* KernelConfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Secure Monitor Calls =&lt;br /&gt;
&lt;br /&gt;
The secure monitor provides two top level handlers of which each provides a range of sub handlers.&lt;br /&gt;
&lt;br /&gt;
Secure Monitor Calls follow the ARM SMC calling convention up to a small change:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit number || Bit mask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 31 || 0x80000000 || Set to 0 means Yielding Call; Set to 1 means Fast Call.&lt;br /&gt;
|-&lt;br /&gt;
| 30 || 0x40000000 || Set to 0 means SMC32 convention; Set to 1 means SMC64.&lt;br /&gt;
|-&lt;br /&gt;
| 29-24 || 0x3F000000 || Service Call ranges.&lt;br /&gt;
|-&lt;br /&gt;
| 23-16 || 0x00FF0000 || Must be zero.&lt;br /&gt;
|-&lt;br /&gt;
| 15-8 || 0x0000FF00 || Argument type. This is different from the ARM SMC calling convention.&lt;br /&gt;
|-&lt;br /&gt;
| 7-0 || 0x000000FF || Function number within the range call type.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If bit &#039;&#039;n&#039;&#039; is set in the argument type then parameter X&#039;&#039;n&#039;&#039; is treated as a pointer and the kernel will setup address translation for it in [[SVC#svcCallSecureMonitor|svcCallSecureMonitor]].&lt;br /&gt;
&lt;br /&gt;
SMC arguments are passed using registers X0-X7 with X0 always sending the call sub-id and returning the result of the call.&lt;br /&gt;
&lt;br /&gt;
== ID 0 ==&lt;br /&gt;
Functions exposed to user-mode processes using [[SVC|svcCallSecureMonitor]]. SMCs should be called from CPUID 3 (where SPL runs).&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Sub-ID || Name || In || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000401 || SetConfig || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000002 || GetConfig (Same as ID 1, Sub-ID 4) || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000003 || GetResult || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000404 || GetResultData || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000E05 || ExpMod || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000006 || GenerateRandomBytes (Same as ID 1, Sub-ID 5) || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000007 || [[#GenerateAesKek]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000008 || [[#LoadAesKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000009 || [[#ComputeAes]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300000A || [[#GenerateSpecificAesKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300040B || [[#ComputeCmac]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-4.1.0] 0xC300100C || [[#ImportEsKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0xC300D60C || [[#ReEncryptRsaPrivateKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-4.1.0] 0xC300100D || [[#DecryptRsaPrivateKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0xC300100D || [[#DecryptOrImportRsaPrivateKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-4.1.0] 0xC300100E || [[#ImportLotusKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300060F || [[#StorageExpMod]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000610 || [[#UnwrapTitleKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000011 || [[#LoadTitleKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000012 || [2.0.0+] [[#UnwrapCommonTitleKey]] || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The overall concept here is the following:&lt;br /&gt;
* All key material (AES and RSA) is stored in userspace, but it&#039;s encrypted with random AES kek&#039;s (&amp;quot;key encryption keys&amp;quot;).&lt;br /&gt;
* Each kek is generated as a function of an access key (picked at random).&lt;br /&gt;
* The kek is generated differently depending on the [[#CryptoUsecase]] the key is used for.&lt;br /&gt;
** This means: Each key is &amp;quot;locked&amp;quot; to the [[#CryptoUsecase]] it was designated for.&lt;br /&gt;
** You can use a key for a different usecase, but you will only get garbage output.&lt;br /&gt;
* After the kek has been generated, it is wrapped with a session-specific key and given back to userspace.&lt;br /&gt;
** This means: Plaintext kek keys never leave TrustZone.&lt;br /&gt;
** Further, this means: Actual AES/RSA keys never leave TrustZone.&lt;br /&gt;
&lt;br /&gt;
=== GenerateAesKek ===&lt;br /&gt;
Takes an &amp;quot;access key&amp;quot; as input, an [[#enum_CryptoUsecase]].&lt;br /&gt;
&lt;br /&gt;
Returns a session-unique kek for said usecase.&lt;br /&gt;
&lt;br /&gt;
=== LoadAesKey ===&lt;br /&gt;
Takes a session kek created with [[#GenerateAesKek]], and a wrapped AES key.&lt;br /&gt;
&lt;br /&gt;
The session kek must have been created with [[#enum_CryptoUsecase|CryptoUsecase_Aes]].&lt;br /&gt;
&lt;br /&gt;
=== ComputeAes ===&lt;br /&gt;
Encrypts/decrypts using AES (CTR and CBC). Takes an [[#enum_CipherMode]].&lt;br /&gt;
&lt;br /&gt;
Key must be set prior using one of the [[#LoadAesKey]] or [[#GenerateSpecificAesKey]] commands.&lt;br /&gt;
&lt;br /&gt;
=== GenerateSpecificAesKey ===&lt;br /&gt;
Takes a wrapped AES key and decrypts it using static data.&lt;br /&gt;
&lt;br /&gt;
=== ComputeCmac ===&lt;br /&gt;
Calculates CMAC over input data.&lt;br /&gt;
&lt;br /&gt;
=== ImportEsKey ===&lt;br /&gt;
Takes a session kek created with [[#GenerateAesKek]], a wrapped AES key, and a wrapped RSA private key.&lt;br /&gt;
&lt;br /&gt;
The session kek must have been created with [[#enum_CryptoUsecase|CryptoUsecase_TitleKey]].&lt;br /&gt;
&lt;br /&gt;
[5.0.0] This function was removed and replaced with [[#ReEncryptRsaPrivateKey]].&lt;br /&gt;
&lt;br /&gt;
=== ReEncryptRsaPrivateKey ===&lt;br /&gt;
Takes in two session keks created with [[#GenerateAesKek]], two wrapped AES keys, an enum member, and a wrapped RSA private key.&lt;br /&gt;
&lt;br /&gt;
Decrypts and validates the wrapped RSA private key with the first kek/wrapped key, and re-encrypts it with the second if valid.&lt;br /&gt;
&lt;br /&gt;
The re-encrypted key is then passed to the user, for use with [[#DecryptOrImportRsaPrivateKey]].&lt;br /&gt;
&lt;br /&gt;
=== DecryptRsaPrivateKey ===&lt;br /&gt;
Takes a session kek created with [[#GenerateAesKek]], a wrapped AES key, an enum member, and a wrapped RSA private key.&lt;br /&gt;
&lt;br /&gt;
The session kek must have been created with [[#enum_CryptoUsecase|CryptoUsecase_RsaPrivate]].&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] The SMC handler when certain conditions pass and SMC_ID==0xC300100D now returns error 0x6 instead of calling the handler funcptr.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] This function was replaced by [[#DecryptOrImportRsaPrivateKey]].&lt;br /&gt;
&lt;br /&gt;
=== DecryptOrImportRsaPrivateKey ===&lt;br /&gt;
This function replaced [[#DecryptRsaPrivateKey]] in [[5.0.0]], adding an additional [[#enum_DecryptOrImportMode]].&lt;br /&gt;
&lt;br /&gt;
This SMC extends DecryptRsaPrivateKey&#039;s original functionality to enable importing private keys into the security engine instead of decrypting them, when certain enum members are passed.&lt;br /&gt;
&lt;br /&gt;
=== ImportLotusKey ===&lt;br /&gt;
Takes a session kek created with [[#GenerateAesKek]], and a wrapped RSA key.&lt;br /&gt;
&lt;br /&gt;
The session kek must have been created with [[#enum_CryptoUsecase|CryptoUsecase_RsaSecureExpMod]].&lt;br /&gt;
&lt;br /&gt;
[5.0.0] This function was removed.&lt;br /&gt;
&lt;br /&gt;
=== SecureExpMod ===&lt;br /&gt;
Performs an ExpMod operation using an exponent previously loaded with the [[#ImportLotusKey]] command.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] This now uses any exponent previously loaded with [[#DecryptOrImportRsaPrivateKey]] and takes an [[#enum_SecureExpModMode]].&lt;br /&gt;
&lt;br /&gt;
=== UnwrapTitleKey ===&lt;br /&gt;
Takes an Rsa-Oaep-wrapped TitleKey, an RSA Public Key, and a label hash.&lt;br /&gt;
&lt;br /&gt;
Performs an ExpMod operation using an exponent previously loaded with the [[#ImportEsKey]] command, and then validates/extracts a Titlekey from the resulting message.&lt;br /&gt;
&lt;br /&gt;
Returns a session-unique AES key especially for use in [[#LoadTitleKey]].&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] This now uses any exponent previously loaded with [[#DecryptOrImportRsaPrivateKey]].&lt;br /&gt;
&lt;br /&gt;
=== LoadTitleKey ===&lt;br /&gt;
Takes a session-unique AES key from [[#UnwrapCommonTitleKey]] or [[#UnwrapTitleKey]].&lt;br /&gt;
&lt;br /&gt;
=== UnwrapCommonTitleKey ===&lt;br /&gt;
Takes an AES-wrapped TitleKey and returns a sealed AES key.&lt;br /&gt;
&lt;br /&gt;
=== enum CryptoUsecase ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CryptoUsecase_Aes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CryptoUsecase_RsaPrivate&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CryptoUsecase_RsaSecureExpMod&lt;br /&gt;
|-&lt;br /&gt;
| 3 || CryptoUsecase_TitleKey&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
The [[#enum_CryptoUsecase|CryptoUsecase_TitleKey]] represents a RSA wrapped AES key.&lt;br /&gt;
&lt;br /&gt;
=== enum CipherMode ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CipherMode_CbcEncrypt&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CipherMode_CbcDecrypt&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CipherMode_Ctr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== enum DecryptOrImportMode ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DecryptOrImportMode_DecryptRsaPrivateKey&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DecryptOrImportMode_ImportLotusKey&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DecryptOrImportMode_ImportEsKey&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DecryptOrImportMode_ImportSslKey&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DecryptOrImportMode_ImportDrmKey&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== enum SecureExpModMode ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SecureExpModMode_Lotus&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SecureExpModMode_Ssl&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SecureExpModMode_Drm&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ID 1 ==&lt;br /&gt;
Functions exposed to the kernel internally.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Sub-ID || Name || In || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0xC4000001 || [[#CpuSuspend]] || X1=power_state, X2=entrypoint_addr, X3=context_id || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x84000002 || [[#CpuOff]] || None || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xC4000003 || [[#CpuOn]] || X1=target_cpu, X2=entrypoint_addr, X3=context_id, X4,X5,X6,X7=0 || X0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000004 || [[#GetConfig]] (Same as ID 0, Sub-ID 2) || W1=config_item, X2,X3,X4,X5,X6,X7=0 || X0=result, X1,X2,X3,X4=config_val&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000005 || [[#GenerateRandomBytes]] (Same as ID 0, Sub-ID 6) || X1=size, X2,X3,X4,X5,X6,X7=0 || X0=result, X1,X2,X3,X4,X5,X6,X7=rand_bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000006 || [[#Panic]] || W1=panic_color, X2,X3,X4,X5,X6,X7=0 || X0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000007 || [2.0.0+] [[#ConfigureCarveout]] || X1=carveout_index, X2=region_phys_addr, X3=region_size, X4,X5,X6,X7=0 || X0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000008 || [2.0.0+] [[#ReadWriteRegister]] || X1=reg_addr, W2=rw_mask, W3=in_val, X4,X5,X6,X7=0 || X0=result, W1=out_val&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CpuSuspend ===&lt;br /&gt;
Standard ARM PCSI SMC. Suspends the CPU (CPU0).&lt;br /&gt;
&lt;br /&gt;
The kernel calls this SMC on shutdown with &#039;&#039;&#039;power_state&#039;&#039;&#039; set to 0x0201001B (power level: 0x02==system; power type: 0x01==powerdown; ID: 0x1B).&lt;br /&gt;
&lt;br /&gt;
=== CpuOff ===&lt;br /&gt;
Standard ARM PCSI SMC. Turns off the CPU (CPU1, CPU2 or CPU3).&lt;br /&gt;
&lt;br /&gt;
=== CpuOn ===&lt;br /&gt;
Standard ARM PCSI SMC. Turns on the CPU (CPU1, CPU2 or CPU3).&lt;br /&gt;
&lt;br /&gt;
=== GetConfig ===&lt;br /&gt;
Takes a &#039;&#039;&#039;config_item&#039;&#039;&#039; and returns an associated &#039;&#039;&#039;config_val&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ConfigItem || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#DisableProgramVerification]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#DramId]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#SecurityEngineIrqNumber]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#Version]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#HardwareType]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#IsRetail]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#IsRecoveryBoot]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#DeviceId]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [1.0.0-4.0.0] [[#BootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#MemoryArrange]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#IsDebugMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#KernelConfiguration]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#IsChargerHiZModeEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [4.0.0+] [[#IsKiosk]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [5.0.0+] [[#RegulatorType]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [5.0.0+] [[#KeyGeneration]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [5.0.0+] [[#Package2Hash]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DisableProgramVerification ====&lt;br /&gt;
[[Process Manager services|PM]] checks this item and if non-zero, calls fsp-pr SetEnabledProgramVerification(false).&lt;br /&gt;
&lt;br /&gt;
==== DramId ====&lt;br /&gt;
This is extracted directly from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0&lt;br /&gt;
|  DramId_EristaIcosaSamsung4gb&lt;br /&gt;
|-&lt;br /&gt;
|  1&lt;br /&gt;
|  DramId_EristaIcosaHynix4gb&lt;br /&gt;
|-&lt;br /&gt;
|  2&lt;br /&gt;
|  DramId_EristaIcosaMicron4gb&lt;br /&gt;
|-&lt;br /&gt;
|  3&lt;br /&gt;
|  Reserved&lt;br /&gt;
|-&lt;br /&gt;
|  4&lt;br /&gt;
|  DramId_EristaIcosaSamsung6gb&lt;br /&gt;
|-&lt;br /&gt;
|  5&lt;br /&gt;
|  [4.0.0+] Reserved&lt;br /&gt;
|-&lt;br /&gt;
|  6&lt;br /&gt;
|  [4.0.0+] Reserved&lt;br /&gt;
|-&lt;br /&gt;
|  7&lt;br /&gt;
|  [5.0.0+] DramId_MarikoIowax1x2Samsung4gb ([4.0.0-4.1.0] Reserved)&lt;br /&gt;
|-&lt;br /&gt;
|  8&lt;br /&gt;
|  [5.0.0+] DramId_MarikoIowaSamsung4gb&lt;br /&gt;
|-&lt;br /&gt;
|  9&lt;br /&gt;
|  [5.0.0+] DramId_MarikoIowaSamsung8gb&lt;br /&gt;
|-&lt;br /&gt;
|  10&lt;br /&gt;
|  [6.0.0+] DramId_MarikoIowaHynix4gb ([5.0.0-5.1.0] Reserved)&lt;br /&gt;
|-&lt;br /&gt;
|  11&lt;br /&gt;
|  [7.0.0+] DramId_MarikoIowaMicron4gb ([5.0.0-6.2.0] Reserved)&lt;br /&gt;
|-&lt;br /&gt;
|  12&lt;br /&gt;
|  [5.0.0+] DramId_MarikoHoagSamsung4gb&lt;br /&gt;
|-&lt;br /&gt;
|  13&lt;br /&gt;
|  [5.0.0+] DramId_MarikoHoagSamsung8gb&lt;br /&gt;
|-&lt;br /&gt;
|  14&lt;br /&gt;
|  [7.0.0+] DramId_MarikoHoagHynix4gb ([5.0.0-6.2.0] Reserved)&lt;br /&gt;
|-&lt;br /&gt;
|  15&lt;br /&gt;
|  [7.0.0+] DramId_MarikoHoagMicron4gb ([5.0.0-6.2.0] Reserved)&lt;br /&gt;
|-&lt;br /&gt;
|  16&lt;br /&gt;
|  [8.0.0+] DramId_MarikoUnkSamsung4gb&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[PCV_services|PCV]] selects memory training tables based on DramId.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  SoC&lt;br /&gt;
!  Platform&lt;br /&gt;
!  DramId&lt;br /&gt;
!  Revision&lt;br /&gt;
!  DVFS version&lt;br /&gt;
|-&lt;br /&gt;
|  T210&lt;br /&gt;
|  jetson-tx1&lt;br /&gt;
|  N/A&lt;br /&gt;
|  0x07&lt;br /&gt;
|&lt;br /&gt;
 11_40800_01_V9.8.3_V1.6&lt;br /&gt;
 11_68000_01_V9.8.3_V1.6&lt;br /&gt;
 11_102000_01_V9.8.3_V1.6&lt;br /&gt;
 11_204000_05_V9.8.3_V1.6&lt;br /&gt;
 11_408000_02_V9.8.3_V1.6&lt;br /&gt;
 11_665600_03_V9.8.3_V1.6&lt;br /&gt;
 11_800000_01_V9.8.3_V1.6&lt;br /&gt;
 11_1065600_01_V9.8.3_V1.6&lt;br /&gt;
 11_1331200_01_V9.8.3_V1.6&lt;br /&gt;
 11_1600000_02_V9.8.3_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  T210&lt;br /&gt;
|  nx-abcb&lt;br /&gt;
|  EristaIcosaSamsung4gb&lt;br /&gt;
|  0x07&lt;br /&gt;
|&lt;br /&gt;
 10_40800_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_68000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_102000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_204000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_408000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_665600_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_800000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_1065600_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_1331200_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_1600000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  T210&lt;br /&gt;
|  nx-abcb&lt;br /&gt;
|  EristaIcosaMicron4gb&lt;br /&gt;
|  0x07&lt;br /&gt;
|&lt;br /&gt;
 10_40800_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
 10_68000_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
 10_102000_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
 10_204000_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
 10_408000_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
 10_665600_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
 10_800000_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
 10_1065600_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
 10_1331200_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
 10_1600000_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  T210&lt;br /&gt;
|  nx-abcb&lt;br /&gt;
|  EristaIcosaHynix4gb&lt;br /&gt;
|  0x07&lt;br /&gt;
|&lt;br /&gt;
 10_40800_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
 10_68000_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
 10_102000_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
 10_204000_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
 10_408000_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
 10_665600_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
 10_800000_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
 10_1065600_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
 10_1331200_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
 10_1600000_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  T210&lt;br /&gt;
|  nx-abca2&lt;br /&gt;
|  EristaIcosaSamsung4gb, EristaIcosaMicron4gb&lt;br /&gt;
|  0x07&lt;br /&gt;
| &lt;br /&gt;
 10_40800_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_68000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_102000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_204000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_408000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_665600_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_800000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_1065600_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_1331200_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_1600000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  T210&lt;br /&gt;
|  nx-abca2&lt;br /&gt;
|  EristaIcosaHynix4gb&lt;br /&gt;
|  0x07&lt;br /&gt;
|&lt;br /&gt;
 10_40800_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_68000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_102000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_204000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_408000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_665600_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_800000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_1065600_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_1331200_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_1600000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  T210&lt;br /&gt;
|  nx-abca2&lt;br /&gt;
|  EristaIcosaSamsung6gb&lt;br /&gt;
|  0x07&lt;br /&gt;
|&lt;br /&gt;
 10_40800_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_68000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_102000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_204000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_408000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_665600_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_800000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_1065600_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_1331200_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
 10_1600000_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  T214&lt;br /&gt;
|  nx-abca2, nx-abcb, nx-abcc&lt;br /&gt;
|  MarikoIowax1x2Samsung4gb&lt;br /&gt;
|  0x03&lt;br /&gt;
|&lt;br /&gt;
 01_204000_NoCfgVersion_V0.3.1_V2.0&lt;br /&gt;
 01_1331200.0_NoCfgVersion_V0.3.1_V2.0&lt;br /&gt;
 01_1600000_NoCfgVersion_V0.3.1_V2.0&lt;br /&gt;
|-&lt;br /&gt;
|  T214&lt;br /&gt;
|  nx-abca2, nx-abcb, nx-abcc&lt;br /&gt;
|  MarikoIowaSamsung4gb, MarikoHoagSamsung4gb&lt;br /&gt;
|  0x03&lt;br /&gt;
|  &lt;br /&gt;
 01_204000_NoCfgVersion_V0.3.1_V2.0&lt;br /&gt;
 01_1331200.0_NoCfgVersion_V0.3.1_V2.0&lt;br /&gt;
 01_1600000_NoCfgVersion_V0.3.1_V2.0&lt;br /&gt;
|-&lt;br /&gt;
|  T214&lt;br /&gt;
|  nx-abca2, nx-abcb, nx-abcc&lt;br /&gt;
|  MarikoIowaSamsung8gb, MarikoHoagSamsung8gb&lt;br /&gt;
|  0x03&lt;br /&gt;
|&lt;br /&gt;
 01_204000_NoCfgVersion_V0.4.2_V2.0&lt;br /&gt;
 01_1331200.0_NoCfgVersion_V0.4.2_V2.0&lt;br /&gt;
 01_1600000_NoCfgVersion_V0.4.2_V2.0&lt;br /&gt;
|-&lt;br /&gt;
|  T214&lt;br /&gt;
|  nx-abca2, nx-abcb, nx-abcc&lt;br /&gt;
|  MarikoIowaHynix4gb, MarikoHoagHynix4gb&lt;br /&gt;
|  0x03&lt;br /&gt;
|  &lt;br /&gt;
 01_204000_NoCfgVersion_V0.3.1_V2.0&lt;br /&gt;
 01_1331200.0_NoCfgVersion_V0.3.1_V2.0&lt;br /&gt;
 01_1600000_NoCfgVersion_V0.3.1_V2.0&lt;br /&gt;
|-&lt;br /&gt;
|  T214&lt;br /&gt;
|  nx-abca2, nx-abcb, nx-abcc&lt;br /&gt;
|  MarikoIowaMicron4gb, MarikoHoagMicron4gb&lt;br /&gt;
|  0x03&lt;br /&gt;
|  &lt;br /&gt;
 01_204000_NoCfgVersion_V0.4.2_V2.0&lt;br /&gt;
 01_1331200.0_NoCfgVersion_V0.4.2_V2.0&lt;br /&gt;
 01_1600000_NoCfgVersion_V0.4.2_V2.0&lt;br /&gt;
|-&lt;br /&gt;
|  T214&lt;br /&gt;
|  nx-abca2, nx-abcb, nx-abcc&lt;br /&gt;
|  MarikoUnkSamsung4gb&lt;br /&gt;
|  0x03&lt;br /&gt;
|  &lt;br /&gt;
 01_204000_NoCfgVersion_V0.4.2_V2.0&lt;br /&gt;
 01_1331200.0_NoCfgVersion_V0.4.2_V2.0&lt;br /&gt;
 01_1600000_NoCfgVersion_V0.4.2_V2.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nx-abca2&#039;&#039;&#039; (&#039;&#039;&#039;Icosa&#039;&#039;&#039; or &#039;&#039;&#039;Hoag&#039;&#039;&#039; in &#039;&#039;&#039;Erista&#039;&#039;&#039;, &#039;&#039;&#039;Iowa&#039;&#039;&#039; or &#039;&#039;&#039;Hoag&#039;&#039;&#039; in &#039;&#039;&#039;Mariko&#039;&#039;&#039;) hardware types are variations of the retail and EDEV form factors.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nx-abcb&#039;&#039;&#039; (&#039;&#039;&#039;Copper&#039;&#039;&#039;) is the SDEV unit. Among other differences, this has extra hardware to support HDMI output.&lt;br /&gt;
&lt;br /&gt;
[8.0.0+] &#039;&#039;&#039;nx-abcc&#039;&#039;&#039; was added for &#039;&#039;&#039;Mariko&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erista&#039;&#039;&#039; memory is LPDDR4, while &#039;&#039;&#039;Mariko&#039;&#039;&#039; memory is LPDDR4X.&lt;br /&gt;
&lt;br /&gt;
==== SecurityEngineIrqNumber ====&lt;br /&gt;
SPL uses this for setting up the security engine IRQ.&lt;br /&gt;
&lt;br /&gt;
==== Version ====&lt;br /&gt;
The current [[Package2#Versions|Package1 Maxver Constant]] - 1.&lt;br /&gt;
&lt;br /&gt;
==== HardwareType ====&lt;br /&gt;
[1.0.0+] This item is obtained by checking bits 8 and 2 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]. It can be 0 (Icosa), 1 (Copper), 2 (Hoag) or 3 (Invalid).&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] This item is obtained by checking bits 8, 2 and 16-19 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]. It can be 0 (Icosa), 1 (Copper), 2 (Hoag), 3 (Iowa) or 4 (Invalid).&lt;br /&gt;
&lt;br /&gt;
[7.0.0+] This item no longer depends on fuses and can only be 0 (Icosa) or 0xF (Invalid) in retail units.&lt;br /&gt;
&lt;br /&gt;
[8.0.0+] This item can be 0 (Icosa), 1 (Copper), 2 (Hoag), 3 (Iowa), 4 (Unknown) or 5 (Invalid). It still can only be 0 (Icosa) or 0xF (Invalid) in retail units.&lt;br /&gt;
&lt;br /&gt;
==== IsRetail ====&lt;br /&gt;
This item is obtained by checking bits 9 and 0-1 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]. It can be 0 (Debug), 1 (Retail) or 2 (Invalid).&lt;br /&gt;
&lt;br /&gt;
==== IsRecoveryBoot ====&lt;br /&gt;
Used to determine if the system is booting from SafeMode firmware.&lt;br /&gt;
&lt;br /&gt;
Under normal circumstances, this just returns bit 0 of the active [[BCT#bootloader0_info|bootloader info]]&#039;s attribute field.&lt;br /&gt;
&lt;br /&gt;
==== DeviceId ====&lt;br /&gt;
[[NIM_services|NIM]] checks if this item matches the [[Settings_services|set:cal]] DeviceId with byte7 cleared. If they don&#039;t match, a panic is thrown.&lt;br /&gt;
&lt;br /&gt;
==== BootReason ====&lt;br /&gt;
Used to determine how the system booted.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || AcOk&lt;br /&gt;
|-&lt;br /&gt;
| 2 || OnKey&lt;br /&gt;
|-&lt;br /&gt;
| 3 || RtcAlarm1&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RtcAlarm2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== MemoryArrange ====&lt;br /&gt;
[[Process Manager services|PM]] uses this item for selecting the appropriate size for each [[SVC#LimitableResource|LimitableResource_Memory]].&lt;br /&gt;
&lt;br /&gt;
==== IsDebugMode ====&lt;br /&gt;
Kernel uses this to determine behavior of svcBreak positive arguments. It will break instead of just force-exiting the process which is what happens on retail.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] This is also used with certain debug [[SVC|SVCs]].&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] [[Loader services|RO]] checks this and if set then skipping NRR rsa signatures is allowed.&lt;br /&gt;
&lt;br /&gt;
The value of this field is loaded from [[BootConfig]] unsigned-config+0x10 u8 bit1.&lt;br /&gt;
&lt;br /&gt;
==== KernelConfiguration ====&lt;br /&gt;
Kernel reads this when setting up memory-related code. &lt;br /&gt;
&lt;br /&gt;
Bit 0 is a boolean determining whether kernel should it will memset various allocated memory-regions with 0x58, 0x59, 0x5A (&#039;X&#039;, &#039;Y&#039;, &#039;Z&#039;) instead of zero. This allows Nintendo devs to find uninitialized memory bugs.&lt;br /&gt;
&lt;br /&gt;
Bit 1 is a boolean determining whether kernel should forcefully enable usermode exception handlers (when false, only certain aborts (((1LL &amp;lt;&amp;lt; (esr &amp;gt;&amp;gt; 26)) &amp;amp; 0x1115804400224001) == 0, typically data/prefetch aborts) that occur when the faulting address is in a readable region with MemoryType_CodeStatic will trigger usermode exception handlers).&lt;br /&gt;
&lt;br /&gt;
Bit 2 is a boolean determining whether kernel should enable usermode access to the Performance Monitors (whether PMUSERENR_EL0 should be 1 or 0).&lt;br /&gt;
&lt;br /&gt;
[8.0.0+] Bit 3 is a boolean determining whether the kernldr should allocate 0x68000 extra bytes before INI1 data&lt;br /&gt;
&lt;br /&gt;
Bits 8-15 are a boolean determining whether kernel should call smcPanic on error instead of infinite-looping.&lt;br /&gt;
&lt;br /&gt;
Bits 16-17 determine how much memory is available. 00/03 = 4 GB, 01 = 6 GB, 02 = 8 GB.&lt;br /&gt;
&lt;br /&gt;
==== IsChargerHiZModeEnabled ====&lt;br /&gt;
This tells if the TI Charger (bq24192) is active.&lt;br /&gt;
&lt;br /&gt;
==== KeyGeneration ====&lt;br /&gt;
This item is obtained from [[Fuse_registers#FUSE_RESERVED_ODM2|FUSE_RESERVED_ODM2]] if bit 11 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]] is set, [[Fuse_registers#FUSE_RESERVED_ODM0|FUSE_RESERVED_ODM0]] matches 0x8E61ECAE and [[Fuse_registers#FUSE_RESERVED_ODM1|FUSE_RESERVED_ODM1]] matches 0xF2BA3BB2.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] [[Filesystem services|FS]] can now use this value for the &#039;&#039;&#039;KeyGeneration&#039;&#039;&#039; parameter when calling [[#GenerateAesKek|GenerateAesKek]] during &amp;quot;GetBisEncryptionKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== IsKiosk ====&lt;br /&gt;
This item is bit 10 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]].&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] [[Settings_services|Settings]] uses this value to overwrite the quest flag from [[Settings_services#set:sys|GetQuestFlag]]. This is used to detect if a Switch is a kiosk unit for display at retail stores.&lt;br /&gt;
&lt;br /&gt;
==== RegulatorType ====&lt;br /&gt;
This item is currently hardcoded to 0.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] [[PCV_services|PCV]] uses this value in combination with [[#HardwareType|HardwareType]] to configure power blocks and memory tables for different hardware.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  SoC&lt;br /&gt;
!  GPU&lt;br /&gt;
!  Power Blocks&lt;br /&gt;
|-&lt;br /&gt;
|  0&lt;br /&gt;
|  T210&lt;br /&gt;
|  GM20B (0x12B)&lt;br /&gt;
|  max77620_sd0, max77621_cpu and max77621_gpu&lt;br /&gt;
|-&lt;br /&gt;
|  1&lt;br /&gt;
|  T214&lt;br /&gt;
|  GM2?? (0x12E)&lt;br /&gt;
|  max77620_sd0, max77812_cpu and max77812_gpu&lt;br /&gt;
|-&lt;br /&gt;
|  2&lt;br /&gt;
|  T214&lt;br /&gt;
|  GM2?? (0x12E)&lt;br /&gt;
|  max77620_sd0, max77812_cpu and max77812_gpu&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Package2Hash ====&lt;br /&gt;
This is a SHA-256 hash calculated over the [[Package2|package2]] image. Since the hash calculation is an optional step in pkg2ldr, this item is only valid in recovery mode. Otherwise, an error is returned instead.&lt;br /&gt;
&lt;br /&gt;
=== GenerateRandomBytes ===&lt;br /&gt;
Takes a &#039;&#039;&#039;size&#039;&#039;&#039; and returns &#039;&#039;&#039;rand_bytes&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The kernel limits &#039;&#039;&#039;size&#039;&#039;&#039; to 0x38 (for fitting in return registers).&lt;br /&gt;
&lt;br /&gt;
=== Panic ===&lt;br /&gt;
Issues a system panic.&lt;br /&gt;
&lt;br /&gt;
The kernel always calls this with &#039;&#039;&#039;panic_color&#039;&#039;&#039; set to 0xF00.&lt;br /&gt;
&lt;br /&gt;
=== ConfigureCarveout ===&lt;br /&gt;
Configures memory controller carveout regions.&lt;br /&gt;
&lt;br /&gt;
If &#039;&#039;&#039;carveout_index&#039;&#039;&#039; is 0, &#039;&#039;&#039;region_phys_addr&#039;&#039;&#039; and &#039;&#039;&#039;region_size&#039;&#039;&#039; are used to configure &#039;&#039;&#039;MC_SECURITY_CARVEOUT4&#039;&#039;&#039;.&lt;br /&gt;
If &#039;&#039;&#039;carveout_index&#039;&#039;&#039; is 1, &#039;&#039;&#039;region_phys_addr&#039;&#039;&#039; and &#039;&#039;&#039;region_size&#039;&#039;&#039; are used to configure &#039;&#039;&#039;MC_SECURITY_CARVEOUT5&#039;&#039;&#039;.&lt;br /&gt;
Any other &#039;&#039;&#039;carveout_index&#039;&#039;&#039; values are invalid.&lt;br /&gt;
&lt;br /&gt;
The kernel calls this with &#039;&#039;&#039;carveout_index&#039;&#039;&#039; set to 0, &#039;&#039;&#039;region_phys_addr&#039;&#039;&#039; set to 0x80060000 and &#039;&#039;&#039;region_size&#039;&#039;&#039; set to a dynamically calculated size which covers all the kernel and built-in sysmodules&#039; DRAM regions.&lt;br /&gt;
&lt;br /&gt;
=== ReadWriteRegister ===&lt;br /&gt;
Relays [[SVC#svcReadWriteRegister|svcReadWriteRegister]] to the Secure Monitor.&lt;br /&gt;
&lt;br /&gt;
= Errors =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Success&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Not implemented&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Invalid argument&lt;br /&gt;
|-&lt;br /&gt;
| 3 || In progress&lt;br /&gt;
|-&lt;br /&gt;
| 4 || No async operation&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Invalid async operation&lt;br /&gt;
|-&lt;br /&gt;
| [8.0.0+] 6 || Blacklisted&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=System_Version_Title&amp;diff=6245</id>
		<title>System Version Title</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=System_Version_Title&amp;diff=6245"/>
		<updated>2019-02-19T01:05:22Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: imagine not having 7.x keys&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The FS for the system-version title(TID 0100000000000809) contains &amp;quot;/file&amp;quot; (and, with [5.0.0+], &amp;quot;/digest&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Major&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| Minor&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| Micro&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| Revision Major&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x1&lt;br /&gt;
| Revision Minor&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x2&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x20&lt;br /&gt;
| Platform string (&amp;quot;NX&amp;quot; with zeros afterwards)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x40&lt;br /&gt;
| Version hash (Hex ASCII string). 0x28-bytes(not including NUL-terminator) normally with zeros afterwards.&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x18&lt;br /&gt;
| Display version (System-version in string form with zeros afterwards, e.g. &amp;quot;2.1.0&amp;quot;). This is what is displayed in System settings.&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x80&lt;br /&gt;
| Display title (System version in longform, e.g. &amp;quot;NintendoSDK Firmware for NX 2.0.0-15&amp;quot;). This is what is displayed in DevMenu.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Versions ==&lt;br /&gt;
=== Retail Firmware Updates ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Firmware&lt;br /&gt;
! Version String&lt;br /&gt;
! Hex ASCII String&lt;br /&gt;
! &amp;quot;/digest&amp;quot; contents&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 1.0.0-15&lt;br /&gt;
| 84b8da475a02261c456e6472b403b31416480165&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 2.0.0-15&lt;br /&gt;
| 25233e518f580062b41f45fae7ce56bff261094a&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 2.1.0-0&lt;br /&gt;
| e548f82b0aaff5fd18cfd80e7b9bd9808eeb7c99&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.0&lt;br /&gt;
| NintendoSDK Firmware for NX 2.2.0-1&lt;br /&gt;
| c83b637205048e61e73c870f21271cc3c6364396&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.0&lt;br /&gt;
| NintendoSDK Firmware for NX 2.3.0-0&lt;br /&gt;
| 3ed3bbc8885b6362f4f244dcecd2b430fa27310e&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 3.0.0-10.0&lt;br /&gt;
| 7fbde2b0bba4d14107bf836e4643043d9f6c8e47&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 3.0.1-0.0&lt;br /&gt;
| a3363e086791370ed89dca69c697b4a8bc443d66&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.2&lt;br /&gt;
| NintendoSDK Firmware for NX 3.0.2-0.0&lt;br /&gt;
| 56bc7f71d0e13179ccb6543bbb33d7f537859e49&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 4.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 4.0.0-4.0&lt;br /&gt;
| 875be0f6edc29b23938b7aea50764421b9f217e5&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 4.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 4.0.1-0.0&lt;br /&gt;
| 826588c45cecab1672c46f5de87d83ea6008d583&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 4.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 4.1.0-0.0&lt;br /&gt;
| 314f9468b704e84e1ffed449dfa6108ba4be221d&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 5.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 5.0.0-3.0&lt;br /&gt;
| 66790aa646927601523df36a6750205cd944b3de&lt;br /&gt;
| gW93A#00050000#QRnTiv2kqQV-KO9DAn1Wzz4S2-SDH4Zd10y8Jx5KalI=&lt;br /&gt;
|-&lt;br /&gt;
| 5.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 5.0.1-0.0&lt;br /&gt;
| 4b51b56242cc388ef487e148048e2c80e25994ad&lt;br /&gt;
| gW93A#00050001#wBt05i54vmIPr7cs44Vvod3M9s5M2Yl2ZVd_pd036MY=&lt;br /&gt;
|-&lt;br /&gt;
| 5.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 5.1.0-3.0&lt;br /&gt;
| 23f9df53e25709d756e0c76effcb2473bd3447dd&lt;br /&gt;
| gW93A#00050100#29uVhARHOdeTZmfdPnP785egrfRbPUW5n3IAACuHoPw=&lt;br /&gt;
|-&lt;br /&gt;
| 6.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 6.0.0-5.0&lt;br /&gt;
| ef435c4fcf83831d535424f6fc28e6c91f7669d1&lt;br /&gt;
| gW93A#00060000#9k9lgdev3glK0ltQTdWmdK7jU1BL9oWNJRAFkQpHUYI=&lt;br /&gt;
|-&lt;br /&gt;
| 6.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 6.0.1-1.0&lt;br /&gt;
| 880a0ba230a9b9225a87abe1de6c8ab8d832551e&lt;br /&gt;
| gW93A#00060001#a4EXpeev_mWNw7Dk0vkOsCMIxlosx2JuXPiOa5hEMd0=&lt;br /&gt;
|-&lt;br /&gt;
| 6.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 6.1.0-4.0&lt;br /&gt;
| 3e478da6353b192c36490f4aa34df0d10d575146&lt;br /&gt;
| gW93A#00060100#FziXCoELZt0C7o-t_rro9xWTcKkgPrsksov-OVrL00c=&lt;br /&gt;
|-&lt;br /&gt;
| 6.2.0&lt;br /&gt;
| NintendoSDK Firmware for NX 6.2.0-1.0&lt;br /&gt;
| 921f86701e69af7ac02712e24abf18a666c2b5fb&lt;br /&gt;
| CusHY#00060200#-uAUBEUSc-Se5mvfhJsj3Krr9ayN7IyTX60_XcLsZkQ=&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 7.0.0-5.0&lt;br /&gt;
| e4b38b15e880d251c182323894077508803abaaf&lt;br /&gt;
| CusHY#00070000#5PRVTLegTfFlaOw3kznosYec9d8BxGj8pN3wqGa80so=&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 7.0.1-1.0&lt;br /&gt;
| b9d2547128fa22760492cf09bffd0a3e43f2132c&lt;br /&gt;
| CusHY#00070001#rBuhja_901l8V8bKFqeiNBCY-fflYlZVa_iqvkpEGJI=&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Firmware&lt;br /&gt;
! Version String&lt;br /&gt;
! Hex ASCII String&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0-2&lt;br /&gt;
| NintendoSDK Firmware for NX 2.0.0-2&lt;br /&gt;
| 665fafc03935d12eebba8060a135516b021ccbaa&lt;br /&gt;
| Revision of [[Factory Setup|factory firmware]].&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0-13&lt;br /&gt;
| NintendoSDK Firmware for NX 2.0.0-13&lt;br /&gt;
| 60b5fa391b0055f50fec362d29ac18395f387412&lt;br /&gt;
| Revision of [[Factory Setup|factory firmware]].&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 3.0.0-10.0&lt;br /&gt;
| 83480e96a810a6c7cd3a8fb58dfb5b53961ac781&lt;br /&gt;
| Revision of [[Factory Setup|factory firmware]].&lt;br /&gt;
|-&lt;br /&gt;
| 6.0.0-4.0&lt;br /&gt;
| NintendoSDK Firmware for NX 6.0.0-4.0&lt;br /&gt;
| 5dc1909aea612d7a444884faca584fa8ae895b5c&lt;br /&gt;
| Pre-release version of firmware 6.0.0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Development Firmwares ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Firmware&lt;br /&gt;
! Version String&lt;br /&gt;
! Hex ASCII String&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| 0.8.5-0&lt;br /&gt;
| NintendoSDK Firmware for NX 0.8.5-0&lt;br /&gt;
| 3dd94e3e75a61a7a828756919dba98c42ed7069a&lt;br /&gt;
| Pre-release firmware.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=SVC&amp;diff=5714</id>
		<title>SVC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=SVC&amp;diff=5714"/>
		<updated>2018-12-03T01:39:25Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: /* CreateProcessInfo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
= System calls =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Id || Name || In || Out&lt;br /&gt;
|-&lt;br /&gt;
|  0x1 || [[#svcSetHeapSize]] || W1=size || W0=result, X1=outaddr&lt;br /&gt;
|-&lt;br /&gt;
|  0x2 || [[#svcSetMemoryPermission]] || X0=addr, X1=size, W2=prot || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x3 || [[#svcSetMemoryAttribute]] || X0=addr, X1=size, W2=state0, W3=state1 || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x4 || [[#svcMapMemory]] || X0=dstaddr, X1=srcaddr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x5 || [[#svcUnmapMemory]] || X0=dstaddr, X1=srcaddr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x6 || [[#svcQueryMemory]] || X0=MemoryInfo*, X2=addr || W0=result, W1=PageInfo                                                         &lt;br /&gt;
|-&lt;br /&gt;
|  0x7 || [[#svcExitProcess]] || None ||&lt;br /&gt;
|-&lt;br /&gt;
|  0x8 || [[#svcCreateThread]] || X1=entry, X2=thread_context, X3=stacktop, W4=prio, W5=processor_id  || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
|  0x9 || [[#svcStartThread]] || W0=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0xA || [[#svcExitThread]] || None ||                                                         &lt;br /&gt;
|-&lt;br /&gt;
|  0xB || [[#svcSleepThread]] || X0=nano || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0xC || [[#svcGetThreadPriority]] || W1=thread_handle || W0=result, W1=prio&lt;br /&gt;
|-&lt;br /&gt;
|  0xD || [[#svcSetThreadPriority]] || W0=thread_handle, W1=prio || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0xE || [[#svcGetThreadCoreMask]] || W2=thread_handle || W0=result, W1=out, X2=out&lt;br /&gt;
|-&lt;br /&gt;
|  0xF || [[#svcSetThreadCoreMask]] || W0=thread_handle, W1=in, X2=in2 || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#svcGetCurrentProcessorNumber]] || None || W0/X0=cpuid&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || svcSignalEvent || W0=wevent_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || svcClearEvent || W0=wevent_or_revent_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || [[#svcMapSharedMemory]] || W0=shmem_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || svcUnmapSharedMemory || W0=shmem_handle, X1=addr, X2=size || W0=result                                                 &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || [[#svcCreateTransferMemory]] || X1=addr, X2=size, W3=perm || W0=result, W1=tmem_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || svcCloseHandle || W0=handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || svcResetSignal || W0=revent_or_process_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#svcWaitSynchronization]] || X1=handles_ptr, W2=num_handles. X3=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || [[#svcCancelSynchronization]] || W0=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || svcArbitrateLock || W0=cur_thread_handle, X1=ptr, W2=req_thread_handle ||                                     &lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || svcArbitrateUnlock || X0=ptr ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || svcWaitProcessWideKeyAtomic || X0=ptr0, X1=ptr, W2=thread_handle, X3=timeout || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || svcSignalProcessWideKey || X0=ptr, W1=value || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || [[#svcGetSystemTick]] || None || X0={value of cntpct_el0}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || svcConnectToNamedPort || X1=port_name_str || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || svcSendSyncRequestLight || W0=light_session_handle, X1=? || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || svcSendSyncRequest || X0=normal_session_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || [[#svcSendSyncRequestWithUserBuffer]] || X0=cmdbufptr, X1=size, X2=handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || svcSendAsyncRequestWithUserBuffer || X1=cmdbufptr, X2=size, X3=handle || W0=result, W1=revent_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || svcGetProcessId || W1=thread_or_process_or_debug_handle || W0=result, X1=pid&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || svcGetThreadId || W1=thread_handle || W0=result, X1=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || [[#svcBreak]] || X0=break_reason,X1,X2=info || W0=result = 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || svcOutputDebugString || X0=str, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || svcReturnFromException || X0=result || &lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || [[#svcGetInfo]] || X1=info_id, X2=handle, X3=info_sub_id || W0=result, X1=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || svcFlushEntireDataCache || None || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || svcFlushDataCache || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [3.0.0+] [[#svcMapPhysicalMemory]] || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || [3.0.0+] svcUnmapPhysicalMemory || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || [5.0.0+] svcGetFutureThreadInfo || X3=timeout || W0=result, bunch of crap&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || svcGetLastThreadInfo || None || W0=result, W1,W2,W3,W4=unk, W5=truncated_u64, W6=bool&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || svcGetResourceLimitLimitValue || W1=reslimit_handle, W2=[[#LimitableResource]] || W0=result, X1=value&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || svcGetResourceLimitCurrentValue || W1=reslimit_handle, W2=[[#LimitableResource]] || W0=result, X1=value&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || svcSetThreadActivity || W0=thread_handle, W1=bool || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || svcGetThreadContext3 || X0=[[#ThreadContext]]*, W1=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [4.0.0+] svcWaitForAddress || X0=ptr, W1=[[#ArbitrationType]], X2=value X3=timeout ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || [4.0.0+] svcSignalToAddress || X0=ptr, W1=[[#SignalType]], X2=value W3=num_to_signal ||&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x3C || [[#svcDumpInfo]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || [4.0.0+] svcDumpInfoNew || ||&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x40 || svcCreateSession || W2=is_light, X3=? || W0=result, W1=server_handle, W2=client_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || [[#svcAcceptSession]] || W1=port_handle || W0=result, W1=session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || svcReplyAndReceiveLight || W0=light_session_handle || W0=result, W1,W2,W3,W4,W5,W6,W7=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || [[#svcReplyAndReceive]] || X1=ptr_handles, W2=num_handles, X3=replytarget_handle(0=none), X4=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || svcReplyAndReceiveWithUserBuffer|| X1=buf, X2=sz, X3=ptr_handles, W4=num_handles, X5=replytarget_handle(0=none), X6=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || svcCreateEvent || None || W0=result, W1=wevent_handle, W2=revent_handle&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x48 || [5.0.0+] [[#svcMapPhysicalMemoryUnsafe]] || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || [5.0.0+] svcUnmapPhysicalMemoryUnsafe || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || [5.0.0+] svcSetUnsafeLimit || X0=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || [4.0.0+] [[#svcCreateCodeMemory]] || X1=addr, X2=size || W0=result, W1=code_memory_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || [4.0.0+] [[#svcControlCodeMemory]] || W0=code_memory_handle, W1=[[#CodeMemoryOperation]], X2=dstaddr, X3=size, W4=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D || svcSleepSystem || None || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E || [[#svcReadWriteRegister]] || X1=reg_addr, W2=rw_mask, W3=in_val || W0=result, W1=out_val&lt;br /&gt;
|-&lt;br /&gt;
| 0x4F || svcSetProcessActivity || W0=process_handle, W1=bool || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || [[#svcCreateSharedMemory]] || W1=size, W2=myperm, W3=otherperm || W0=result, W1=shmem_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || [[#svcMapTransferMemory]] || X0=tmem_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || [[#svcUnmapTransferMemory]] || W0=tmemhandle, X1=addr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x53 || svcCreateInterruptEvent || X1=irq_num, W2=flag || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || [[#svcQueryPhysicalAddress]] || X1=addr || W0=result, X1=physaddr, X2=kerneladdr, X3=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x55 || [[#svcQueryIoMapping]] || X1=physaddr, X2=size || W0=result, X1=virtaddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x56 || [[#svcCreateDeviceAddressSpace]] || X1=dev_as_start_addr, X2=dev_as_end_addr || W0=result, W1=dev_as_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x57 || [[#svcAttachDeviceAddressSpace]] || W0=device, X1=dev_as_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || [[#svcDetachDeviceAddressSpace]] || W0=device, X1=dev_as_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || [[#svcMapDeviceAddressSpaceByForce]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr, W5=perm || W0=result &lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || [[#svcMapDeviceAddressSpaceAligned]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr, W5=perm || W0=result &lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || svcMapDeviceAddressSpace || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || [[#svcUnmapDeviceAddressSpace]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D || svcInvalidateProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E || svcStoreProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F || svcFlushProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || svcDebugActiveProcess || X1=pid || W0=result, W1=debug_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || svcBreakDebugProcess || W0=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || svcTerminateDebugProcess || W0=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || svcGetDebugEvent || X0=[[#DebugEventInfo]]*, W1=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || svcContinueDebugEvent || [1.0.0-2.3.0] W0=debug_handle, W1=[[#ContinueDebugFlagsOld]], X2=thread_id &lt;br /&gt;
[3.0.0+] W0=debug_handle, W1=[[#ContinueDebugFlags]], X2=thread_id_list(u64 *), W3=num_tids (max 64, 0 means &amp;quot;all threads&amp;quot;)&lt;br /&gt;
|| W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x65 || svcGetProcessList || X1=pids_out_ptr, W2=max_out || W0=result, W1=num_out &lt;br /&gt;
|-&lt;br /&gt;
| 0x66 || svcGetThreadList || X1=tids_out_ptr, W2=max_out, W3=debug_handle_or_zero || W0=result, X1=num_out&lt;br /&gt;
|-&lt;br /&gt;
| 0x67 || svcGetDebugThreadContext || X0=ThreadContext*, X1=debug_handle, X2=thread_id, W3=[[#ThreadContextFlags]] || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || svcSetDebugThreadContext || W0=debug_handle, W1=[[#ThreadContextFlags]], X2=ThreadContext*, X3=thread_id || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x69 || svcQueryDebugProcessMemory || X0=[[#MemoryInfo]]*, X2=debug_handle, X3=addr || W0=result, W1=PageInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A || svcReadDebugProcessMemory || X0=buffer*, X1=debug_handle, X2=src_addr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x6B || svcWriteDebugProcessMemory || X0=debug_handle, X1=buffer*, X2=dst_addr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || [[#svcSetHardwareBreakPoint]] || W0=HardwareBreakpointId, X1=watchpoint_flags/breakpoint_flags, X2=watchpoint_value/debug_handle || &lt;br /&gt;
|-&lt;br /&gt;
| 0x6D || svcGetDebugThreadParam || X2=debug_handle, X3=thread_id, W4=[[#DebugThreadParam]] || W0=result, X1=out0, W2=out1&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x6F || [5.0.0+] [[#svcGetSystemInfo]] || X1=info_id, X2=handle, X3=info_sub_id || W0=result, X1=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || svcCreatePort || W2=max_sessions, W3=is_light, X4=name_ptr || W0=result, W1=clientport_handle, W2=serverport_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || svcManageNamedPort || X1=name_ptr, W2=max_sessions || W0=result, W1=serverport_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || svcConnectToPort || W1=clientport_handle || W0=result, W1=session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x73 || [[#svcSetProcessMemoryPermission]] || W0=process_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x74 || [[#svcMapProcessMemory]] || X0=dstaddr, W1=process_handle, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x75 || [[#svcUnmapProcessMemory]] || X0=dstaddr, W1=process_handle, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x76 || [[#svcQueryProcessMemory]] || X0=meminfo_ptr, W2=process_handle, X3=addr || W0=result, W1=pageinfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x77 || [[#svcMapProcessCodeMemory]] || W0=process_handle, X1=dstaddr, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || [[#svcUnmapProcessCodeMemory]] || W0=process_handle, X1=dstaddr, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x79 || [[#svcCreateProcess]] || X1=procinfo_ptr, X2=caps_ptr, W3=cap_num ||  W0=result, W1=process_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || svcStartProcess || W0=process_handle, W1=main_thread_prio, W2=default_cpuid, W3=main_thread_stacksz || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || svcTerminateProcess || W0=process_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || [[#svcGetProcessInfo]] || W0=process_handle, W1=[[#ProcessInfoType]] || W0=result, X1=[[#ProcessState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D || svcCreateResourceLimit || None || W0=result, W1=reslimit_handle &lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || svcSetResourceLimitLimitValue || W0=reslimit_handle, W1=[[#LimitableResource]], X2=value || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F || svcCallSecureMonitor || X0=smc_sub_id, X1,X2,X3,X4,X5,X6,X7=smc_args || X0,X1,X2,X3,X4,X5,X6,X7=result&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcSetHeapSize ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || OutAddr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set the process heap to a given Size. It can both extend and shrink the heap.&lt;br /&gt;
&lt;br /&gt;
Size must be a multiple of 0x200000 (2MB).&lt;br /&gt;
&lt;br /&gt;
On success, the heap base-address (which is fixed by kernel, aslr&#039;d) is written to OutAddr.&lt;br /&gt;
&lt;br /&gt;
Uses current process pool partition.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Size must be less than or equal to 4GB.&lt;br /&gt;
&lt;br /&gt;
== svcSetMemoryPermission ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#Permission]] || Prot&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Change permission of page-aligned memory region.&lt;br /&gt;
&lt;br /&gt;
Bit2 of permission (exec) is not allowed. Setting write-only is not allowed either (bit1).&lt;br /&gt;
&lt;br /&gt;
This can be used to move back and forth between ---, r-- and rw-.&lt;br /&gt;
&lt;br /&gt;
== svcSetMemoryAttribute ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u32 || State0&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || u32 || State1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Change attribute of page-aligned memory region. &lt;br /&gt;
&lt;br /&gt;
This is used to turn on/off caching for a given memory area. Useful when talking to devices such as the GPU.&lt;br /&gt;
&lt;br /&gt;
What happens &amp;quot;under the hood&amp;quot; is the &amp;quot;Memory Attribute Indirection Register&amp;quot; index is changed from 2 to 3 in the MMU descriptor.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! State0 || State1 || Action&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Clear bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0 || Clear bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 8 || Set bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcMapMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps a memory range into a different range.&lt;br /&gt;
&lt;br /&gt;
Mainly used for adding guard pages around stack.&lt;br /&gt;
&lt;br /&gt;
Source range gets reprotected to --- (it can no longer be accessed), and bit0 is set in the source [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
[1.0.0] This could be used to map into either the Alias Region or the Stack region.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] This can only be used to map into the Stack region.&lt;br /&gt;
&lt;br /&gt;
Code can get the range of the Alias region from [[#svcGetInfo]] id0=2,3, and on 2.0.0+ the range of the Stack region via [[#svcGetInfo]] id0=14, 15 (on 1.0.0, the Stack region had hardcoded limits).&lt;br /&gt;
&lt;br /&gt;
When mapped into the Alias region, the mapped memory will have state 0x482907.&lt;br /&gt;
&lt;br /&gt;
When mapped into the Stack region, the mapped memory will have state 0x5C3C0B.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Unmaps a region that was previously mapped with [[#svcMapMemory]].&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to unmap ranges partially, you don&#039;t need to unmap the entire range &amp;quot;in one go&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The srcaddr/dstaddr must match what was given when the pages were originally mapped.&lt;br /&gt;
&lt;br /&gt;
== svcQueryMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#MemoryInfo]]* || MemInfo&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || PageInfo || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Query information about an address. Will always fetch the lowest page-aligned mapping that contains the provided address.&lt;br /&gt;
&lt;br /&gt;
Outputs a [[#MemoryInfo]] struct.&lt;br /&gt;
&lt;br /&gt;
== svcExitProcess ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Exits the current process.&lt;br /&gt;
&lt;br /&gt;
== svcCreateThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void(*)(void*) || Entry&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || ThreadContext&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || void* || StackTop&lt;br /&gt;
|-&lt;br /&gt;
| (In) W4 || u32 || Priority&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || u32 || ProcessorId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Create a thread in the current process.&lt;br /&gt;
&lt;br /&gt;
Processor_id must be 0,1,2,3 or -2, where -2 uses the default cpuid for process.&lt;br /&gt;
&lt;br /&gt;
== svcStartThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) None ||  ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Starts the thread for the provided handle.&lt;br /&gt;
&lt;br /&gt;
== svcExitThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Exits the current thread.&lt;br /&gt;
&lt;br /&gt;
== svcSleepThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || u64 || Nano&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Sleep for a specified amount of time, or yield thread.&lt;br /&gt;
&lt;br /&gt;
Setting nano=0 means &amp;quot;yield thread&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== svcGetThreadPriority ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1|| Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u64 || Priority&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get priority of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcSetThreadPriority ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0|| Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1|| u32 || Priority&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set priority of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
Priority is a number 0-0x3F. Lower value means higher priority.&lt;br /&gt;
&lt;br /&gt;
== svcGetThreadCoreMask ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u32 || Out0&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || u64 || Out1&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get affinity mask of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcSetThreadCoreMask ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u32 || In0&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || In1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set affinity mask of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcGetCurrentProcessorNumber ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0/X0 || u64 || CpuId&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get which cpu is executing the current thread.&lt;br /&gt;
&lt;br /&gt;
Cpu-id is an integer in the range 0-3.&lt;br /&gt;
&lt;br /&gt;
== svcMapSharedMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;SharedMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the block supplied by the handle. The required permissions are different for the process that created the handle and all other processes.&lt;br /&gt;
&lt;br /&gt;
Increases reference count for the KSharedMemory object. Thus in order to release the memory associated with the object, all handles to it must be closed and all mappings must be unmapped.&lt;br /&gt;
&lt;br /&gt;
== svcCreateTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;TransferMemory&amp;gt; || Handle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This one reprotects the src block with perms you give it. It also sets bit0 into [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
Executable bit perm not allowed.&lt;br /&gt;
&lt;br /&gt;
Closing all handles automatically causes the bit0 in [[#MemoryAttribute]] to clear, and the permission to reset.&lt;br /&gt;
&lt;br /&gt;
== svcWaitSynchronization ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle* || HandlesPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u64 || HandlesNum&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u64 || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Works with num_handles &amp;lt;= 0x40.&lt;br /&gt;
&lt;br /&gt;
When zero handles are passed, this will wait forever until either timeout or cancellation occurs.&lt;br /&gt;
&lt;br /&gt;
Does not accept 0xFFFF8001 or 0xFFFF8000 as handles.&lt;br /&gt;
&lt;br /&gt;
=== Object types ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KDebug:&#039;&#039;&#039; signals when there is a new [[#DebugEventInfo|DebugEvent]] (retrievable via [[#svcGetDebugEvent]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KClientPort:&#039;&#039;&#039; signals when the number of sessions is less than the maximum allowed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KProcess:&#039;&#039;&#039; signals when the process undergoes a state change (retrievable via [[#svcGetProcessInfo]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KReadableEvent:&#039;&#039;&#039; signals when the event&#039;s corresponding KWritableEvent has been signaled via svcSignalEvent.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KServerPort:&#039;&#039;&#039; signals when there is an incoming connection waiting to be [[#svcAcceptSession|accepted]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KServerSession:&#039;&#039;&#039; signals when there is an incoming message waiting to be [[#svcReplyAndReceive|received]] or the pipe is closed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KThread:&#039;&#039;&#039; signals when the thread has exited.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. One of the objects was signaled before the timeout expired, or one of the objects is a Session with a closed remote. Handle index is updated to indicate which object signaled.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x7601:&#039;&#039;&#039; Thread termination requested. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid handle. Returned when one of the handles passed is invalid. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe601:&#039;&#039;&#039; Invalid address. Returned when the handles pointer is not a readable address. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xea01:&#039;&#039;&#039; Timeout. Returned when no objects have been signaled within the timeout. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xec01:&#039;&#039;&#039; Interrupted. Returned when another thread uses [[#svcCancelSynchronization]] to cancel this thread. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xee01:&#039;&#039;&#039; Too many handles. Returned when the number of handles passed is &amp;gt; 0x40.&lt;br /&gt;
&lt;br /&gt;
== svcCancelSynchronization ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the referenced thread is currently in a synchronization call ([[#svcWaitSynchronization]], [[#svcReplyAndReceive]] or [[#svcReplyAndReceiveLight]]), that call will be interrupted and return 0xec01.&lt;br /&gt;
If that thread is not currently executing such a synchronization call, the next call to a synchronization call will return 0xec01.&lt;br /&gt;
&lt;br /&gt;
This doesn&#039;t take force-pause (activity/debug pause) into account.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. The thread was either interrupted or has had its flag set.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid handle. The handle given was either invalid or not a thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcGetSystemTick ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X0 || u64 || Ticks&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns the value of cntpct_el0.&lt;br /&gt;
&lt;br /&gt;
The frequency is 19200000 Hz (constant from official sw).&lt;br /&gt;
&lt;br /&gt;
Official sw reads cntpct_el0 directly from usermode without using this SVC. [[ExeFS|sdk-nso]] has this SVC, but it&#039;s not known to be called anywhere.&lt;br /&gt;
&lt;br /&gt;
== svcSendSyncRequestWithUserBuffer ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || CmdPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Session&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size and CmdPtr must be 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xcc01:&#039;&#039;&#039; CmdPtr is not 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xca01:&#039;&#039;&#039; Size is not 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xce01:&#039;&#039;&#039; KSessionRequest allocation failed (unlikely) or pointer buffer size exceeded.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Handles does not exist, or handle is not an instance of KClientSession.&lt;br /&gt;
&lt;br /&gt;
== svcBreak ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || u64 || Break Reason&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Info&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || Result || 0 (Success)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the process is attached, report the Break event. Then, if svcContinueDebugEvent didn&#039;t apply IgnoreException on the thread: if TPIDR_EL0 is 0, adjust ELR_EL1 to retry to svc instruction (and set TPIDR_EL0 to 1).&lt;br /&gt;
&lt;br /&gt;
Otherwise, if bit31 in reason isn&#039;t set, perform crash reporting (see Exception Handling section below), if it doesn&#039;t terminate the process adjust ELR_EL1 as well.&lt;br /&gt;
&lt;br /&gt;
Otherwise just return 0.&lt;br /&gt;
&lt;br /&gt;
== svcGetInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || InfoId&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || InfoSubId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || Out&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Handle type || Id0 || Id1 || Description&lt;br /&gt;
|-&lt;br /&gt;
| Process || 0 || 0 || AllowedCpuIdBitmask&lt;br /&gt;
|-&lt;br /&gt;
| Process || 1 || 0 || AllowedThreadPrioBitmask&lt;br /&gt;
|-&lt;br /&gt;
| Process || 2 || 0 || AliasRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 3 || 0 || AliasRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 4 || 0 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 5 || 0 || HeapRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 6 || 0 || TotalMemoryAvailable. Total memory available(free+used).&lt;br /&gt;
|-&lt;br /&gt;
| Process || 7 || 0 || TotalMemoryUsage. Total used size of codebin memory + main-thread stack + allocated heap.&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 8 || 0 || IsCurrentProcessBeingDebugged&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 9 || 0 || Returns ResourceLimit handle for current process. Used by [[Process_Manager_services|PM]].&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 10 || -1, {current coreid} || IdleTickCount&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 11 || 0-3 || RandomEntropy from current process. TRNG. Used to seed usermode PRNGs.&lt;br /&gt;
|-&lt;br /&gt;
| Process || 12 || 0 || [2.0.0+] AddressSpaceBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 13 || 0 || [2.0.0+] AddressSpaceSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 14 || 0 || [2.0.0+] StackRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 15 || 0 || [2.0.0+] StackRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 16 || 0 || [3.0.0+] PersonalMmHeapSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 17 || 0 || [3.0.0+] PersonalMmHeapUsage&lt;br /&gt;
|-&lt;br /&gt;
| Process || 18 || 0 || [3.0.0+] TitleId&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 19 || 0 || [4.0.0-4.1.0] PrivilegedProcessId_LowerBound&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 19 || 1 || [4.0.0-4.1.0] PrivilegedProcessId_UpperBound&lt;br /&gt;
|-&lt;br /&gt;
| Process || 20 || 0 || [5.0.0+] UserExceptionContextAddr&lt;br /&gt;
|-&lt;br /&gt;
| Thread  || 0xF0000002 || 0 || Performance counter related.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcMapPhysicalMemory ==&lt;br /&gt;
This is like svcSetHeapSize except you can allocate heap at any address you&#039;d like.&lt;br /&gt;
&lt;br /&gt;
Uses current process pool partition.&lt;br /&gt;
&lt;br /&gt;
== svcDumpInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Does nothing, just returns with registers set to all-zero.&lt;br /&gt;
&lt;br /&gt;
== svcAcceptSession ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Port&amp;gt; || Port&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ServerSession&amp;gt; || Session&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf201:&#039;&#039;&#039; No session waiting to be accepted&lt;br /&gt;
&lt;br /&gt;
== svcReplyAndReceive ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || *Handle&amp;lt;Port or ServerSession&amp;gt; || Handles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u32 || NumHandles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || Handle&amp;lt;ServerSession&amp;gt; || ReplyTarget&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 (nanoseconds) || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u32 || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If ReplyTarget is not zero, a reply from the TLS will be sent to that session.&lt;br /&gt;
Then it will wait until either of the passed sessions has an incoming message, is closed, a passed port has an incoming connection, or the timeout expires.&lt;br /&gt;
If there is an incoming message, it is copied to the TLS.&lt;br /&gt;
&lt;br /&gt;
If ReplyTarget is zero, the TLS should contain a blank message. If this message has a C descriptor, the buffer it points to will be used as the pointer buffer. See [[IPC_Marshalling#IPC_buffers]]. Note that a pointer buffer cannot be specified if ReplyTarget is not zero.&lt;br /&gt;
&lt;br /&gt;
After being validated, passed handles will be enumerated in order; even if a session has been closed, if one that appears earlier in the list has an incoming message, it will take priority and a result code of 0x0 will be returned.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. Either a session has an incoming message or a port has an incoming connection. HandleIndex is set appropriately.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xea01:&#039;&#039;&#039; Timeout. No handles were signalled before the timeout expired. HandleIndex is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf601:&#039;&#039;&#039; Port remote dead. One of the sessions has been closed. HandleIndex is set appropriately.&lt;br /&gt;
&lt;br /&gt;
== svcMapPhysicalMemoryUnsafe ==&lt;br /&gt;
Same as [[#svcMapPhysicalMemory]] except it always uses pool partition 0.&lt;br /&gt;
&lt;br /&gt;
== svcCreateCodeMemory ==&lt;br /&gt;
Takes an address range with backing memory to create the code memory object.&lt;br /&gt;
&lt;br /&gt;
The memory is initially memset to 0xFF after being locked.&lt;br /&gt;
&lt;br /&gt;
== svcControlCodeMemory ==&lt;br /&gt;
Maps the backing memory for a Code memory object into the current process.&lt;br /&gt;
&lt;br /&gt;
For [[#CodeMemoryOperation|CodeMemoryOperation_MapOwner]], memory permission must be RW-.&lt;br /&gt;
&lt;br /&gt;
For [[#CodeMemoryOperation|CodeMemoryOperation_MapSlave]], memory permission must be R-- or R-X.&lt;br /&gt;
&lt;br /&gt;
Operations [[#CodeMemoryOperation|CodeMemoryOperation_UnmapOwner/CodeMemoryOperation_UnmapSlave]] unmap memory that was previously mapped this way.&lt;br /&gt;
&lt;br /&gt;
This allows one &amp;quot;secure JIT&amp;quot; process to map the code memory as RW-, and the other &amp;quot;slave&amp;quot; process to map it R-X.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] Error 0xE401 is now returned when the process owner of the Code memory object is the same as the current process.&lt;br /&gt;
&lt;br /&gt;
== svcReadWriteRegister ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || RegAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u64 || RwMask&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || u64 || InValue&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1|| u64 || OutValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Read/write IO registers with a hardcoded whitelist. Input address is physical-address and must be aligned to 4.&lt;br /&gt;
&lt;br /&gt;
rw_mask is 0 for reading and 0xffffffff for writing. You can also write individual bits by using a mask value.&lt;br /&gt;
&lt;br /&gt;
You can only write to registers inside physical pages 0x70019000 (MC), 0x7001C000 (MC0), 0x7001D000 (MC1), and they all share the same whitelist.&lt;br /&gt;
&lt;br /&gt;
The whitelist is same for writing as for reading.&lt;br /&gt;
&lt;br /&gt;
The whitelist is:&lt;br /&gt;
&lt;br /&gt;
0x054, 0x090, 0x094, 0x098, 0x09c, 0x0a0, 0x0a4, 0x0a8, 0x0ac, 0x0b0, 0x0b4, 0x0b8, 0x0bc, 0x0c0, 0x0c4, 0x0c8, 0x0d0, 0x0d4, 0x0d8, 0x0dc, 0x0e0, 0x100, 0x108, 0x10c, 0x118, 0x11c, 0x124, 0x128, 0x12c, 0x130, 0x134, 0x138, 0x13c, 0x158, 0x15c, 0x164, 0x168, 0x16c, 0x170, 0x174, 0x178, 0x17c, 0x200, 0x204, 0x2e4, 0x2e8, 0x2ec, 0x2f4, 0x2f8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37c, 0x380, 0x390, 0x394, 0x398, 0x3ac, 0x3b8, 0x3bc, 0x3c0, 0x3c4, 0x3d8, 0x3e8, 0x41c, 0x420, 0x424, 0x428, 0x42c, 0x430, 0x44c, 0x47c, 0x480, 0x484, 0x50c, 0x554, 0x558, 0x55c, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69c, 0x6a0, 0x6a4, 0x6c0, 0x6c4, 0x6f0, 0x6f4, 0x960, 0x970, 0x974, 0xa20, 0xa24, 0xb88, 0xb8c, 0xbc4, 0xbc8, 0xbcc, 0xbd0, 0xbd4, 0xbd8, 0xbdc, 0xbe0, 0xbe4, 0xbe8, 0xbec, 0xc00, 0xc5c, 0xcac&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Whitelist was extended with 0x4c4, 0x4c8, 0x4cc, 0x584, 0x588, 0x58c.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] The IO registers in range 0x7000E400 (PMC) size 0xC00 skip the whitelist, and do a TrustZone call using [[SMC]] Id1 0xC3000008(ReadWriteRegister).&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] Access to the Memory Controller (0x70019000) also uses smcReadWriteRegister.&lt;br /&gt;
&lt;br /&gt;
Here is the whitelist imposed by that SMC, relative to the start of the PMC registers:&lt;br /&gt;
&lt;br /&gt;
0x000, 0x00c, 0x010, 0x014, 0x01c, 0x020, 0x02c, 0x030, 0x034, 0x038, 0x03c, 0x040, 0x044, 0x048, 0x0dc, 0x0e0, 0x0e4, 0x160, 0x164, 0x168, 0x170, 0x1a8, 0x1b8, 0x1bc, 0x1c0, 0x1c4, 0x1c8, 0x2b4, 0x2d4, 0x440, 0x4d8&lt;br /&gt;
&lt;br /&gt;
Here is the whitelist imposed by smcReadWriteRegister (checked in addition to the whitelist in svcReadWriteRegister), relative to the start of the MC registers:&lt;br /&gt;
&lt;br /&gt;
0x000, 0x004, 0x008, 0x00C, 0x010, 0x01C, 0x020, 0x030, 0x034, 0x050, 0x054, 0x090, 0x094, 0x098, 0x09C, 0x0A0, 0x0A4, 0x0A8, 0x0AC, 0x0B0, 0x0B4, 0x0B8, 0x0BC, 0x0C0, 0x0C4, 0x0C8, 0x0D0, 0x0D4, 0x0D8, 0x0DC, 0x0E0, 0x100, 0x108, 0x10C, 0x118, 0x11C, 0x124, 0x128, 0x12C, 0x130, 0x134, 0x138, 0x13C, 0x158, 0x15C, 0x164, 0x168, 0x16C, 0x170, 0x174, 0x178, 0x17C, 0x200, 0x204, 0x238, 0x240, 0x244, 0x250, 0x254, 0x258, 0x264, 0x268, 0x26C, 0x270, 0x274, 0x280, 0x284, 0x288, 0x28C, 0x294, 0x2E4, 0x2E8, 0x2EC, 0x2F4, 0x2F8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37C, 0x380, 0x390, 0x394, 0x398, 0x3AC, 0x3B8, 0x3BC, 0x3C0, 0x3C4, 0x3D8, 0x3E8, 0x41C, 0x420, 0x424, 0x428, 0x42C, 0x430, 0x44C, 0x47C, 0x480, 0x484, 0x4C4, 0x4C8, 0x4CC, 0x50C, 0x554, 0x558, 0x55C, 0x584, 0x588, 0x58C, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69C, 0x6A0, 0x6A4, 0x6C0, 0x6C4, 0x6F0, 0x6F4, 0x960, 0x970, 0x974, 0x9B8, 0xA20, 0xA24, 0xA88, 0xA94, 0xA98, 0xA9C, 0xAA0, 0xAA4, 0xAA8, 0xAAC, 0xAB0, 0xAB4, 0xAB8, 0xABC, 0xAC0, 0xAC4, 0xAC8, 0xACC, 0xAD0, 0xAD4, 0xAD8, 0xADC, 0xAE0, 0xB88, 0xB8C, 0xBC4, 0xBC8, 0xBCC, 0xBD0, 0xBD4, 0xBD8, 0xBDC, 0xBE0, 0xBE4, 0xBE8, 0xBEC, 0xC00, 0xC5C, 0xCAC&lt;br /&gt;
&lt;br /&gt;
== svcCreateSharedMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#Permission]] || LocalPerm&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || RemotePerm&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;SharedMemory&amp;gt; || MemHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other perm can be used to enforce permission 1, 3, or 0x10000000 if don&#039;t care.&lt;br /&gt;
&lt;br /&gt;
Allocates memory from the current process&#039; pool partition.&lt;br /&gt;
&lt;br /&gt;
== svcMapTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || Handle&amp;lt;TransferMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The newly mapped pages will have [[#MemoryState]] type 0xE.&lt;br /&gt;
&lt;br /&gt;
You must pass same size and permissions as given in svcCreateMemoryMirror, otherwise error.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || Handle&amp;lt;TransferMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size must match size given in map syscall, otherwise there&#039;s an invalid-size error.&lt;br /&gt;
&lt;br /&gt;
== svcQueryPhysicalAddress ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]]|| Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || PhysAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || u64 || KernelAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X3 || u64 || Size&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== svcQueryIoMapping ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || PhysAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || void* || VirtAddr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns a virtual address mapped to a given IO range.&lt;br /&gt;
&lt;br /&gt;
== svcCreateDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || StartAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || EndAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || AddressSpaceHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Creates a virtual address space for binding device address spaces and returns a handle.&lt;br /&gt;
&lt;br /&gt;
dev_as_start_addr is normally set to 0 and dev_as_end_addr is normally set to 0xFFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
== svcAttachDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#DeviceName]] || DeviceId&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Attaches a device address space to a [[#DeviceName|device]].&lt;br /&gt;
&lt;br /&gt;
== svcDetachDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#DeviceName]] || DeviceId&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Detaches a device address space from a [[#DeviceName|device]].&lt;br /&gt;
&lt;br /&gt;
== svcMapDeviceAddressSpaceByForce ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps an attached device address space to an userspace address.&lt;br /&gt;
&lt;br /&gt;
dev_map_addr is the userspace destination address, while dev_as_addr is the source address between dev_as_start_addr and dev_as_end_addr (passed to [[#svcCreateDeviceAddressSpace]]).&lt;br /&gt;
&lt;br /&gt;
The userspace destination address must have the [[SVC#MemoryState|MapDeviceAllowed]] bit set. Bit [[SVC#MemoryAttribute|IsDeviceMapped]] will be set after mapping.&lt;br /&gt;
&lt;br /&gt;
== svcMapDeviceAddressSpaceAligned ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps an attached device address space to an userspace address.&lt;br /&gt;
&lt;br /&gt;
Same as [[#svcMapDeviceAddressSpaceByForce]], but the userspace destination address must have the [[SVC#MemoryState|MapDeviceAlignedAllowed]] bit set instead.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Unmaps an attached device address space from an userspace address.&lt;br /&gt;
&lt;br /&gt;
== svcGetSystemInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || InfoId&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || InfoSubId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || Out&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Handle type || Id0 || Id1 || Description&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 0 || TotalMemorySize_Application&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 1 || TotalMemorySize_Applet&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 2 || TotalMemorySize_System&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 0 || 3 || TotalMemorySize_SystemUnsafe&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 0 || CurrentMemorySize_Application&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 1 || CurrentMemorySize_Applet&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 2 || CurrentMemorySize_System&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 1 || 3 || CurrentMemorySize_SystemUnsafe&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 2 || 0 || PrivilegedProcessId_LowerBound&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 2 || 1 || PrivilegedProcessId_UpperBound&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcSetProcessMemoryPermission ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || void* || Perm&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This sets the memory permissions for the specified memory with the supplied process handle.&lt;br /&gt;
&lt;br /&gt;
This throws an error(0xD801) when the input perm is &amp;gt;0x5, hence -WX and RWX are not allowed.&lt;br /&gt;
&lt;br /&gt;
== svcMapProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the src address from the supplied process handle into the current process.&lt;br /&gt;
&lt;br /&gt;
This allows mapping code and rodata with RW- permission.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps what was mapped by [[#svcMapProcessMemory]].&lt;br /&gt;
&lt;br /&gt;
== svcQueryProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#MemoryInfo]]* || MemInfoPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || PageInfo || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Equivalent to [[#svcQueryMemory]] except takes a process handle.&lt;br /&gt;
&lt;br /&gt;
== svcMapProcessCodeMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes a process handle, and maps normal heap in that process as executable code in that process. Used when loading NROs. This does not support using the current-process handle alias.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapProcessCodeMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps what was mapped by [[#svcMapProcessCodeMemory]].&lt;br /&gt;
&lt;br /&gt;
== svcCreateProcess ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || [[#CreateProcessInfo]]* || InfoPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || CapabilitiesPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || CapabilitiesNum&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes a [[#CreateProcessInfo]] as input.&lt;br /&gt;
&lt;br /&gt;
== svcGetProcessInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || [[#ProcessState]] || State&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns an enum with value 0-7.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
[2.0.0+] Exactly 6 debug SVCs require that [[SPL_services#GetConfig|IsDebugMode]] is non-zero. Error 0x4201 is returned otherwise.&lt;br /&gt;
* svcBreakDebugProcess&lt;br /&gt;
* svcContinueDebugEvent&lt;br /&gt;
* svcWriteDebugProcessMemory&lt;br /&gt;
* svcSetDebugThreadContext&lt;br /&gt;
* svcTerminateDebugProcess&lt;br /&gt;
* svcSetHardwareBreakPoint&lt;br /&gt;
&lt;br /&gt;
svcDebugActiveProcess stops execution of the target process, the normal method for resuming it requires svcContinueDebugEvent(see above). Closing the debug handle also results in execution being resumed.&lt;br /&gt;
&lt;br /&gt;
== svcSetHardwareBreakPoint ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || u32 || hardware_breakpoint_id&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || flags&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u64 || value&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sets one of the AArch64 hardware breakpoints. The nintendo switch has 6 hardware breakpoints, and 4 hardware watchpoints. The syscall has two behaviors depending on the value of hardware_breakpoint_id:&lt;br /&gt;
&lt;br /&gt;
If hardware_breakpoint_id &amp;lt; 0x10, then it sets one of the AArch64 hardware breakpoints. Flags will go to DBGBCRn_EL1, and value to DBGBVRn_EL1. The only flags the user is allowed to set are those in the bitmask 0x7F01E1. Furthermore, the kernel will or it with 0x4004, in order to set various security flags to guarantee the watchpoints only triggers for code in EL0. If the user asks for a Breakpoint Type of ContextIDR match, the kernel shall use the given debug_handle to set DBGBVRn_EL1 to the ContextID of the debugged process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If hardware_breakpoint_id is between 0x10 and 0x20 (exclusive), then it sets one of the AArch64 hardware watchpoints. Flags will go to DBGWCRn_EL1, and the value to DBGWVRn_EL1. The only flags the user is allowed to set are those in the bitmask 0xFF0F1FF9. Furthermore, the kernel will or it with 0x104004. This will set various security flags, and set the watchpoint type to be a Linked Watchpoint. This means that you need to link it to a Linked ContextIDR breakpoint. Check the ARM documentation for more information.&lt;br /&gt;
&lt;br /&gt;
Note that hardware_breakpoint_id 0 to 4 match only to Virtual Address, while hardware_breakpoint_id 5 and 6 match against either Virtual Address, ContextID, or VMID. As such, if you are configuring a breakpoint to link for a watchpoint, make sure you use hardware_breakpoint_id 5 or 6.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more documentation for hardware breakpoints, check out the AArch64 documentation for the [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0488h/way1382455558968.html DBGBCRn_EL1 register] and the [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0488h/way1382455560629.html DBGWCRn_EL1 register]&lt;br /&gt;
&lt;br /&gt;
= Enum/Structures =&lt;br /&gt;
== ThreadContextRequestFlags ==&lt;br /&gt;
Bitfield of one of more of these:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || NormalContext&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DeviceName ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DeviceName_AFI&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DeviceName_AVPC&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DeviceName_DC&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DeviceName_DCB&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DeviceName_HC&lt;br /&gt;
|-&lt;br /&gt;
| 5 || DeviceName_HDA&lt;br /&gt;
|-&lt;br /&gt;
| 6 || DeviceName_ISP2&lt;br /&gt;
|-&lt;br /&gt;
| 7 || DeviceName_MSENCNVENC&lt;br /&gt;
|-&lt;br /&gt;
| 8 || DeviceName_NV&lt;br /&gt;
|-&lt;br /&gt;
| 9 || DeviceName_NV2&lt;br /&gt;
|-&lt;br /&gt;
| 10 || DeviceName_PPCS&lt;br /&gt;
|-&lt;br /&gt;
| 11 || DeviceName_SATA&lt;br /&gt;
|-&lt;br /&gt;
| 12 || DeviceName_VI&lt;br /&gt;
|-&lt;br /&gt;
| 13 || DeviceName_VIC&lt;br /&gt;
|-&lt;br /&gt;
| 14 || DeviceName_XUSB_HOST&lt;br /&gt;
|-&lt;br /&gt;
| 15 || DeviceName_XUSB_DEV&lt;br /&gt;
|-&lt;br /&gt;
| 16 || DeviceName_TSEC&lt;br /&gt;
|-&lt;br /&gt;
| 17 || DeviceName_PPCS1&lt;br /&gt;
|-&lt;br /&gt;
| 18 || DeviceName_DC1&lt;br /&gt;
|-&lt;br /&gt;
| 19 || DeviceName_SDMMC1A&lt;br /&gt;
|-&lt;br /&gt;
| 20 || DeviceName_SDMMC2A&lt;br /&gt;
|-&lt;br /&gt;
| 21 || DeviceName_SDMMC3A&lt;br /&gt;
|-&lt;br /&gt;
| 22 || DeviceName_SDMMC4A&lt;br /&gt;
|-&lt;br /&gt;
| 23 || DeviceName_ISP2B&lt;br /&gt;
|-&lt;br /&gt;
| 24 || DeviceName_GPU&lt;br /&gt;
|-&lt;br /&gt;
| 25 || DeviceName_GPUB&lt;br /&gt;
|-&lt;br /&gt;
| 26 || DeviceName_PPCS2&lt;br /&gt;
|-&lt;br /&gt;
| 27 || DeviceName_NVDEC&lt;br /&gt;
|-&lt;br /&gt;
| 28 || DeviceName_APE&lt;br /&gt;
|-&lt;br /&gt;
| 29 || DeviceName_SE&lt;br /&gt;
|-&lt;br /&gt;
| 30 || DeviceName_NVJPG&lt;br /&gt;
|-&lt;br /&gt;
| 31 || DeviceName_HC1&lt;br /&gt;
|-&lt;br /&gt;
| 32 || DeviceName_SE1&lt;br /&gt;
|-&lt;br /&gt;
| 33 || DeviceName_AXIAP&lt;br /&gt;
|-&lt;br /&gt;
| 34 || DeviceName_ETR&lt;br /&gt;
|-&lt;br /&gt;
| 35 || DeviceName_TSECB&lt;br /&gt;
|-&lt;br /&gt;
| 36 || DeviceName_TSEC1&lt;br /&gt;
|-&lt;br /&gt;
| 37 || DeviceName_TSECB1&lt;br /&gt;
|-&lt;br /&gt;
| 38 || DeviceName_NVDEC1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CodeMemoryOperation ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CodeMemoryOperation_MapOwner&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CodeMemoryOperation_MapSlave&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CodeMemoryOperation_UnmapOwner&lt;br /&gt;
|-&lt;br /&gt;
| 3 || CodeMemoryOperation_UnmapSlave&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LimitableResource ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || LimitableResource_Memory&lt;br /&gt;
|-&lt;br /&gt;
| 1 || LimitableResource_Threads&lt;br /&gt;
|-&lt;br /&gt;
| 2 || LimitableResource_Events&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LimitableResource_TransferMemories&lt;br /&gt;
|-&lt;br /&gt;
| 4 || LimitableResource_Sessions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessInfoType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ProcessState|ProcessInfoType_ProcessState]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessState ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ProcessState_Created ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ProcessState_CreatedAttached ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ProcessState_Started ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ProcessState_Crashed || Processes will not enter this state unless they were created with [[#CreateProcessInfo|EnableDebug]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ProcessState_StartedAttached ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ProcessState_Exiting ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ProcessState_Exited ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ProcessState_DebugSuspended ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DebugThreadParam ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DebugThreadParam_DynamicPriority&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DebugThreadParam_SchedulingStatus&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DebugThreadParam_PreferredCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DebugThreadParam_CurrentCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DebugThreadParam_AffinityMask&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Dynamic priority: output in out2&lt;br /&gt;
&lt;br /&gt;
Scheduling status: out1 contains bit0: is debug-suspended, bit1: is user-suspended (svcSetThreadActivity 1 or svcSetProcessActivity 1).&lt;br /&gt;
Out2 contains {suspended, idle, running, terminating} =&amp;gt; {5, 0, 1, 4}&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_PreferredCpuCore: output in out2&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_CurrentCpuCore: output in out2&lt;br /&gt;
&lt;br /&gt;
DebugThreadParam_AffinityMask: output in out1&lt;br /&gt;
&lt;br /&gt;
== CreateProcessInfo ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 12 || || ProcessName (doesn&#039;t have to be null-terminated)&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 4 || || ProcessCategory (0: regular title, 1: kernel built-in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 8 || || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 8 || || CodeAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 4 || || CodeNumPages&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 4 || || MmuFlags&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit0 || IsAarch64&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit3-1 || [[#AddressSpaceType]]&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit4 || [2.0.0+] EnableDebug&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit5 || EnableAslr&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit6 || UseSystemMemBlocks&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit7 || [4.0.0] ?&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit10-7 || [5.0.0+] PoolPartition (0=Application, 1=Applet, 2=Sysmodule, 3=Nvservices)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 4 || || ResourceLimitHandle or zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 4 || || [3.0.0+] PersonalMmHeapNumPages&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On [1.0.0] there&#039;s only one pool.&lt;br /&gt;
&lt;br /&gt;
On [2.0.0-4.0.0] PoolPartition is 1 for built-ins and 0 for rest.&lt;br /&gt;
&lt;br /&gt;
On [5.0.0] PoolPartition is specified in CreateProcessArgs. There are now 4 pool partitions.&lt;br /&gt;
&lt;br /&gt;
On [6.0.0] (maybe lower?) a zero ResourceLimitHandle defaults to sysmodule limits and 0x12300000 bytes of memory.&lt;br /&gt;
&lt;br /&gt;
=== AddressSpaceType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Type || Name || Width || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Normal_32Bit || 32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Normal_36Bit || 36 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || WithoutMap_32Bit || 32 || Appears to be missing map region [?]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [2.0.0+] Normal_39Bit || 39 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryInfo ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 8 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 4 || MemoryType: lower 8 bits of [[#MemoryState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 4 || [[#MemoryAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 4 || Permission (bit0: R, bit1: W, bit2: X)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 4 || IpcRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 4 || DeviceRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 4 || Padding: always zero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryAttribute ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || IsBorrowed&lt;br /&gt;
|-&lt;br /&gt;
| 1 || IsIpcMapped: when IpcRefCount &amp;gt; 0.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || IsDeviceMapped: when DeviceRefCount &amp;gt; 0.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsUncached&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryState ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-0 || Type&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#svcSetMemoryPermission|PermissionChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ForceReadWritableByDebugSyscalls&lt;br /&gt;
|-&lt;br /&gt;
| 10 || IpcSendAllowed_Type0&lt;br /&gt;
|-&lt;br /&gt;
| 11 || IpcSendAllowed_Type3&lt;br /&gt;
|-&lt;br /&gt;
| 12 || IpcSendAllowed_Type1&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#svcSetProcessMemoryPermission|ProcessPermissionChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#svcMapMemory|MapAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#svcUnmapProcessCodeMemory|UnmapProcessCodeMemoryAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#svcCreateTransferMemory|TransferMemoryAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#svcQueryPhysicalAddress|QueryPhysicalAddressAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || MapDeviceAllowed ([[#svcMapDeviceAddressSpace]] and [[#svcMapDeviceAddressSpaceByForce]])&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#svcMapDeviceAddressSpaceAligned|MapDeviceAlignedAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#svcSendSyncRequestWithUserBuffer|IpcBufferAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || IsPoolAllocated/IsReferenceCounted&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [[#svcMapProcessMemory|MapProcessAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [[#svcSetMemoryAttribute|AttributeChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [4.0.0+] CodeMemoryAllowed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000000 || MemoryType_Unmapped ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002001 || MemoryType_Io || Mapped by kernel capability parsing in [[#svcCreateProcess]]. &lt;br /&gt;
|-&lt;br /&gt;
| 0x00042002 || MemoryType_Normal || Mapped by kernel capability parsing in [[#svcCreateProcess]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00DC7E03 || MemoryType_CodeStatic || Mapped during [[#svcCreateProcess]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x01FEBD04&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x03FEBD04&lt;br /&gt;
|| MemoryType_CodeMutable || Transition from 0xDC7E03 performed by [[#svcSetProcessMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
0x017EBD05&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x037EBD05&lt;br /&gt;
|| MemoryType_Heap || Mapped using [[#svcSetHeapSize]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402006 || MemoryType_SharedMemory || Mapped using [[#svcMapSharedMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00482907 || [1.0.0] MemoryType_Alias || Mapped using [[#svcMapMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00DD7E08 || MemoryType_ModuleCodeStatic || Mapped using [[#svcMapProcessCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x01FFBD09&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x03FFBD09&lt;br /&gt;
|| MemoryType_ModuleCodeMutable || Transition from 0xDD7E08 performed by [[#svcSetProcessMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3C0A || [[IPC_Marshalling|MemoryType_IpcBuffer0]] || IPC buffers with descriptor flags=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3C0B || MemoryType_Stack || Mapped using [[#svcMapMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040200C || [[Thread Local Storage|MemoryType_ThreadLocal]] || Mapped during [[#svcCreateThread]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x015C3C0D || MemoryType_TransferMemoryIsolated || Mapped using [[#svcMapTransferMemory]] when the owning process has perm=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C380E || MemoryType_TransferMemory || Mapped using [[#svcMapTransferMemory]] when the owning process has perm!=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040380F || MemoryType_ProcessMemory || Mapped using [[#svcMapProcessMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000010 || MemoryType_Reserved ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3811 || [[IPC_Marshalling|MemoryType_IpcBuffer1]] || IPC buffers with descriptor flags=1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x004C2812 || [[IPC_Marshalling|MemoryType_IpcBuffer3]] || IPC buffers with descriptor flags=3.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002013 || MemoryType_KernelStack || Mapped in kernel during [[#svcCreateThread]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402214 || [4.0.0+] MemoryType_CodeReadOnly || Mapped in kernel during [[#svcControlCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402015 || [4.0.0+] MemoryType_CodeWritable || Mapped in kernel during [[#svcControlCodeMemory]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ArbitrationType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || WaitIfLessThan&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || DecrementAndWaitIfLessThan&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || WaitIfEqual&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SignalType ==&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || Signal&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || SignalAndIncrementIfEqual&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || SignalAndModifyBasedOnWaitingThreadCountIfEqual&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugFlagsOld ==&lt;br /&gt;
[1.0.0-2.3.0]&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || IgnoreException (note: ResumeAllThreads or debug-suspended-thread-id needed)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || SwallowException&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || ResumeAllThreads&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugFlags ==&lt;br /&gt;
[3.0.0+]&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || IgnoreException (note: doesn&#039;t need to be set in the same call than Resume)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || DontCatchExceptions&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || Resume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 || IgnoreOtherThreadsExceptions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
IgnoreExceptionsOfOthers is like IgnoreException but acts on all threads that aren&#039;t in the input list. The affected threads are resumed.&lt;br /&gt;
&lt;br /&gt;
Only one of of Resume and IgnoreOtherThreadsExceptions can be set at a time.&lt;br /&gt;
&lt;br /&gt;
If the input number of threads is 0, this means &amp;quot;all threads&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== DebugEventInfo ==&lt;br /&gt;
&lt;br /&gt;
The below table is for the Aarch64 version of the system call. For A32, all u64 fields but title/process/thread id are actually u32, making the structure 0x28-byte-big (0x40 for a64).&lt;br /&gt;
&lt;br /&gt;
Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u32 || EventType&lt;br /&gt;
|-&lt;br /&gt;
| 4 || u32 || Flags (bit0: NeedsContinue)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || || PerTypeSpecifics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AttachProcess specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || char[12] || ProcessName&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || u32 || MmuFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || [5.0.0+] UserExceptionContextAddr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AttachThread specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || TlsPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || Entrypoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exit specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32|| Type (0=PausedThread, 1=RunningThread, 2=ExitedProcess, 3=TerminatedProcess)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exception specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || ExceptionType&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || FaultRegister&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || || PerExceptionSpecifics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugEventType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DebugEvent_AttachProcess&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DebugEvent_AttachThread&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DebugEvent_ExitProcess&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DebugEvent_ExitThread&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DebugEvent_Exception&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugExceptionType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Exception_Trap (*)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Exception_InstructionAbort&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Exception_DataAbortMisc (**)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Exception_PcSpAlignmentFault&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Exception_DebuggerAttached&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Exception_BreakPoint&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Exception_UserBreak&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Exception_DebuggerBreak&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Exception_BadSvcId&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Exception_SError [not in 1.0.0]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; Undefined instructions, software breakpoints, some other traps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt; Data aborts, FP traps, and everything else that doesn&#039;t belong to any of the above.&lt;br /&gt;
&lt;br /&gt;
Trap specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BreakPoint specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || IsWatchpoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
UserBreak specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || Info0&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || Info1&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || Info2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BadSvcId specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || SvcId&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Exception handling =&lt;br /&gt;
First of all, a function that might be called by synchronous exception handler and that is called by the SError handler fetches the exception info, adjusts PC, panics on exceptions taken from EL1, then dispatches the exception.&lt;br /&gt;
&lt;br /&gt;
The dispatcher has two mutually exclusive exception reporting methods:&lt;br /&gt;
* by storing information at the start of the process&#039;s TLS memregion (TPIDRRO_EL0) and jumping back to the crt0&lt;br /&gt;
* by using KDebug&lt;br /&gt;
&lt;br /&gt;
KDebug dispatching is used when at least one of the following conditions are met:&lt;br /&gt;
* SMC ConfigItem KernelMemConfig bit 1 is NOT set (it isn&#039;t on retail), unless: this is a software or hardware breakpoint, or a watchpoint, or [4.0.0+?] the process is attached and this is a Google PNaCl trap instruction (see LLVM source)&lt;br /&gt;
* FAR doesn&#039;t point to a valid address in mapped-readable CodeStatic memory (i.e. this is the case for NRO and JIT memory) or this is one of the following exceptions (it particular, that doesn&#039;t include FP exceptions occurring in CodeStatic memory):&lt;br /&gt;
** Uncategorized&lt;br /&gt;
** IllegalState&lt;br /&gt;
** SupervisorCallA32&lt;br /&gt;
** SupervisorCallA64&lt;br /&gt;
** PCAlignment&lt;br /&gt;
** SPAlignment&lt;br /&gt;
** SError&lt;br /&gt;
** BreakpointLowerEl&lt;br /&gt;
** SoftwareStepLowerEl (note: no way set single-step flag; not parsed)&lt;br /&gt;
** WatchpointLowerEl&lt;br /&gt;
** SoftwareBreakpointA32 (note: not parsed)&lt;br /&gt;
** SoftwareBreakpointA64 (note: not parsed)&lt;br /&gt;
    &lt;br /&gt;
In all other cases the userland-handled exception path is taken.&lt;br /&gt;
&lt;br /&gt;
KDebug path:&lt;br /&gt;
&lt;br /&gt;
If the process is attached, the exception is reported to the KDebug. If the thread was continued using flag IgnoreExceptions, it returns from the exception as if nothing happened.&lt;br /&gt;
&lt;br /&gt;
If the latter is not the case, or if the process isn&#039;t attached, proceed to [2.0.0+] crash reporting (or in [1.0.0] just terminate the process): &lt;br /&gt;
if EnableDebug is set, and depending on the process state (more than one crash per process isn&#039;t permitted) it may signal itself with ProcessState_Crashed so that PM asks NS to start creport so that creport attaches to it and reports the crashes. Otherwise, just terminate.&lt;br /&gt;
&lt;br /&gt;
Userland reporting path and svcReturnFromException:&lt;br /&gt;
&lt;br /&gt;
TLS region start (A64):&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x148 || Exception stack&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || 0x78 || ExceptionFrameA64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ExceptionFrameA64:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x48 (8*9) || GPRs 0..8.&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x8 || lr&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || 0x8 || sp&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || 0x8 || pc (elr_el1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || 0x4 || pstate &amp;amp; 0xFF0FFE20&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || 0x4 || afsr0&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || 0x4 || afsr1&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || 0x4 || esr&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || 0x8 || far&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
TLS region start (A32):&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x178 || Exception stack&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || 0x44 || ExceptionFrameA32&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ExceptionFrameA32:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x20 (8*4) || GPRs 0..7.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || sp&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || lr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x4 || pc (elr_el1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x4 || tpidr_el0 = 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x4 || cpsr &amp;amp; 0xFF0FFE20&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x4 || afsr0&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x4 || afsr1&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x4 || esr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0x4 || far&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In that case, after storing the regs in the TLS, the exception handler returns to the application&#039;s crt0 (entrypoint), with X0=&amp;lt;error description code&amp;gt; (see below) and X1=SP=frame=&amp;lt;stack top&amp;gt; (see above)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Desc. code || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0x100 || Instruction abort&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || Misaligned PC&lt;br /&gt;
|-&lt;br /&gt;
| 0x103 || Misaligned SP&lt;br /&gt;
|-&lt;br /&gt;
| 0x106 || SError [not in 1.0.0?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x301 || Bad SVC&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || Uncategorized, CP15RTTrap, CP15RRTTrap, CP14RTTrap, CP14RRTTrap, IllegalState, SystemRegisterTrap&lt;br /&gt;
|-&lt;br /&gt;
| 0x101 || None of the above, EC &amp;lt;= 0x34 and not a breakpoint&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(During normal app boot the process is invoked with X0=0 and X1=main_thread_handle. The crt0 of retail apps determines whether to boot normally or handle an exception if X0 is set to 0 or not)&lt;br /&gt;
&lt;br /&gt;
The application is supposed to promptly update the contents of elr_el1 to a user handler (and any other regs it sees fit) and call svcReturnFromException (error code) to call that handler. The latter is then expected to promptly abort the program.&lt;br /&gt;
&lt;br /&gt;
svcReturnFromException updates the contents of the kernel stack frame with what the user provided in the TLS structure, sets TPIDR_EL0 to 1, then:&lt;br /&gt;
* if the provided error code is 0, gracefully pivots and returns from exception&lt;br /&gt;
* if it is not, replays the exception and pass it to the KDebug (see above). One can pass 0x10001 to prevent process termination. If the process is attached, this also prevents crash-collection/termination (different from the exception handler behavior)&lt;br /&gt;
&lt;br /&gt;
If an exception occurs from the above user handler, the entire exception handling process will repeat with the new exception.&lt;br /&gt;
&lt;br /&gt;
Note that if a thread that wasn&#039;t faulting calls svcReturnFromException, it signals an &amp;quot;invalid syscall&amp;quot; exception&lt;br /&gt;
&lt;br /&gt;
Note that [[SMC|IsDebugMode]] is not used during exception-handling, except for enabling printing a message to UART-A. This UART code causes a system-hang on retail (likely due to a loop that doesn&#039;t exit). This printing doesn&#039;t seem to run when the process is attached for debugging?&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=6.2.0&amp;diff=5581</id>
		<title>6.2.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=6.2.0&amp;diff=5581"/>
		<updated>2018-11-21T23:01:15Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 6.2.0 system update was released on November 19, 2018. This Switch update was released for the following regions: ALL.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: Yes&lt;br /&gt;
&lt;br /&gt;
This update burns an additional fuse and has a fuse count of 8.&lt;br /&gt;
&lt;br /&gt;
6.2.0 changes fundamental key generation, no longer using keyblobs at all (the OS will boot successfully even if both copies of keyblob are replaced with FFs in NAND).&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/p/897 Official] ALL change-log:&lt;br /&gt;
* 	General system stability improvements to enhance the user&#039;s experience.&lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
&amp;lt;fill this in (manually) later&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;All&#039;&#039; titles were updated (including flog) except for EULA, all of these (besides FIRM titles) use the new keydata.&lt;br /&gt;
&lt;br /&gt;
==FIRM==&lt;br /&gt;
Warmboot has been updated.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=11-19-18_07-05-09&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Title_list/Games&amp;diff=5493</id>
		<title>Title list/Games</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Title_list/Games&amp;diff=5493"/>
		<updated>2018-11-09T00:12:46Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note: Game updates have the same titleID as the main application, except with bitmask 0x800 set.&lt;br /&gt;
&lt;br /&gt;
= Applications / Games =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! TitleID || Description || Region || Minimum Required OS || Distribution Method || Title Versions || Cartridge Description || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0100000000010000 || Super Mario Odyssey™ || CHN EUR JPN KOR USA || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000040098E4000 || Layers of Fear: Legacy (レイヤーズ・オブ・フィアー：レガシー) || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000060085D2000 || A Hole New World || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010000700A572000 || State of Anarchy: Master of Mayhem || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010000A00218E000 || スプラトゥーン２ 先行試射会 || JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010000E004DAE000 || ファンタシースターオンライン2 クラウド || JPN || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100011005D92000 || Batman - The Telltale Series || EUR USA || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100016007154000 || Antiquia Lost || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100017007980000 || Hotel Transylvania 3: Monsters Overboard || EUR USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010001B005E5C000 || Double Dragon 4 || CHN EUR JPN KOR USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100023009C72000 || 30-in-1 Game Collection: Volume 1 || EUR || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100024008310000 || Street Fighter™ 30th Anniversary Collection || EUR USA || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010002800B818000 || Velocity®2X || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010002900294A000 || NBA Playgrounds || EUR USA || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010002D00632E000 || Yoku&#039;s Island Express || EUR JPN USA || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010002F001220000 || NAMCO MUSEUM || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010002F009A7A000 || Road To Ballhalla || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000320000CC000 || 1-2-Switch™ || CHN EUR JPN KOR USA || 1.0.0 || Digital / Cartridge || 0 65536 || Gamecard Front: LA-H-AACCA-{region} Back: AACCA22Y000 || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C11009378000 || 戦場のヴァルキュリア４ || CHN JPN KOR || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010003700B11A000 || Shining Resonance Refrain || CHN || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010003900350C000 || シノビリフレ -SENRAN KAGURA- || JPN || 3.0.1 || Digital || 0 65536 131072 196608 262144 327680 393216 458752 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010003C0099EE000 || PLANET ALPHA || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010003C00B868000 || Ninjin: Clash of Carrots || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010087000428E000 || Plantera Deluxe || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010003E0099AC000 || Happy Birthdays || CHN JPN KOR || 3.0.1 || Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100047009742000 || Twin Robots: Ultimate Edition || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000490067AE000 || Frederic 2: Evil Strikes Back || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010004A007890000 || MAX マジックマーカーと兄弟の絆 || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010004C00ACE0000 || Nihilumbra ニヒラブラ || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010005000B244000 || 籠庭のクックロビン || JPN || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100052004384000 || Axiom Verge || EUR JPN USA || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100055007B86000 || Late Shift || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100059009EFE000 || Little Dragons Café || EUR || 5.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010005A00A4F4000 || Air Hockey || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010005A00B312000 || Megaton Rainfall || EUR USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010005C00B482000 || Night Trap - 25th Anniversary Edition || EUR || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100618004096000 || Robonauts Demo || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010006200949E000 || The Charming Empire || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100063005C86000 || Phantom Breaker: Battle Grounds Overdrive || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010006300AFFE000 || Life Goes On || USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100066004D68000 || This Is the Police || EUR USA || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010006600AE9C000 || Red&#039;s Kingdom || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000690085BE000 || Little Triangle || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010006A0042F0000 || 88 Heroes - 98 Heroes Edition || EUR JPN USA || 1.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010007100A16A000 || Eternal Edge || USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010007200AC0E000 || Don&#039;t Die, Mr Robot! || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000750084B2000 || Shiftlings - Enhanced Edition || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000780068C8000 || ロストスター || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010007A00980C000 || Arcade Archives City CONNECTION || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005C40037C6000 || I and Me || EUR USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010007C00B508000 || SNK Heroines Tag Team Frenzy || EUR || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010007E00A1A4000 || Henry The Hamster Handler || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010007F00879E000 || プリパラ　オールアイドルパーフェクトステージ！ || JPN || 4.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010007F00B9F0000 || Johnny Turbo&#039;s Arcade: Shoot Out || USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010008100B228000 || GEKIDO || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010008400A268000 || Another Lost Phone: Laura&#039;s Story || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000850037C0000 || The Count Lucanor || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100085003A2A000 || Cartoon Network: Battle Crashers || EUR || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100086005EDC000 || NARUTO－ナルト－ 疾風伝　ナルティメットストームトリロジー for Nintendo Switch || JPN || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010008800B18A000 || Super Destronaut DX || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010008900705C000 || Dragon Quest® Builders™ || EUR USA || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010008F00B054000 || Arcade Archives Sky Skipper || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010009000AC2A000 || 純・電愛｢私の瞳を見て！｣ ～山内もえ～ || EUR JPN USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100091008272000 || Mini Metro || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001D0003B96000 || INVERSUS Deluxe || EUR JPN USA || 3.0.1 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100092006814000 || Tennis World Tour || USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100095009236000 || Super Rocket Shootout || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010009800203E000 || WWE 2K18 || EUR JPN USA || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010009900947A000 || Atelier Lydie &amp;amp; Suelle ~The Alchemists and the Mysterious Paintings~ || EUR USA || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010009E001D90000 || World of Goo || EUR USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010009F004E66000 || Transcripted || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000A0004C50000 || FLASHBACK™ || EUR USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000A10041EA000 || The Elder Scrolls V: Skyrim || EUR KOR USA || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000A400AF2A000 || 最悪なる災厄人間に捧ぐ || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000A800ADEE000 || KADOBAT WARS || JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000AA0093DC000 || Dream Alone || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000B2006E06000 || レゴ®インクレディブル・ファミリー || JPN || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000B6007A3C000 || The Deer God || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000C800AFD6000 || ACA NEOGEO SAMURAI SHODOWN V || EUR JPN USA || 4.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01000C9004FA2000 || ACA NEOGEO ROBO ARMY || EUR JPN USA || 3.0.1 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01000C900A136000 || Kitten Squad || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000CA004DCA000 || Human: Fall Flat || EUR USA || 3.0.1 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000CE002072000 || The LEGO® NINJAGO® Movie Videogame || EUR || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000CF0084BC000 || The Next Penelope || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000D10038E6000 || ACA NEOGEO LAST RESORT || EUR JPN USA || 1.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01000D1006CEC000 || ATOMIK: RunGunJumpGun || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000D1008714000 || ACA NEOGEO FATAL FURY 3 || EUR JPN USA || 4.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01000D200AC0C000 || Bud Spencer &amp;amp; Terence Hill - Slaps And Beans || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000D5005974000 || N++ (NPLUSPLUS) || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000D70049BE000 || Sword of the Guardian || USA || 5.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010021F004270000 || Spelunker Party! Demo Version || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000D9007C28000 || Cave Story+ || JPN || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000DB00980A000 || Arcade Archives Ikki || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000DC007E90000 || Sparkle Unleashed || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000E00089FA000 || 協撃　カルテットファイターズ || JPN || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000E10094D0000 || クリプト・オブ・ネクロダンサー体験版 || JPN || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000E100A470000 || 東方計劃 不可思議的幻想鄉 TOD -RELOADED- Asia All-in-One Edition || CHN || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000E2003FA0000 || MIGHTY GUNVOLT BURST Demo || EUR JPN USA || 1.0.0 || Digital || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000E30042F2000 || World to the West || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000E400222A000 || Johnny Turbo&#039;s Arcade: Super Burger Time || USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000E600B05C000 || 魔界戰記DISGAEA Refine || CHN || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000E8009E1C000 || Shift Quantum || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000EC007C22000 || TouchBattleTankSP || USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000F000AAF0000 || Kenshō || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000F1008C92000 || Sling Ming || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000F20083A8000 || Tactical Mind || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000F3008718000 || ACA NEOGEO POWER SPIKES II || EUR JPN USA || 3.0.1 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01000F400435A000 || Immortal Redneck || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000F5003068000 || ブレイブダンジョン＋魔神少女COMBAT || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000FA00A4E4000 || Garage || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000FB008900000 || Midnight Deluxe || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000FB00BAF6000 || ワールドサッカー　ピンボール || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010010A009830000 || Space Ribbon || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010010B003A26000 || Cartoon Network: Battle Crashers || USA || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010010B008A36000 || Arcade Archives Kid Niki Radical Ninja || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010010F004022000 || Touhou Kobuto V: Burst Battle || EUR USA || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100111004460000 || SONIC FORCES™ Digital Bonus Edition || EUR || 1.0.0 || Digital / Cartridge || 0 65536 || Gamecard Front: LA-H-ABQLB-{region} Back: ABQLB41A000 || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100112003B8A000 || Slime-san Demo || EUR USA || 1.0.0 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010011200505A000 || 翔べよ!!ドラゴン！ || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001180021FA000 || Shovel Knight: Specter of Torment || EUR USA || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100118009C68000 || Figment || EUR USA || 4.0.0 || Digital || 0 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Runner3 || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010011A00A9A8000 || Soccer Slammers || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010011B00910C000 || Kill The Bad Guy || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100125002060000 || バトルスポーツ めく〜る || JPN || 1.0.0 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100047009742000 || Twin Robots: Ultimate Edition || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001270012B6000 || SONIC FORCES™ || USA || 1.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100128003A24000 || Elliot Quest || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100128005B42000 || Lost Castle || EUR || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010012B0086C0000 || ロックマンX アニバーサリー コレクション || JPN || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010012C0060F0000 || RXN -Raijin- || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010013300AFEA000 || チャリオット 王様パック || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010014200BD02000 || アイスクリームサーファー || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010014E004FA8000 || ACA NEOGEO KARNOV&#039;S REVENGE || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 0100152000022000 || Mario Kart™ 8 Deluxe || CHN EUR JPN KOR USA || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 458752 || Gamecard Front: LA-H-AABPA-{region} Back: AABPA22A000 || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100153006300000 || 無双OROCHI２ Ultimate || JPN || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001530097F8000 || Arcade Archives PUNCH-OUT!! || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100157004512000 || Severed || EUR USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010015A00AF1E000 || Whispering Willows || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010015D003EE4000 || The Jackbox Party Pack 2 || EUR USA || 3.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010015E00A1F8000 || ゴルフストーリー || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010015F005C8E000 || Tricky Towers || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100160009BF0000 || 数学力王　中学３年 || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100161009A52000 || POOL || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010016100A186000 || スチームワールドハイスト || JPN || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010016300A95A000 || Hexologic || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010016900AD24000 || 進化のひみつ || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006BB009004000 || わくわくどうぶつランド　体験版 || CHN JPN KOR || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010016B005CF8000 || Siegecraft Commander || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010016C009374000 || Lode Runner Legacy Demo Version || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010016D00A964000 || SilverStarChess || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010016E004796000 || Bridge Constructor Portal || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100170008560000 || セクシー・ブルテイル || JPN || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100170008728000 || ACA NEOGEO THE KING OF FIGHTERS &#039;97 || EUR JPN USA || 5.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 010017500630C000 || 真・三國無双７ Empires || JPN || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010017600B09E000 || ステレデン　バイナリースターズ || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010017600B180000 || Polygod || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010017600B532000 || Piczle Lines DX 500 More Puzzles! || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010017600B580000 || わくわくスイーツ あまい おかしが できるかな？ || JPN || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100177005C8A000 || BUTCHER || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100178009648000 || Coffin Dodgers || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010017C00BE12000 || Gnomes Garden 3: The thief of castles || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100559004BB4000 || すみっコぐらし　すみっコパークへようこそ　体験版 || JPN || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010018C00954E000 || Darkest Dungeon || JPN || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010019000034A000 || カラオケJOYSOUND for Nintendo Switch || JPN || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100191006B98000 || ロロロロ　体験版 || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100192003FA4000 || Azure Striker GUNVOLT: STRIKER PACK || EUR JPN USA || 1.0.0 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100197008B52000 || GRIDD: Retroenhanced || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010019A0038FA000 || ACA NEOGEO FATAL FURY SPECIAL || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01001A4008192000 || Gem Smashers || EUR USA || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001A500AD6A000 || NORN9 LOFN for Nintendo Switch || JPN || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001AE005166000 || Worms W.M.D || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001AF008BDA000 || Zen Bound 2 || EUR JPN USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001B10068EC000 || Urban Trial Playground || EUR USA || 4.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001B300B9BE000 || Diablo III: Eternal Collection || EUR USA || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001B40086E2000 || The Bunker || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001B700220A000 || レゴ®ニンジャゴー ムービー ザ・ゲーム || JPN || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001BA00AE4E000 || Final Light, The Prison || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001BB00AC26000 || STARSHIP AVENGER Operation: Take Back Earth || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001BD00915A000 || ACA NEOGEO WORLD HEROES 2 || EUR JPN USA || 3.0.1 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01001BF00B54E000 || Spider Solitaire F || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001C000ACD0000 || 테니스 월드 투어(Tennis World Tour) || KOR || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001C1009892000 || すばらしきこのせかい -Final Remix- || JPN || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001C40079BC000 || マーセナリーズサーガ クロニクルズ || JPN || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001C9007614000 || Max: The Curse of Brotherhood (Demo) || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001CC00416C000 || Rogue Trooper Redux || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001D0003B96000 || INVERSUS Deluxe || EUR JPN USA || 3.0.1 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001D900AF6A000 || Super Toy Cars || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001DE005012000 || Quest of Dungeons || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001DE0076A4000 || Shu || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001E300B038000 || World Soccer Pinball || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001E40041BE000 || Scribblenauts: Showdown || EUR USA || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001E500401C000 || Koi DX || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001E5006C6E000 || Super Mario Odyssey™ Demo for KIOSK || USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001E60085E6000 || Broken Sword 5 - the Serpent&#039;s Curse || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001E9003502000 || Nintendo Labo Toy-Con 03: Drive Kit(ドライブ キット) || JPN || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001ED0075EE000 || 死印 || JPN || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001EE00A6B0000 || Zotrix: Solar Division || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001F600829A000 || Romancing SaGa 2 || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001FA0034E2000 || Dark Witch Music Episode: Rudymical Demo || EUR JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001FA009A1E000 || Mecha Storm || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001FD0040F4000 || Brawlout || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001FF00B544000 || NBA 2K19 || EUR JPN USA || 5.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010020300C218000 || Suicide Guy || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010020400B0A8000 || マリオテニス エース 発売前先行オンライン大会 || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100207007EB2000 || Smoke And Sacrifice || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010020700B432000 || D/Generation : The Original || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100211005E94000 || Mulaka || EUR USA || 3.0.1 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003590089EA000 || Puzzle Puppers || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010021800B6C0000 || Cycle 28 || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100219008678000 || The Warlock of Firetop Mountain: Goblin Scourge Edition! || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010021A00ABEE000 || SKYPEACE || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010053D0001BE000 || ぷよぷよ™テトリス®Ｓ 体験版 || CHN JPN || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010021C000B6A000 || The Binding of Isaac: Afterbirth+ || USA || 1.0.0 || Digital / Cartridge || 0 131072 || Gamecard Front: LA-H-BAAZA-USA Back: BAAZA20Y000 || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010021D00812A000 || Arcade Archives VS. SUPER MARIO BROS. || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010021D00ACA2000 || Never Stop || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010021F004270000 || Spelunker Party! Demo Version || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010021F00AD76000 || My Farm || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100224004004000 || Slain: Back From Hell || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100225000FEE000 || ブラスターマスター ゼロ 体験版 || EUR JPN USA || 1.0.0 || Digital || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002290070E4000 || Red Game Without a Great Name || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010022A009368000 || Voxel Shot for Nintendo Switch（ボクセルショット） || JPN || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010022B00AD18000 || シークレットゲーム KILLER QUEEN for Nintendo Switch || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010022F005F14000 || NARUTO－ナルト－ 疾風伝　ナルティメットストーム３ || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100230005A52000 || Lovers in a Dangerous Spacetime || EUR JPN USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002310064B4000 || OF MICE AND SAND -REVISED- || CHN EUR JPN KOR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010023100B19A000 || Super Dungeon Tactics || EUR USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010023100B96E000 || Persian Nights: Sands of Wonders || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AFE00452E000 || Tumblestone || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010023500B0BA000 || Nefarious || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010023900AEE0000 || Paladins - Founder&#039;s Pack || EUR JPN USA || 5.0.0 || Digital || 0 65536 131072 196608 262144 327680 393216 458752 524288 589824 655360 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010023E008702000 || Spiral Splatter || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010023F008204000 || Haunted Dungeons：Hyakki Castle || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010024700901A000 || Gal*Gun 2 || EUR USA || 4.0.0 || Digital / Cartridge || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010024A009428000 || Mad Carnage || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010024C001224000 || PAC-MAN™ Championship Edition 2 PLUS || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010024C0067C4000 || 2064: Read Only Memories INTEGRAL || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010024D0032F2000 || PHOTON³（フォトン・キューブ） || EUR JPN USA || 1.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010024F008742000 || Chameleon Run Deluxe Edition || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100ABC00AAD0000 || 机でサッカー || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010025400AECE000 || Fortnite || EUR JPN USA || 5.0.0 || Digital || 0 65536 131072 196608 262144 327680 393216 458752 524288 589824 655360 720896 786432 851968 917504 983040 1048576 1114112 1179648 1245184 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Wonder Boy: The Dragon&#039;s Trap || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002580038DE000 || ACA NEOGEO GALAXY FIGHT: UNIVERSAL WARRIORS || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 010025A0043EA000 || デッドハウス 再生 || JPN || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010025A00AACE000 || ホットギミック コスプレ雀 for Nintendo Switch || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100225000FEE000 || ブラスターマスター ゼロ 体験版 || EUR JPN USA || 1.0.0 || Digital || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010025E0092B6000 || Pirate Pop Plus || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100262009626000 || Epic Loon || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010026D00AABE000 || Moorhuhn Remake || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010027100372C000 || バルブ・ボーイ || JPN || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100271004570000 || Next Up Hero || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100273008FBC000 || Mercenaries Saga Chronicles || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100274004052000 || PAYDAY 2 || EUR USA || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100276009872000 || OKAMI HD || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010027F00AD6C000 || SNK HEROINES Tag Team Frenzy || USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002820036A8000 || Sine Mora EX || EUR USA || 1.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100284007D6C000 || Super One More Jump || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010028C003FD6000 || Syberia 2 || EUR USA || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010028D0045CE000 || Sparkle 2 || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010028D004612000 || ボクと僕の世界で || JPN || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010028D005A3C000 || The Elder Scrolls V: Skyrim® || JPN || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010028F00ABAE000 || My Riding Stables – Life with Horses || EUR || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010029200AB1C000 || Prison Architect: Nintendo Switch™ Edition || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010029200B6AA000 || The Walking Dead: The Complete First Season || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || The Coma: Recut (Retail Only) || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002970080AA000 || Tennis in the Face || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010029A00AEB0000 || Survive! MR.CUBE || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010029D006ED8000 || Arcade Archives Traverse USA || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002A0009E18000 || Jolt Family Robot Racer || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002A1004B34000 || ロマンシング サガ2 || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002A1004C48000 || Binaries || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002A2004530000 || The Bridge || EUR JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002A6006AA4000 || Riptide GP: Renegade || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002AA004DB4000 || ACA NEOGEO BURNING FIGHT || EUR JPN USA || 3.0.1 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01002AB007FD2000 || ゼルダ無双 ハイラルオールスターズ DX || CHN JPN KOR || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002AF009470000 || シャンティ：ハーフ・ジーニー ヒーロー アルティメット・エディション || JPN || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A6200851E000 || 超回転 寿司ストライカー The Way of Sushido 体験版 || CHN JPN || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002B2004F76000 || GUNBARICH for Nintendo Switch™ || EUR JPN USA || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002B30028F6000 || Celeste || EUR JPN USA || 4.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002B3008500000 || キューブクリエイターX || CHN JPN KOR || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002B400873C000 || Samurai Defender: Ninja Warfare || EUR JPN USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002B6001364000 || レゴ®シティ アンダーカバー || JPN || 1.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002BB00A662000 || ニル・アドミラリの天秤 色ドリ撫子 || JPN || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002BD00983E000 || Burly Men at Sea || EUR JPN USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002C4009990000 || OPUS: Rocket of Whispers || EUR JPN USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009BF0072D4000 || 進め！キノピオ隊長　体験版 || CHN EUR JPN KOR USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008DC004CBA000 || 王だぁランド！ 体験版 || JPN || 3.0.1 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002C80086E6000 || Subsurface Circular || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002C900A302000 || ACA NEOGEO RIDING HERO || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01002CB006AFA000 || Dungeon Rushers || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002CC0062B8000 || DEEMO || CHN EUR JPN KOR USA || 3.0.1 || Digital || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100833008A9E000 || 不如帰 大乱 || JPN || 4.0.0 || Digital || 0 65536 131072 196608 262144 327680 393216 458752 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007C000845C000 || キッドトリップ RUN! || JPN || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002D0005F10000 || NARUTO－ナルト－　ナルティメットストーム || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002D4007AE0000 || Mega Man Legacy Collection || CHN EUR JPN USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002D400B0F6000 || 探偵 神宮寺三郎 プリズム・オブ・アイズ || JPN || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002D700B906000 || ロロナのアトリエ ～アーランドの錬金術士～ DX || JPN || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002DB007A96000 || Legend of Kay Anniversary || EUR USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002DD004972000 || Sumer || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002DD004FAC000 || ACA NEOGEO WORLD HEROES || EUR JPN USA || 3.0.1 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01002DD00AF9E000 || The Fall || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002E70032E8000 || アケアカNEOGEO ビッグトーナメントゴルフ || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002EB007D3A000 || Star Ghost || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Poi: Explorer Edition (retail only) || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002F300AC18000 || bloxiq || USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002F5007DA2000 || 金沢将棋 ～レベル300～ || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002FA00AF9A000 || ブロック ビルダー SP || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002FC00412C000 || Little Nightmares Complete Edition || EUR JPN USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010095600AA36000 || Fill-a-Pix: Phil&#039;s Epic Adventure Demo || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003000097FE000 || Arcade Archives MOON PATROL || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100307004B4C000 || Flinthook || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010030800841A000 || Moorhuhn Knights &amp;amp; Castles || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010030A006F6E000 || Light Fall || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010030D004F34000 || Draw a Stickman: EPIC 2 || USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B3F000BE2000 || Pokkén Tournament™ DX Demo || CHN EUR JPN USA || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010030F008730000 || ACA NEOGEO REAL BOUT FATAL FURY || EUR JPN USA || 4.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 010031200981C000 || Grid Mania || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010031A00BC9E000 || EXTREME POKER || EUR JPN USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010031B00A4E8000 || West of Loathing || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010031D00A604000 || Songbringer || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010031E00846A000 || タンブルストーン・デモ || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010031F002B66000 || Mr. Shifty || EUR USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010031F006E76000 || Pato Box || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100322004844000 || Embers of Mirrim Demo || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100331005E8E000 || Super Putty Squad || EUR USA || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010033100691A000 || The Coma: Recut || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010033300AC1A000 || The Mooseman || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010033500944A000 || 不思議の幻想郷TOD -RELOADED- || JPN || 4.0.0 || Digital || 0 65536 131072 196608 262144 327680 393216 458752 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010033600A008000 || ノーヒーローズ・ヒア || JPN || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010033700418A000 || Wulverblade || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010033C009E46000 || Superola and the Lost Burgers || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010033F00B3FA000 || Anima: Gate of Memories - Arcane Edition || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100340009736000 || Jotun: Valhalla Edition || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010034500641A000 || Attack on Titan 2 || USA || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 458752 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010034800AF8A000 || 光明之響　龍奏回音 || KOR || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010034C007610000 || Ostwind - Das Spiel || EUR || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010034E005C9C000 || Code of Princess EX || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010034E00A114000 || de Blob 2 || EUR USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010034F00BFC8000 || Debris Infinity || USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100352006A10000 || Heroes of the Monkey Tavern Demo || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100355002CBE000 || Johnny Turbo&#039;s Arcade Joe and Mac Caveman Ninja || USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100356009860000 || Dragon Sinker || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003590089EA000 || Puzzle Puppers || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010035A0044E8000 || JYDGE || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010035B00412A000 || ヒューマン・リソース・マシーン || JPN || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010035B00B3F0000 || Super Volley Blast || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010035C00A4BC000 || The Adventures of Elena Temple || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100361007268000 || MotoGP™18 || EUR USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003620068EA000 || Hand of Fate 2 || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003640090EE000 || ロックマン クラシックス コレクション 2 || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003670066DE000 || 36 Fragments of Midnight || EUR USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100369001DDC000 || Arcade Archives Ninja-Kid || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010036B0034E4000 || スーパー マリオパーティ || EUR JPN USA || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010037200B346000 || 빅터 브란 오버킬 에디션 (Victor Vran Overkill Edition) || KOR || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010037600B61C000 || Little Dragons Café || CHN KOR || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100378002CCA000 || Johnny Turbo’s Arcade: Express Raider || USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100379003900000 || ACA NEOGEO BLUE&#039;S JOURNEY || EUR JPN USA || 3.0.1 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01005AA00372A000 || UNO Demo || EUR JPN USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010037F00BB78000 || Cosmic Star Heroine || EUR || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100382004206000 || Let&#039;s Sing 2018 || EUR || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010038200A98E000 || In Between || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100384009344000 || Super Toy Cars || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010038500BCD6000 || Grandpa and the Zombies || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010038600B27E000 || Bastion || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003870040FA000 || Splatoon™ 2: Splatfest World Premiere || EUR USA || 3.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100387009412000 || 超獣ギガ大戦 || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100388008758000 || Banner Saga 2 || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003890084F8000 || Unbox: Newbie&#039;s Adventure || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010038A007AA4000 || FruitfFall Crush || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010038B0084EA000 || #Breakforcist Battle || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010038B00B9AE000 || Mummy Pinball || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010038F00AFA0000 || ACA NEOGEO Money Puzzle Exchanger || EUR JPN USA || 4.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 010039000B68E000 || MY HERO ONE&#039;S JUSTICE || EUR || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DE40068CA000 || Squareboy vs Bullies: Arena Edition || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010039300BDB2000 || Defunct || EUR USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010039A008E76000 || ChromaGun || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010039A00BC64000 || Wasteland 2: Director&#039;s Cut || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010039B0060E0000 || 謎解きメール || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010039C001296000 || Infinite Minigolf || EUR JPN USA || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010039C00A45C000 || Operation Hardcore || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010039E00A15E000 || InkSplosion || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003A30012C0000 || LEGO® CITY Undercover || USA || 1.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003A300B5F8000 || Voxel Shot for Nintendo Switch || USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003A5001DBA000 || アケアカNEOGEO オーバートップ || EUR JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003A700A98A000 || Saturday Morning RPG || EUR || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003A800B102000 || One Strike || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003AA00A8E2000 || テニス ワールドツアー || JPN || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003AC00BCAA000 || SIX SIDES OF THE WORLD ENHANCED || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BD3006A02000 || One More Dungeon || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003AF006A6C000 || 剣と魔法と学園モノ。Anniversary Edition || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005880063AA000 || Violett || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003B200B372000 || Hyper Light Drifter - Special Edition || EUR JPN USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003B300B568000 || Battle Supremacy || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003B400A00A000 || The Adventures of Bertram Fiddle: Episode 1: A Dreadly Business || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003B700B036000 || グレコからの挑戦状！計算の城とオバケたち　ひき算 || JPN || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003B9007E86000 || Hammerwatch || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003BA00A67E000 || Hacky Zack || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003BC0000A0000 || Splatoon™ 2 || CHN EUR USA || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 458752 524288 589824 655360 720896 786432 851968 917504 983040 1048576 1114112 1179648 1245184 1310720 1376256 1441792 1507328 1572864 1638400 1703936 || Gamecard: 2.3.0 Gamecard Front: LA-H-AAB6B-USA || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003C100445C000 || Castle of Heart || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Azure Striker GUNVOLT: STRIKER PACK (retail only) || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003C200A232000 || Animated Jigsaws: Beautiful Japanese Scenery || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003C300AAAE000 || Another World || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003C400871E000 || ACA NEOGEO 2020 SUPER BASEBALL || EUR JPN USA || 3.0.1 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01003C6008940000 || GUNBIRD for Nintendo Switch || EUR JPN USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003C700009C000 || スプラトゥーン2 || CHN JPN || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 458752 524288 589824 655360 720896 786432 851968 917504 983040 1048576 1114112 1179648 1245184 1310720 1376256 1441792 1507328 1572864 1638400 1703936 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003CD00BE22000 || Chiki-Chiki Boxy Racers || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003D00099EC000 || Raging Justice || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003D3009996000 || Totes the Goat || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003D60012BE000 || 信長の野望・創造 with パワーアップキット || JPN || 1.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003DC00793A000 || L.A.ノワール || JPN || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003DE00918E000 || The Darkside Detective || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003E5002320000 || The Fall Part 2: Unbound || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003ED0099B0000 || Danger Mouse: The Danger Games || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003F000973E000 || Metropolis: Lux Obscura || EUR USA || 4.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003F100B908000 || トトリのアトリエ ～アーランドの錬金術士２～ DX || JPN || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003FC006FF4000 || ザ フレイム イン ザ フラッド：Complete Edition || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003FE00A2F6000 || ACA NEOGEO BASEBALL STARS PROFESSIONAL || EUR JPN USA || 4.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01003FF009E60000 || Grab the Bottle || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100401003A0C000 || Dimension Drive || EUR JPN USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010040200A798000 || Scalextric || EUR || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100404002F52000 || 銀星将棋 強天怒闘風雷神 || JPN || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004040033CE000 || niconico || JPN || 1.0.0 || Digital || 0 65536 131072 196608 262144 327680 393216 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004070022F0000 || Ittle Dew 2+ || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100408007078000 || Tales of the Tiny Planet || EUR USA || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010040A0065D2000 || 体験版デス！がるメタる！ || JPN || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010040B003E5E000 || Shephy || CHN EUR JPN KOR USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010082600A234000 || アーバントライアル プレイグラウンド 体験版 || JPN || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010040D00B7CE000 || The Swindle || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010040E00B636000 || Doughlings: Arcade || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010040F00AA9A000 || Speed Brawl || USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010041100B5AA000 || リトルドラゴンズカフェ -ひみつの竜とふしぎな島- || JPN || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004120081AC000 || スチームワールドディグ２ || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Wonder Boy: The Dragon&#039;s Trap || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100416004C00000 || DOOM || EUR USA || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100417007F78000 || Danmaku Unlimited 3 || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010041C00A68C000 || The Spectrum Retreat || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100421003FD4000 || Syberia || EUR USA || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004210041AE000 || レイジングループ || JPN || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100422001DDA000 || Arcade Archives TERRA CRESTA || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100423009358000 || Death Road to Canada || EUR USA || 4.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100425009FB2000 || Baobabs Mausoleum Ep.1: Ovnifagos Don&#039;t Eat Flamingos || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010042800A516000 || Asdivine Hearts || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100429006A06000 || I, Zombie || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010042900A8CC000 || Robonauts ロボノーツ || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010042C006490000 || Bleed || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010042D00461A000 || レイマン レジェンド for Nintendo Switch || JPN || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010042E00AC80000 || 妖かし恋戯曲 || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100434003C58000 || Firefighters – The Simulation || EUR USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010043500A17A000 || Fallout Shelter || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004360045C8000 || Lichtspeer: Double Speer Edition || EUR USA || 1.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100437004170000 || Portal Knights Demo || EUR USA || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010043800AD94000 || Neverout || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010043D004CF6000 || Just Dance® 2018 Demo || USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010043E009A2E000 || Draw a Stickman: EPIC 2 || EUR || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010043F004126000 || リトルインフェルノ || JPN || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004D8007368000 || Vostok Inc. || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010044300A65E000 || Defoliation || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010044D00A770000 || Burnstar || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010045000BF6A000 || Mitsurugi Kamui Hikae || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010045200AB24000 || 욘더: 클라우드 캐쳐 크로니클 (Yonder: The Cloud Catcher Chronicles) || KOR || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010045300516E000 || Snow Moto Racing Freedom || EUR USA || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E24006FA8000 || Stikbold! A Dodgeball Adventure DELUXE || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010045500B212000 || Calculation Castle : Greco&#039;s Ghostly Challenge &amp;quot;Division&amp;quot; || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004560063CA000 || ママにゲーム隠された || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001DE005012000 || Quest of Dungeons || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100459000302000 || ドラゴンクエストⅩ　ベータテスト版 || JPN || 1.0.0 || Digital || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Yonder: The Cloud Catcher Chronicles (retail only) || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000E2003FA0000 || MIGHTY GUNVOLT BURST Demo || EUR JPN USA || 1.0.0 || Digital || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100461007BB0000 || Black Hole || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100464009294000 || Kona || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100465008756000 || The Banner Saga || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100465009020000 || Qbik || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010046600B76A000 || Lost Phones Stories || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010046600B76A000 || Lost Phones Stories || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100476004A9E000 || Puzzle Box Maker || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004770079BA000 || Bit Dungeon+ || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100479008552000 || Monster Energy Supercross - The Official Videogame (モンスターエナジースーパークロス　オフィシャルビデオゲーム) || JPN || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001FA0034E2000 || Dark Witch Music Episode: Rudymical Demo || EUR JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010047F001DBC000 || アケアカNEOGEO サムライスピリッツ 天草降臨 || EUR JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100482009636000 || Tower of Babel || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010048300854E000 || MotoGP 18 || JPN || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004840086FE000 || NORTH || EUR USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004860080A0000 || Baseball Riot || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Skylanders Imaginators || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100496004194000 || The Mummy Demastered || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010049C0075F0000 || OPUS: The Day We Found Earth || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010049E003748000 || Putty Pals || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010049E008EA8000 || ナナミと一緒に学ぼ！ TOEIC(R) LISTENING AND READING TEST 完全マスター || JPN || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004A200BB48000 || Arcade Archives OMEGA FIGHTER || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004A700A168000 || Wolfenstein® II: The New Colossus™ - Deutschsprachige Version || EUR || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010031E00846A000 || タンブルストーン・デモ || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004A9006B84000 || The End Is Nigh || EUR USA || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004AC002B40000 || ACA NEOGEO ART OF FIGHTING 3 || EUR JPN USA || 3.0.1 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01004AC0081DC000 || Sleep Tight || USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E4D00A690000 || PixelJunk® Monsters 2 Demo || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004B1001D22000 || TumbleSeed || EUR JPN USA || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F3D001DEE000 || Puyo Puyo™ Tetris® Demo || EUR || 1.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004B100AF18000 || Disgaea 1 Complete || USA || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004B3004062000 || グーの惑星 || JPN || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004B4002B6A000 || Runner3 || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004B500AB88000 || Calculation Castle : Greco&#039;s Ghostly Challenge &amp;quot;Addition&amp;quot; || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004B600A2FC000 || ACA NEOGEO STAKES WINNER || EUR JPN USA || 4.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01004B7009F00000 || Miles &amp;amp; Kilo || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004B800AF5A000 || Bloodstained: Curse of the Moon || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004BC00B5A0000 || 說謊公主與盲眼王子 || CHN || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004BE004A86000 || Mutant Mudds Collection || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100461007BB0000 || Black Hole || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004C100A04C000 || This Is the Police 2 || EUR || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004C200100E000 || 新大開拓時代 ～街をつくろう～ || CHN EUR JPN KOR USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004C200ADA0000 || Trax - Build it Race it || USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004C200B0B4000 || Alwa&#039;s Awakening || USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004C500AAF6000 || The Mystery of the Hudson Case || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004C500B698000 || Time Carnage || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004C500B8E0000 || Monkey King: Master of the Clouds || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004C70086EC000 || BAFL - Brakes Are For Losers || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004C700B106000 || Air Mail || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004C800A79C000 || Splat the Fruit || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004CC00B352000 || すみっコぐらし　あつまれ！すみっコタウン || JPN || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004CF00A60E000 || Super Saurio Fly || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004D10020F2000 || Graceful Explosion Machine || EUR JPN USA || 1.0.0 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004D1007926000 || 10秒走RETURNS 体験版 || EUR JPN USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004D8007368000 || Vostok Inc. || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004D800AAAC000 || Yuso || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004DB003E6A000 || IRONCAST || EUR USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004DB00935A000 || Alteric || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004DE001DC8000 || アケアカNEOGEO ショックトルーパーズ セカンドスカッド || EUR JPN USA || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004DF007564000 || Tanzia || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004E3007E38000 || ロジック麻雀 創龍 四人打ち・三人打ち || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010078800825E000 || Wanderjahr TryAgainOrWalkAway || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004E400A48C000 || Slam Land || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004E500A15C000 || TETRA&#039;s Escape || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004E90028A2000 || 空飛ぶブンブンバーン || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004E900B082000 || Touhou Genso Wanderer Reloaded || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004EC00A2D8000 || ドタバタ調理アクション IT系ラーメン どらす || JPN || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004ED00B192000 || Goosebumps The Game || EUR || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004F10066B0000 || Party Planet || USA || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004F100BB36000 || 世界の覇者Ｘ || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004F4003FDC000 || Yesterday Origins || EUR USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004F400B978000 || Robbotto || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E5F0000C0000 || 魔界戦記ディスガイア5 体験版 || JPN || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004F8006A78000 || Super Meat Boy || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01004FD00382A000 || Moon Hunters || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100501006494000 || Slayaway Camp: Butcher&#039;s Cut || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100502007F54000 || Black The Fall || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010050300AC28000 || 真・電愛｢みんなあげる！」 ～さくらえま～ || EUR JPN USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010077B0038B2000 || LOST SPHEAR Demo || EUR JPN USA || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100509005AF2000 || The Legend of Zelda™: Breath of the Wild Demo for KIOSK || USA || 3.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100510004D2C000 || Disc Jam || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100512005AD2000 || リディー＆スールのアトリエ ～不思議な絵画の錬金術士～ || JPN || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100513005AF4000 || Rock&#039;N Racing Off Road DX || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005140089F6000 || Nuclien || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010051C003A08000 || Aperion Cyberstorm || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010051F00AC5E000 || SEGA AGES ソニック・ザ・ヘッジホッグ || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100522007AAA000 || Wizard of Legend || EUR JPN USA || 4.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005250086C4000 || Mega Man X Legacy Collection 2 || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010052900B8EE000 || Gakuen Club || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010052A00942A000 || Gekido Kintaro&#039;s Revenge || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010052A00A306000 || ACA NEOGEO NINJA COMBAT || EUR JPN USA || 4.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 010052A00B5D2000 || LEGO® Harry Potter™ Collection || USA || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010052B003A38000 || The Long Reach || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010052B00871C000 || ACA NEOGEO SAMURAI SHODOWN II || EUR JPN USA || 3.0.1 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 010052C00B184000 || The Journey Down: Chapter One || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010053200B0E0000 || Behind The Screen || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100534009FF2000 || Yonder: The Cloud Catcher Chronicles || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010053700A25A000 || Ice Cream Surfer || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010053A00932E000 || ニューロボイダー || JPN || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010053D0001BE000 || ぷよぷよ™テトリス®Ｓ 体験版 || CHN JPN || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010053E002EA2000 || Fate/EXTELLA: The Umbral Star || EUR JPN USA || 1.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100551001D88000 || Battle Chasers: Nightwar || EUR USA || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100553006F36000 || ワンピース 海賊無双３ デラックスエディション || JPN || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100553009874000 || シャイニング・レゾナンス リフレイン || JPN || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100559004BB4000 || すみっコぐらし　すみっコパークへようこそ　体験版 || JPN || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010055A00A300000 || ACA NEOGEO SUPER SIDEKICKS 2 || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| || SteamWorld Dig 2 (retail only) || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010056200B46A000 || ガンズゴア＆カノーリ２ || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100563005B70000 || Perception || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005640080B0000 || Crimsonland || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100566009238000 || DragoDino || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010056800B534000 || Super Inefficient Golf || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010056B0081A6000 || テスラグラッド || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005700031AE000 || Disgaea 5 Complete || EUR USA || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 || Gamecard Front: LA-H-AACAC-{region} Back: AACAC41A000 || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010057300B0DC000 || Heroki || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100574002AF4000 || One Piece: Unlimited World Red - Deluxe Edition || EUR JPN USA || 1.0.0 || Digital / Cartridge || 0 || Gamecard Front: LA-H-ACL9A-{region} Back: ACL9A13A000 || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100574009F9E000 || 嘘つき姫と盲目王子 || JPN || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010057B00712C000 || Vesta || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010057D0021E8000 || Shovel Knight: Treasure Trove || EUR JPN USA || 1.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Octopath Traveler™ || || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010057D00B612000 || Into the Breach || EUR USA || 5.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010057F007AA2000 || Rally Racers || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100583001DCA000 || アケアカNEOGEO ザ・キング・オブ・ファイターズ &#039;99 || EUR JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010058500B3E0000 || Labyrinth of Refrain: Coven of Dusk || EUR USA || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005880063AA000 || Violett || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010058C00A916000 || Drone Fight || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100590009C38000 || SOL DIVIDE -SWORD OF DARKNESS- for Nintendo Switch || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100592005164000 || UNBOX: Newbie&#039;s Adventure || EUR USA || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005950022EC000 || Blade Strangers || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010059C002AC2000 || Minecraft: Story Mode - The Complete Adventure || EUR USA || 1.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005A600BE60000 || Fall of Light: Darkest Edition || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007E3006DDA000 || Kirby™ Star Allies || CHN EUR JPN KOR USA || 4.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005A700A166000 || Out of The Box || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005AA00372A000 || UNO Demo || EUR JPN USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005AC0068F6000 || Fear Effect Sedna || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002EB007D3A000 || Star Ghost || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005AF004DBC000 || ACA NEOGEO ZED BLADE || EUR JPN USA || 3.0.1 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01005B1006988000 || Frederic: Resurrection of Music || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005B200725C000 || ギア・クラブ アンリミテッド || JPN || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009C100390E000 || League of Evil || EUR USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005B5009364000 || Xeodrifter || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005B6008132000 || Lifeless Planet: Premiere Edition || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005B9002312000 || The Binding of Isaac: Afterbirth+ || EUR || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005BC00922A000 || Earthlock || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100737003190000 || IMPLOSION 体験版 || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005C40037C6000 || I and Me || EUR USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005C60086BE000 || Mega Man X Legacy Collection || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005C600AC68000 || Valkyria Chronicles 4 Demo || EUR USA || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005C700990A000 || 返校 -Detention- || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005C8005F34000 || Teslagrad || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005C9002B42000 || アケアカNEOGEO サムライスピリッツ || EUR JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005CA0099AA000 || 1917 - The Alien Invasion DX || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005CB009E20000 || Glaive: Brick Breaker || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005CC007616000 || R.B.I. Baseball 18 || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005CD00A2A2000 || Suicide Guy || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005D100807A000 || Pokémon™ Quest || CHN EUR JPN KOR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005D200B530000 || Capcom Beat &#039;Em Up Bundle || EUR || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005D700A2F8000 || ACA NEOGEO GHOST PILOTS || EUR JPN USA || 4.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01005DA003E6E000 || Morphies Law || EUR JPN USA || 5.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005E200A3AC000 || Sparkle 3 Genesis || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005E5009EF2000 || Guts &amp;amp; Glory || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005E600AB64000 || Disease -Hidden Object- || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005EC0039E4000 || Poi: Explorer Edition || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005ED00AD0C000 || SNKヒロインズ Tag Team Frenzy || JPN || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005EE0036EC000 || Rocket League® || EUR JPN USA || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 458752 524288 589824 655360 720896 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005F3006AFE000 || THE 麻雀 || JPN || 4.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005F4009112000 || Nightmare Boy || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005F900416E000 || Pic-a-Pix Deluxe Demo || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005F900902A000 || Crush Your Enemies! || EUR USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005FF002E2A000 || RAYMAN® LEGENDS: DEFINITIVE EDITION DEMO || CHN EUR KOR USA || 1.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Brawlout (retail only) || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010060300A67C000 || INK || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100605008268000 || Titan Quest || EUR USA || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100607004C34000 || チキチキBOXYRACERS（チキチキボクシーレーサーズ） || JPN || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010060A00B53C000 || Broforce || EUR JPN USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010060C00B0AA000 || Mario Tennis™ Aces Pre-launch Online Tournament || USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010060E009062000 || GUILT BATTLE ARENA || EUR JPN USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010060F00AA70000 || The Walking Dead: The Final Season - Season Pass || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010061400A990000 || Shikhondo: Soul Eater || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010061500B67C000 || かいぞくポップ || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100616009082000 || STAY || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100618004096000 || Robonauts Demo || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010061A00AE64000 || Tiny Hands Adventure || EUR USA || 5.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100628004BCE000 || Nights of Azure 2: Bride of the New Moon || EUR USA || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Stern Pinball Arcade || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010062A008FE8000 || ROCK&#039;N RACING OFF ROAD DX || JPN || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010062B00A874000 || Big Buck Hunter Arcade || USA || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100633007D48000 || Hollow Knight || EUR JPN USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010063400B2EC000 || Paranautical Activity || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100635006C32000 || Pankapu || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100643002136000 || Resident Evil Revelations || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100112003B8A000 || Slime-san Demo || EUR USA || 1.0.0 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008E6006502000 || Aegis Defenders || EUR JPN USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100646009FBE000 || Dead Cells || EUR JPN USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100647003750000 || ドラゴンクエストⅩ　オールインワンパッケージ || JPN || 3.0.1 || Digital || 0 65536 131072 196608 262144 327680 393216 458752 524288 589824 655360 720896 786432 851968 917504 983040 1048576 1114112 1179648 1245184 1310720 1376256 1441792 1507328 1572864 1638400 1703936 1769472 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010065A00213C000 || そるだむ 開花宣言 || JPN || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010065B009B3A000 || Animal Rivals: Nintendo Switch Edition || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010065E003FD8000 || Gear.Club Unlimited || EUR USA || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010065F004E5E000 || Super Chariot || EUR USA || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010065B009B3A000 || Animal Rivals: Nintendo Switch Edition || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100662008632000 || Spy Chameleon || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010066600877E000 || ACA NEOGEO ART OF FIGHTING 2 || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 0100AED003A60000 || プランテラ ガーデンライフ DXエディション 体験版 || JPN || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E67008D84000 || Ultra Space Battle Brawl || EUR JPN USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010067300059A000 || Mario + Rabbids® Kingdom Battle || CHN EUR USA || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 458752 524288 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010067C00A776000 || Cosmic Star Heroine || USA || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010067D00AC46000 || Quad Fighter K || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010068B008D22000 || おきらく大富豪SP || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010068B0094A0000 || Otto || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010068D00AE68000 || GREEN || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010068F00AA78000 || FINAL FANTASY XV POCKET EDITION HD || EUR JPN USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100692003FCE000 || Hyper Sentinel || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100694006AC0000 || ONE MORE DUNGEON || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010083600AE9E000 || Happy Birthdays Demo || EUR USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100699008792000 || ACA NEOGEO THE LAST BLADE 2 || EUR JPN USA || 4.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 010069B002CDE000 || Gate Of Doom || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010069C00401A000 || RIVE: Ultimate Edition || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010069F008A38000 || Arcade Archives STAR FORCE || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006A0003892000 || デ・マンボ || JPN || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006A200936C000 || Shantae: Half- Genie Hero Ultimate Edition || EUR USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006A5003698000 || メゾン・ド・魔王 || JPN || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006A500420E000 || Let&#039;s Sing 2018 mit deutschen Hits || EUR || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006A600623E000 || Yōdanji || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006A800016E000 || Super Smash Bros. Ultimate || EUR JPN USA ||  || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006A80038FC000 || ACA NEOGEO ART OF FIGHTING || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01006AA006BE4000 || Tallowmere || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006AA0084FE000 || Damascus Gear Operation Tokyo || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006B700AB3E000 || Buddy Collection if －宿命の赤い糸－ || JPN || 5.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006BB00800A000 || NARUTO SHIPPUDEN: Ultimate Ninja STORM 3 Full Burst HD || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006BB009004000 || わくわくどうぶつランド　体験版 || CHN JPN KOR || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F8D0091F0000 || 迷宮の塔　トレジャーダンジョン　体験版 || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006BC00B188000 || The Journey Down: Chapter Three || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006BD001E06000 || Minecraft: Nintendo Switch Edition || EUR JPN USA || 1.0.0 || Digital || 0 65536 131072 196608 262144 327680 393216 458752 524288 589824 655360 720896 786432 851968 917504 983040 1048576 1114112 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006BE00B3C8000 || My Brother Rabbit || USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006C3004FAE000 || ACA NEOGEO WORLD HEROES 2 JET || EUR JPN USA || 4.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01006C40086EA000 || AeternoBlade || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006C400ACEE000 || Them Bombs! || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006D4003BCE000 || Guns, Gore and Cannoli 2 || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006DA00707C000 || 3D MiniGolf || EUR USA || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006DB004566000 || Caveman Warriors || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006DE00A686000 || 大図書館の羊飼い -Library Party- || JPN || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006E1004404000 || Ben 10 || EUR USA || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005F900416E000 || Pic-a-Pix Deluxe Demo || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006E4003832000 || Johnny Turbo&#039;s Arcade: Bad Dudes || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006E50042EA000 || EARTHLOCK || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100837006AF0000 || forma.8 体験版 || JPN || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006E700B702000 || Nightmares from the Deep 2: The Siren`s Call || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006E800B7F2000 || Fernz Gate || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006EA00A294000 || BIOHAZARD 7 resident evil cloud version || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006EB004B0E000 || Treadnauts || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006EE00380C000 || Sausage Sports Club || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009A5009A9E000 || Shining Resonance Refrain || EUR USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006F0004FB4000 || ACA NEOGEO THE KING OF FIGHTERS &#039;96 || EUR JPN USA || 3.0.1 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01006F6002840000 || Thumper || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006F900473A000 || Bulb Boy || USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006F900A298000 || Eekeemoo - Splinters of the Dark Shard || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006FB00990E000 || Azure Reflections || EUR JPN USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006FD0080B2000 || Overcooked! 2 || EUR JPN USA || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006FE005B6E000 || Sky Force Reloaded || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100700006EF6000 || Mushroom Wars 2 || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100701001D92000 || Human Resource Machine || EUR USA || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007020044F0000 || SUPERBEAT: XONiC || USA || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100702005E18000 || Mom Hid My Game! || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010070300BD0C000 || ワーウルフピンボール || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100704000B3A000 || いっしょにチョキッと スニッパーズ 体験版 || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100706005B6A000 || Anima: Gate of Memories || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010070A00A5F4000 || Armello || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FAF009562000 || Deep Ones || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100715007354000 || NARUTO: Ultimate Ninja STORM || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010071B00964A000 || Lost Sea || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010071E00875A000 || Banner Saga 3 || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100720008ED2000 || STRIKERS1945 Ⅱ for Nintendo Switch || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010072B007418000 || スナックワールド トレジャラーズ ゴールド || JPN || 4.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010072E00AAA2000 || モザイクアート Fill-a-Pix DELUXE 体験版 || JPN || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100730007A9C000 || Detention || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100732009CAE000 || L.F.O. -Lost Future Omega- || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010073300158A000 || カーズ3 勝利への道 || JPN || 1.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007330027EE000 || Ultra Street Fighter® II: The Final Challengers || USA || 1.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100735004898000 || The Lion&#039;s Song || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100737003190000 || IMPLOSION 体験版 || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010073900A7A0000 || Awkward || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010073C001D5E000 || Puyo Puyo Tetris || USA || 1.0.0 || Digital / Cartridge || 0 131072 || Gamecard Front: LA-H-BAACB-USA Back: LG || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010073E004C4E000 || L.F.O.　-Lost Future Omega- || JPN || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010073E008E6E000 || Mugsters || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010073E00B5FA000 || Voxel Shot for Nintendo Switch || EUR || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100742007266000 || Monster Energy Supercross - The Official Videogame || EUR USA || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007430037F6000 || Monopoly for Nintendo Switch || EUR JPN USA || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100743008694000 || Neonwall || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100744001588000 || Cars 3: Driven to Win || EUR || 1.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010074800741A000 || TINY METAL || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100748009A28000 || Manual Samuel || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100749009844000 || 20XX || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010074900BA9C000 || Legendary Eleven || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010074E0099FA000 || Grave Danger || EUR USA || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100751007ADA000 || Don’t Starve: Nintendo Switch Edition || EUR USA || 4.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100755004608000 || Arcade Archives Mario Bros. || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D9A005ED6000 || 太鼓の達人 Nintendo Switchば～じょん！ || CHN JPN KOR || 4.0.0 || Digital / Cartridge || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010075E0047F8000 || Neon Chrome || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010075F00B0D0000 || 6180 the moon || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100760002048000 || NBA 2K18 || EUR JPN USA || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010076500AA42000 || 魔界戦記ディスガイア Refine || JPN || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100766003E5C000 || BOOST BEAST || EUR JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100766008ADE000 || Harvest Moon: Light of Hope Special Edition || EUR || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100767008502000 || FANTASY HERO ～unsigned legacy～ || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007690040A0000 || LEGO® Marvel Super Heroes 2 || EUR || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100769004584000 || Shaq-Fu: A Legend Reborn || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D0B0093D8000 || TorqueL -Physics Modified Edition- || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010076C009F02000 || GOD WARS 日本神話大戦 || JPN || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010076E005D58000 || ご当地鉄道 for Nintendo Switch !! || JPN || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010076F0049A2000 || Bayonetta™ || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100770008DD8000 || Monster Hunter Generations Ultimate™ || CHN EUR USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100ACD009B6E000 || ポータルナイツ 体験版 || JPN || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007740041BC000 || レゴ®マーベル スーパー・ヒーローズ2 ザ・ゲーム || JPN || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100774009CF6000 || ONE PIECE : PIRATE WARRIORS 3 - Deluxe Edition || CHN EUR USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100775004794000 || Steredenn: Binary Stars || EUR USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100776003F0C000 || Morphite || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100779004172000 || Golf Story || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010077900440A000 || Island Flight Simulator || EUR USA || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010077B0038B2000 || LOST SPHEAR Demo || EUR JPN USA || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100780009BEC000 || 数学力王　中学１年 || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100782005A44000 || Oh...Sir! The Insult Simulator || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007820096FC000 || Unexplored || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010078300B7CC000 || 海のカケラ || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006DB004566000 || Caveman Warriors || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010078800825E000 || Wanderjahr TryAgainOrWalkAway || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010078800869A000 || Super Daryl Deluxe || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010078B00B0AC000 || Mario Tennis™ Aces: Pre-launch Online Tournament || EUR || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010078D000F88000 || DRAGON BALL XENOVERSE 2 for Nintendo Switch || EUR JPN USA || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 || Gamecard Front: LA-H-ABYBA-{region} Back: ABYBA08B00 || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007900080B6000 || Bomber Crew || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010079100A2F4000 || 脱出ゲーム Aloha ハワイの海に浮かぶ家 || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007920038F6000 || ACA NEOGEO MAGICIAN LORD || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01007960049A0000 || Bayonetta™ 2 || EUR JPN KOR USA || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010079600BF22000 || みんなで空気読み。 || JPN || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010079A009B7A000 || Max: The Curse of Brotherhood (retail only) || EUR USA || 3.0.1 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010079B0045C2000 || ソニックフォース体験版 || CHN JPN KOR || 1.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010079F00671C000 || Sparkle 2 EVO || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007A4008486000 || Enchanting Mahjong Match || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007A400AD2C000 || アルケミックジョスト || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007A400B3F8000 || Anima: Gate of Memories - The Nameless Chronicles || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007AA00A91A000 || TouchBattleTankSP || EUR || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007AD00013E000 || スーパーボンバーマン Ｒ || EUR JPN USA || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 458752 524288 589824 655360 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007B5002F56000 || ドラゴンクエストビルダーズ　アレフガルドを復活せよ　体験版 || JPN || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007B6006092000 || MUSYNX || USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007B900A508000 || 真・電愛「なにが欲しいの？」 ～北見えり～ || EUR JPN USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007BB00A0A0000 || Sally&#039;s Law || CHN EUR JPN KOR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007BC00AD3C000 || 클로즈드 나이트메어 || KOR || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007C0003AEC000 || Use Your Words || EUR USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007C000845C000 || キッドトリップ RUN! || JPN || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007C2002B3C000 || GoNNER || EUR JPN USA || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007C600294E000 || Pocket Rumble || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007C600A484000 || アンエピック || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007C8007376000 || 東方Project『東方紅舞闘V』 || JPN || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002B3008500000 || キューブクリエイターX || CHN JPN KOR || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007D1004DBA000 || ACA NEOGEO SPIN MASTER || EUR JPN USA || 3.0.1 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01007D7001D0E000 || Oceanhorn - Monster of Uncharted Seas Demo || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007D9007792000 || Shadow Bug || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007DA006FF6000 || ヒューマン フォール フラット || JPN || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007E3006DDA000 || Kirby™ Star Allies || CHN EUR JPN KOR USA || 4.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010085900337E000 || Death Squared || EUR USA || 1.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007E800AFB6000 || ACA NEOGEO NINJA COMMANDO || EUR JPN USA || 5.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01007EF00011E000 || The Legend of Zelda™: Breath of the Wild || CHN EUR JPN KOR USA || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 458752 524288 589824 655360 720896 || Gamecard Front: LA-H-AAAAA-{region} Back: AAAAA13A000 || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007EF00399C000 || Conga Master Party! || EUR USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007F200B0C0000 || Ys VIII: Lacrimosa of DANA || EUR USA || 4.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007F4004FA4000 || ACA NEOGEO MUTATION NATION || EUR JPN USA || 3.0.1 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01007FC00206E000 || LEGO® NINJAGO® Movie Video Game || USA || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007FC00B674000 || Sigi - A Fart for Melusina || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100802009C52000 || Aqua Kitty UDX || JPN || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100803005D52000 || ぎゃる☆がん２ || JPN KOR || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100804008794000 || ACA NEOGEO SAMURAI SHODOWN III || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 010080600A9D6000 || ツインロボット DX || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100807009528000 || スーパーガチャポンワールド SDガンダムX || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010080B00AD66000 || Undertale || EUR JPN USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010080B00AF0E000 || めんトリパズル || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010080D002CC6000 || Johnny Turbo&#039;s Arcade: Two Crude Dudes || USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010080F0099FC000 || Semblance || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008110036FE000 || Physical Contact: SPEED || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100818008004000 || Serial Cleaner || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010081A0095FA000 || Dear My Abyss || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010081C008164000 || Gunhouse || EUR USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010081D00A480000 || Ninja Striker! || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010081E001DD2000 || Arcade Archives Renegade || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010082600A234000 || アーバントライアル プレイグラウンド 体験版 || JPN || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100830004FB6000 || L.A. Noire || EUR USA || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100830008426000 || Just Shapes &amp;amp; Beats || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100833008A9E000 || 不如帰 大乱 || JPN || 4.0.0 || Digital || 0 65536 131072 196608 262144 327680 393216 458752 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010083600AE9E000 || Happy Birthdays Demo || EUR USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100837006AF0000 || forma.8 体験版 || JPN || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100838002AEA000 || LEGO® Worlds || EUR JPN USA || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010083800B4E8000 || The Amazing Shinsengumi: Heroes in Love || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010083800B6D4000 || 마계전기 디스가이아Refine || KOR || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Darkest Dungeon®: Ancestral Edition (retail only) || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100842008EC4000 || Mega Man Legacy Collection 2 || CHN EUR KOR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100844004CB6000 || State of Mind || EUR USA || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100849000BDA000 || I am Setsuna || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100849006C18000 || ファーミングシミュレーター Nintendo Switch Edition || JPN || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010085000AC88000 || アペリオン・サイバーストーム || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010085300314E000 || 神巫女 -カミコ- || EUR JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010085500130A000 || LEGO® CITY Undercover || EUR || 1.0.0 || Digital / Cartridge || 0 131072 || Gamecard Front: LA-H-ABM2B-EUR Back: ABM2B41X000 || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010085900337E000 || Death Squared || EUR USA || 1.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010085A00821A000 || ClusterPuck 99 || EUR JPN USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010085F00B93A000 || Western 1849 Reloaded || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100437004170000 || Portal Knights Demo || EUR USA || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010086300486E000 || ACA NEOGEO METAL SLUG 2 || EUR JPN USA || 1.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 010016C009374000 || Lode Runner Legacy Demo Version || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010086D00B3D2000 || OCTOPATH TRAVELER Prologue Demo || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010086E00BCB2000 || Retimed || USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010087000428E000 || Plantera Deluxe || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010087300445A000 || Bombslinger || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100875006C2C000 || タロミア || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100875008000000 || Bloody Zombies || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100876007C2C000 || 마계전기 디스가이아5 || KOR || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010087600AD4A000 || Draw a Stickman: EPIC 2 || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010087C009246000 || Muddledash || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010087D0084A8000 || Hello Kitty Kruisers With Sanrio Friends || EUR USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010087D008D64000 || BINGO for Nintendo Switch || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010087E006E6E000 || Tachyon Project || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010087E00AA8E000 || マンティス・バーン・レーシング || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010087F005DFE000 || ESCAPE TRICK: 35 Fateful Enigmas || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100880004CB2000 || PAN-PAN～ちっちゃな大冒険～ || JPN || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100882001380000 || 三國志13 with パワーアップキット || JPN || 1.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010088400366E000 || Monster Jam Crush It! || USA || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010088500878C000 || ACA NEOGEO REAL BOUT FATAL FURY SPECIAL || EUR JPN USA || 4.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 010088E003A76000 || Ninja Shodown || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100284007D6C000 || Super One More Jump || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008940086E0000 || The Infectious Madness of Doctor Dekker || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010089F00A3B4000 || Perfect Angle || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008A000A404000 || The Lost Child || EUR USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008A100A028000 || FOX n FORESTS || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008A30083E2000 || ワールドエンド・シンドローム || JPN || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008A6007E00000 || ラビ×ラビ-パズルアウトストーリーズ- || JPN || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008A6009758000 || Fairune Collection || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Darkest Dungeon: Ancestral Edition || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008A9001DC2000 || アケアカNEOGEO ショックトルーパーズ || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100322004844000 || Embers of Mirrim Demo || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008AF00A532000 || Bomb Chicken || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008B000A5AE000 || Spectrum || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008B7005B64000 || 薄桜鬼 真改 風華伝 for Nintendo Switch || JPN || 5.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008B8004E36000 || Oxenfree || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008C300648E000 || Letter Quest Remastered || EUR USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008CD00901C000 || Discovery || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008CE005F12000 || NARUTO－ナルト－ 疾風伝　ナルティメットストーム２ || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A7F002830000 || VOEZ 体験版 || CHN EUR JPN KOR USA || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008D000877C000 || ACA NEOGEO SENGOKU 3 || EUR JPN USA || 4.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01008D1001512000 || Cars 3: Driven to Win || USA || 1.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008D4007A1E000 || Outlast: Bundle of Terror || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008D400A584000 || Keep Talking and Nobody Explodes || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Arena of Valor || || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008D800A162000 || Dead Fun Pack: Penguins and Aliens Strikes Again || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008D800AE4A000 || FullBlast || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008D800B558000 || テト字ス || JPN || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008D800BAFA000 || ジュラシック　ピンボール || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008DC004CBA000 || 王だぁランド！ 体験版 || JPN || 3.0.1 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008DD006C52000 || A Magical High School Girl || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008E20047DC000 || いっしょにチョキッと スニッパーズ プラス || CHN EUR JPN KOR USA || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008E500BF62000 || MagiCat || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008E6006502000 || Aegis Defenders || EUR JPN USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008E600AEF4000 || 墮落軍團 - 光榮系譜 - || CHN KOR || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008E900471E000 || De Mambo || EUR USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008E9007064000 || WorldNeverland - Elnea Kingdom || EUR JPN USA || 4.0.0 || Digital || 0 65536 131072 196608 262144 327680 393216 458752 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008EA00405C000 || forma.8 || EUR USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008EA0080F6000 || プロ野球 ファミスタ エボリューション || JPN || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008EA008712000 || ACA NEOGEO PULSTAR || EUR JPN USA || 3.0.1 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01008EC005F88000 || Super Ping Pong Trick Shot || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008ED008776000 || ACA NEOGEO MAGICAL DROP III || EUR JPN USA || 4.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01008ED0087A4000 || The Adventure Pals || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008EE00AA5A000 || Fallen Legion -栄光への系譜- || JPN || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008EE00B22C000 || Rento Fortune Monolit || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008F1008DA6000 || Darkest Dungeon® || EUR USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008F2005154000 || South Park™: The Fractured but Whole™ || EUR USA || 4.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008F70089E4000 || ガンズゴア＆カノーリ || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008F80049C6000 || Unepic || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008FA00ACEC000 || RADIO HAMMER STATION || CHN EUR JPN KOR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008FD004DB6000 || ACA NEOGEO METAL SLUG X || EUR JPN USA || 3.0.1 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01008FF004610000 || リーグ オブ イーブル　体験版 || JPN || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008FF00A4B6000 || Squids Odyssey || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100902001014000 || オセロ || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009040091E0000 || Wolfenstein® II: The New Colossus™ || EUR USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007D7001D0E000 || Oceanhorn - Monster of Uncharted Seas Demo || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010090C00B0E8000 || Yooka-Laylee（ユーカレイリー） || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010090F00A76A000 || BLAZBLUE CROSS TAG BATTLE || EUR || 4.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010091400B596000 || Gaokao.Love.100Days || USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D06003056000 || ピクセル ライン DX 体験版 || EUR JPN USA || 1.0.0 || Digital || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100921006A04000 || Night in the Woods || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010092100AE48000 || ROCK&#039;NRACING GRAND PRIX || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100922008008000 || NARUTO SHIPPUDEN: Ultimate Ninja STORM 2 || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010092400A678000 || Zaccaria Pinball || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100928005BD2000 || Xenoraid || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CD3000BDC000 || ドラゴンクエストヒーローズI・II for Nintendo Switch 体験版 || JPN || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100932004208000 || Let&#039;s Sing 2018 Hits Français et Internationaux || EUR || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009320084A4000 || SteamWorld Dig || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100934003BCC000 || Guns, Gore and Cannoli || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010093600A60C000 || Agatha Knife || EUR USA || 4.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010093800A98C000 || Super Blackjack Battle 2 Turbo Edition - The Card Warriors || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010093D00AC38000 || Sky Gamblers: Storm Raiders || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C0A004C2C000 || Kid Tripp Demo || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009400030D6000 || 聖剣伝説COLLECTION || JPN || 1.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009440095FE000 || Pode || EUR JPN USA || 4.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100944009646000 || Arena of Valor || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100945003A0E000 || Monster Jam: Crush It! || EUR || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100946008DAE000 || Her Majesty&#039;s SPIFFING || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010094E00B52E000 || Capcom Beat &#039;Em Up Bundle || USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009510001CA000 || FAST RMX || EUR JPN USA || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009520034AC000 || ぺんぎんくんギラギラWARS || JPN || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010095300212A000 || Resident Evil Revelations 2 || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100956007854000 || Woodle Tree Adventures || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010095600AA36000 || Fill-a-Pix: Phil&#039;s Epic Adventure Demo || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010095A004040000 || Flip Wars™ || EUR USA || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010095C00406C000 || Beach Buggy Racing || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010096000B3EA000 || OCTOPATH TRAVELER: Prologue Demo || CHN EUR KOR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010096000B658000 || Rebellions Secret Game 2nd Stage for Nintendo Switch || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009630076B8000 || 大盛りチャリ走DX || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010096500B018000 || Cubikolor || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010096500C132000 || おしゃべり！カケジョ！～奪われたドットコインを追え！～ || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100969005E98000 || 60 Seconds! || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010096900A4D2000 || Clustertruck || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010096B00A08E000 || Octocopter: Double or Squids || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C88008BA6000 || Happy Birthdays 体験版 || JPN || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01005FF002E2A000 || RAYMAN® LEGENDS: DEFINITIVE EDITION DEMO || CHN EUR KOR USA || 1.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E570051F0000 || PixelJunk モンスターズ 2　体験版 || JPN || 4.0.0 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100976008FBE000 || Millie || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100978009B98000 || A Normal Lost Phone || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010097C00AB66000 || CastleStorm || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010097F0099B4000 || Football Manager Touch 2018 || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009840046BC000 || Semispheres || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010099B00A2DC000 || Dragon Blaze for Nintendo Switch || EUR JPN USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009A4008A30000 || Arcade Archives HEROIC EPISODE || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009A400A97C000 || ASSAULT GUNNERS HD EDITION || EUR JPN USA || 5.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009A5009A9E000 || Shining Resonance Refrain || EUR USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009A500ABA0000 || シスターズロワイアル　５姉妹に嫌がらせを受けて困っています || JPN || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009AA000FAA000 || Sonic Mania || CHN EUR JPN KOR USA || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009AB0034E0000 || Nintendo Labo Toy-Con 02: Robot Kit || EUR JPN USA || 4.0.0 || Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009AB00B186000 || The Journey Down: Chapter Two || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009B300872A000 || ACA NEOGEO SENGOKU 2 || EUR JPN USA || 4.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01000E10094D0000 || クリプト・オブ・ネクロダンサー体験版 || JPN || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009B400ACBA000 || No Heroes Here || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009B400B73A000 || Blade Strangers || CHN JPN || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009B500007C000 || ARMS Sparring Demo || CHN EUR JPN KOR USA || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 458752 524288 589824 655360 720896 786432 851968 917504 983040 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009B7006C88000 || EARTH WARS || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009B900401E000 || Overcooked Special Edition || EUR JPN USA || 1.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009B900866E000 || 世界一長い５分間 || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009BD003B36000 || Thimbleweed Park || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009BF0072D4000 || Captain Toad™: Treasure Tracker || CHN EUR JPN KOR USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009C000415A000 || Ultra Hyperball || EUR JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009C0009842000 || Detective Gallo || EUR USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009C100390E000 || League of Evil || EUR USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009C8009026000 || LIMBO || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009CD003A0A000 || Vegas Party || EUR USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009CE00733C000 || 送り犬 || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009CE00AFAE000 || ACA NEOGEO METAL SLUG 4 || EUR JPN USA || 5.0.0 || Digital || 0 65536 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 0100F9A008AD6000 || Word Search by POWGI Demo || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009D1003A96000 || 信長の野望･大志 || JPN || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 458752 524288 589824 655360 720896 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009D3008D20000 || Furi || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009D4001DC4000 || アケアカNEOGEO ワールドヒーローズパーフェクト || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009D500A194000 || World Conqueror X || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009D60076F6000 || Enter the Gungeon || EUR JPN USA || 3.0.1 || Digital || 0 65536 131072 196608 262144 327680 393216 458752 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009D60080B4000 || SpiritSphere DX || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009DC001DB6000 || ACA NEOGEO THE KING OF FIGHTERS &#039;95 || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01009DD00904E000 || VVVVVV || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009DE009B76000 || 刑事J.B.ハロルドの事件簿　キス・オブ・マーダー || JPN || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009E000B142000 || スチームワールドディグ || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009E2003FE2000 || Vaccine || EUR USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009E4006CC8000 || Super Rock Blasters! || USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009E40095EE000 || Radiation Island || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009EA00A320000 || Devious Dungeon || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009EB004CB0000 || Shelter Generations || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009EC006B00000 || THE 麻雀 LITE || JPN || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009F20086A0000 || Ikaruga || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009FB002B2E000 || Flipping Death || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009FF00A160000 || Toy Stunt Bike: Tiptop&#039;s Trials || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A01006E00000 || LEGO® The Incredibles || USA || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A0500348A000 || Just Dance 2018® || CHN EUR KOR USA || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A050038F2000 || ACA NEOGEO MAGICAL DROP II || EUR JPN USA || 1.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 0100A0600B0F2000 || マーセナリーズウィングス 偽りの不死鳥 || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A0600B708000 || シフトクアンタム Shift Quantum || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A0D004FB0000 || ACA NEOGEO TOP HUNTER RODDY &amp;amp; CATHY || EUR JPN USA || 3.0.1 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 0100A0E004DB2000 || ACA NEOGEO SUPER SIDEKICKS || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 0100A0E005E42000 || Light Fingers || USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A0E0068CC000 || スクウェアボーイ リベンジファイト || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A0E00B7A4000 || Werewolf Pinball || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A1C00359C000 || TowerFall || EUR USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A21003E66000 || Fire Emblem Warriors Demo for KIOSK || USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A21007FFA000 || SteamWorld Heist: Ultimate Edition || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A250093DE000 || Typoman || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A250097F0000 || DRAGON BALL FIGHTERZ || JPN USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A260094EE000 || Fallen Legion: Rise to Glory || EUR USA || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A2700A86E000 || Bouncy Bob || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A290038F8000 || ACA NEOGEO PUZZLED || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 0100A290048B0000 || Soldam: Drop, Connect, Erase || USA || 1.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A2900AFA4000 || ACA NEOGEO LEAGUE BOWLING || EUR JPN USA || 4.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 0100A2B008696000 || Toki Tori 2+: Nintendo Switch Edition || EUR USA || 4.0.0 || Digital || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A2E008162000 || イースVIII -Lacrimosa of DANA- || JPN || 4.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A2F006FBE000 || Cat Quest || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A3F009142000 || Little Dragons Café || USA || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A42004718000 || BRAWL || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A4200A284000 || LUMINES REMASTERED || EUR JPN USA || 4.0.0 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A48008AE8000 || Bleed 2 || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100465009020000 || Qbik || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A4A00B2E8000 || Toby: The Secret Mine || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A4D00A308000 || ACA NEOGEO SUPER SIDEKICKS 3 : THE NEXT GLORY || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01009B500007C000 || ARMS Sparring Demo || CHN EUR JPN KOR USA || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 458752 524288 589824 655360 720896 786432 851968 917504 983040 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A55003B5C000 || Cave Story+ || EUR || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A5700AF32000 || Arcade Archives ARGUS || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A5900472E000 || Chess Ultra || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A5A004FB2000 || ACA NEOGEO THE LAST BLADE || EUR JPN USA || 3.0.1 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 0100A6000ACEA000 || Punch Club || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A62002042000 || RiME || EUR JPN USA || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A620083DA000 || Ambition of the Slimes || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A6200851E000 || 超回転 寿司ストライカー The Way of Sushido 体験版 || CHN JPN || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A6300150C000 || Wonder Boy: The Dragon&#039;s Trap || EUR JPN USA || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A6500B176000 || Calculation Castle : Greco&#039;s Ghostly Challenge &amp;quot;Subtraction&amp;quot; || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A66003384000 || Hulu || USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A6700AF10000 || Element || EUR JPN USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A6A00894C000 || ZERO GUNNER 2- for Nintendo Switch || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A6D009840000 || The Wardrobe || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A6F00A0FE000 || THE Number Puzzle || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A70006B8A000 || Never Stop Sneakin&#039; || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A72004B20000 || スプラッシャー || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A73006E74000 || Legendary Eleven || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A76002B46000 || アケアカNEOGEO ASO II 〜ラストガーディアン〜 || EUR JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A7700B46C000 || Legendary Fishing || CHN EUR KOR || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A7800AFAA000 || ACA NEOGEO PREHISTORIC ISLE 2 || EUR JPN USA || 5.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 0100A7900B936000 || Shut Eye || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100191006B98000 || ロロロロ　体験版 || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A7F002830000 || VOEZ 体験版 || CHN EUR JPN KOR USA || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A8200B15C000 || Kentucky Robo Chicken || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A8300A4BA000 || キミの瞳にヒットミー || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A8400471A000 || MUJO || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A840047C2000 || 12 orbits || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A8C001DCE000 || アケアカNEOGEO NAM-1975 || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A8D003BAE000 || Qbics Paint || EUR JPN USA || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A8E0090B0000 || Energy Invasion || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A8F00B3D0000 || FunBox Party || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A9300A4AE000 || Super Sportmatchen || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A9400991E000 || 東方蒼神縁起V || JPN || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A9800A1B6000 || Professional Construction – The Simulation || EUR USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01001C9007614000 || Max: The Curse of Brotherhood (Demo) || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A9B009678000 || EAT BEAT DEADSPIKE-san || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A9D00B31A000 || The Inner World - The Last Wind Monk || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AA0008736000 || Nihilumbra || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AA2006510000 || Revenant Saga || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AA900B282000 || ザ・トレイル：フロンティアチャレンジ || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AAD004358000 || Physical Contact: Picture Place || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AB000ABFE000 || Shadow Fight 2 || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100ABC008E06000 || カイジ～絶望の鉄骨渡り～ for Nintendo Switch || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100ABC009708000 || A Gummy&#039;s Life || USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100ABC00AAD0000 || 机でサッカー || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AC000ABE0000 || Dungeon Rushers || CHN JPN KOR || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AC10085CE000 || AQUA KITTY UDX || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AC40038F4000 || ACA NEOGEO AERO FIGHTERS 2 || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 0100ACB004006000 || Schlag den Star - Das Spiel || EUR || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01000FB008900000 || Midnight Deluxe || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100ACD009B6E000 || ポータルナイツ 体験版 || JPN || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AD000B9AC000 || Son of a Witch || USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AD300B786000 || アイリス魔法学園～Vinculum Hearts～ || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AD5007430000 || Earth Atlantis || JPN || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AD7003FF4000 || Stick It to The Man || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100ADF00700E000 || Runbow || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100ADF0096F2000 || Samurai Aces for Nintendo Switch™ || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AE0003424000 || Shantae: Half-Genie Hero || EUR USA || 1.0.0 || Digital || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AE0006474000 || Stern Pinball Arcade || EUR USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AE00096EA000 || Hyrule Warriors: Definitive Edition || EUR USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AE000AEBC000 || Angels of Death || EUR JPN USA || 4.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AE5003EE6000 || The Jackbox Party Pack || EUR USA || 3.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AE9003FAC000 || タッチバトル戦車SP || JPN || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AE9008744000 || Claws of Furry || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AEC00A5F2000 || Yonder 青と大地と雲の物語 || JPN || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AED003A60000 || プランテラ ガーデンライフ DXエディション 体験版 || JPN || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AEF00A270000 || Cast of the Seven Godsends || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Thimbleweed Park || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Stern Pinball Arcade (retail only) || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AFC00B120000 || FLIP OVER FROG || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100AFE00452E000 || Tumblestone || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B0B00B318000 || The Inner World || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B0C0086B0000 || Mega Man 11 Demo || EUR JPN USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B0E0086F6000 || The Trail: Frontier Challenge || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B1200ADEA000 || Loot Monkey: Bling Palace || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B1300783E000 || King Oddball || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B13007A6A000 || The Gardens Between || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B1300871A000 || ACA NEOGEO KING OF THE MONSTERS || EUR JPN USA || 3.0.1 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 0100B18001D8E000 || Little Inferno || EUR USA || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B1A0066DC000 || Völgarr the Viking || EUR USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01006C40086EA000 || AeternoBlade || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B1E0022F8000 || VVVVVV || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B1E00AA56000 || Crossing Souls || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Axiom Verge || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B1F0090F2000 || TurtlePop: Journey to Freedom || EUR JPN USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B25009B96000 || Shape of the World || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B2600A398000 || TENGAI for Nintendo Switch || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B27008170000 || ジャンナビ麻雀オンライン || JPN || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B28003440000 || Aces of the Luftwaffe - Squadron || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B2F008BD8000 || Skee-Ball || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B3F000BE2000 || ポッ拳　POKKÉN TOURNAMENT DX 体験版 || CHN EUR JPN USA || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B410040F2000 || Dead Synchronicity: Tomorrow Comes Today || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B42001DB4000 || アケアカNEOGEO ザ・キング・オブ・ファイターズ &#039;98 || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010004A007890000 || MAX マジックマーカーと兄弟の絆 || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B4800AFBA000 || ACA NEOGEO AGGRESSORS OF DARK KOMBAT || EUR JPN USA || 5.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 0100B4900AD3E000 || NEKOPARA Vol.1 || EUR JPN USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B52006E8C000 || Tiny Troopers Joint Ops XL || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B5300B49A000 || Frost || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B5600A88C000 || WHIP! WHIP! || EUR JPN USA || 4.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B58007D40000 || Unholy Heights || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B5A004302000 || R.B.I. Baseball 17 || EUR USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B5C00AB3C000 || グレコからの挑戦状！計算の城とオバケたち　たし算 || JPN || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B60003A06000 || よるのないくに２ ～新月の花嫁～ || JPN || 1.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B61008208000 || BLAZBLUE CROSS TAG BATTLE || CHN JPN KOR USA || 4.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B6900A668000 || Code：Realize ～彩虹の花束～ for Nintendo Switch || JPN || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B6C00AF6E000 || Lost in Harmony || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B6E00A420000 || Dust: An Elysian Tail || EUR USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B70003836000 || Johnny Turbo&#039;s Arcade: Sly Spy || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B7400A304000 || ACA NEOGEO TOP PLAYER’S GOLF || EUR JPN USA || 4.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 0100B7600B6D2000 || チョークダッシュカーニバル || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B7700BB7A000 || Monster Loves You || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B78006CCA000 || ネオアトラス1469 || EUR JPN USA || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010065F004E5E000 || Super Chariot || EUR USA || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B7D0022EE000 || Cave Story+ || USA || 1.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B7F00B4E6000 || Destiny&#039;s Princess: A War Story, A Love Story || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B8000B12C000 || グレコからの挑戦状！計算の城とオバケたち　わり算 || JPN || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B8000B190000 || Goosebumps The Game || USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B8400A1C6000 || Bloons TD 5 || EUR USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B8E00359E000 || Party Golf || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B8F00AFEC000 || フラッシュバック || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B90008E1E000 || Packet Queen # || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B91008780000 || ACA NEOGEO AERO FIGHTERS 3 || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 0100B9400654E000 || プラチナ・トレイン～日本縦断てつどうの旅～ || JPN || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100B97002B44000 || アケアカNEOGEO ザ・キング・オブ・ファイターズ 2000 || EUR JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BA0003EEA000 || PICROSS S || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BA0004F38000 || NeuroVoider || EUR USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BA3003B70000 || PAC-MAN VS. Free Multiplayer-only Ver. || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BA500B660000 || Darts Up || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BA8001DC6000 || アケアカNEOGEO メタルスラッグ3 || EUR JPN USA || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BAB00A116000 || The Low Road || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BAE006FEE000 || シンプル麻雀オンライン || JPN || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BB1001DD6000 || Arcade Archives CRAZY CLIMBER || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BB1009E50000 || Firefighters: Airport Fire Department || EUR USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Slain: Back From Hell (retail only) || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Victor Vran Overkill Edition (retail only) || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01003F000973E000 || Metropolis: Lux Obscura || EUR USA || 4.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BB9009FC8000 || Farm Expert 2018 for Nintendo Switch™ || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BBA00BA0A000 || シェルター ジェネレーション || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BBF0027EC000 || ULTRA STREET FIGHTER™ II The Final Challengers || EUR || 1.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BC2004FF4000 || Owlboy || EUR JPN USA || 4.0.0 || Digital || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BC60099FE000 || Iconoclasts || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BCB00AE98000 || GUNBIRD2 for Nintendo Switch || EUR JPN USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BCE000598000 || Just Dance 2017® Demo || EUR USA || 1.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BD3006A02000 || One More Dungeon || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BD9004AB6000 || Kingdom: New Lands || EUR JPN USA || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BDE00862A000 || Mario Tennis™ Aces || CHN EUR JPN KOR USA || 4.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BE50042F6000 || Yono and the Celestial Elephants || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BE80097FA000 || Arcade Archives 10-Yard Fight || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BE9007E7E000 || ICEY || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100A9B009678000 || EAT BEAT DEADSPIKE-san || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BF1003B9A000 || 密着対戦2048 || EUR JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BF5006A7C000 || Layers of Fear: Legacy || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BF7006BCA000 || Crawl || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BFC002B4E000 || Dandara || EUR JPN USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100BFE00865E000 || Energy Cycle || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C00005E38000 || Dustoff Heli Rescue 2 || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C0A004C2C000 || Kid Tripp Demo || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C0F0020E8000 || Snake Pass || EUR USA || 1.0.0 || Digital || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C1000706C000 || Blossom Tales: The Sleeping King || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C11009378000 || 戰場女武神４ || CHN JPN KOR || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C1500B82E000 || The World Ends With You® -Final Remix- || EUR || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C160071B8000 || Waking Violet || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C1700A9F0000 || Streets of Red - Devil&#039;s Dare Deluxe || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C1800A9B6000 || Go Vacation™ || CHN EUR KOR USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C1F0051B6000 || Donkey Kong Country™: Tropical Freeze || CHN EUR JPN KOR USA || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C1F00A9B8000 || All-Star Fruit Racing || EUR USA || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C220040C0000 || Mr. Shifty || JPN || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100692003FCE000 || Hyper Sentinel || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008FF004610000 || リーグ オブ イーブル　体験版 || JPN || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C2D00981E000 || Arcade Archives RYGAR || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C2E00B494000 || Moonfall Ultimate || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C2F00A568000 || Shio || EUR JPN USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C31005A50000 || Phantom Trigger || EUR USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C3100B06C000 || サガ スカーレット グレイス 緋色の野望 || JPN || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C320083BE000 || Splitter Critters || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010008900705C000 || Dragon Quest® Builders™ || EUR USA || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C3700416A000 || SUPER PING PONG TRICK SHOT || JPN || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C37008ACE000 || WILD GUNS Reloaded || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C3800049C000 || モンスターハンターダブルクロス™ Nintendo Switch Ver. 体験版 || JPN || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C38004DCC000 || The Flame In The Flood: Complete Edition || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C39009EEE000 || 荒野之槍 重裝上陣 || CHN KOR || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C3D00923A000 || Old School Musical || EUR USA || 5.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C3F000BD8000 || みんなでワイワイ！スペランカー 体験版 || JPN || 1.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C4000A876000 || Big Buck Hunter Arcade || EUR || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C460040EA000 || Hunting Simulator || EUR USA || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C4B0034B2000 || Nintendo Labo Toy-Con 01 Variety Kit || EUR JPN USA || 4.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C4E004406000 || Cartoon Network Adventure Time: Pirates of the Enchiridion || EUR USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C4F005EB4000 || Mecho Tales || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C50007070000 || Ginger: Beyond the Crystal || EUR USA || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C3800049C000 || モンスターハンターダブルクロス™ Nintendo Switch Ver. 体験版 || JPN || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C510049E0000 || Penny-Punching Princess || EUR USA || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C53004C52000 || Flat Heroes || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C5700434C000 || Sky Rogue || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C5E003B40000 || ARMS™ Global Testpunch || EUR JPN USA || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C6200A0AA000 || Enigmatis 2: The Mists of Ravenwood || EUR USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C66007E96000 || Crayola Scoot || EUR USA || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C6E0047C8000 || Bit Dungeon+ || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C6E00AF2C000 || BLAZBLUE CROSS TAG BATTLE SPECIAL TRIAL || JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C7300772E000 || ルフランの地下迷宮と魔女ノ旅団 || JPN || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C7600AF00000 || Red Hot Ricochet || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C7C00AE6C000 || VSR: Void Space Racing || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C81004780000 || Disco Dodgeball - REMIX || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C86000B58000 || ウルトラストリートファイターII ザ・ファイナルチャレンジャーズ || CHN JPN KOR || 1.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C87006310000 || 戦国無双 〜真田丸〜 || JPN || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C88008BA6000 || Happy Birthdays 体験版 || JPN || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C8E0083C4000 || HANDY麻雀 || JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C920092B0000 || Energy Balance || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C950088FC000 || Conga Master Cruisin || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C960041DC000 || Levels+ : Addictive Puzzle Game || EUR JPN USA || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C9600A88E000 || PICROSS S2 || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C9600ABA8000 || 白衣性愛情依存症 || JPN || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C9800A454000 || GALAK-Z: Variant S || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C9800B366000 || ミッドナイトDX || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C9A00952A000 || Manticore - Galaxy on Fire || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C9F009F7A000 || Xenoblade Chronicles 2: Torna ~ The Golden Country || USA || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C9F00BC50000 || Realpolitiks || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CA100489C000 || The Escapists 2 || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
parse error: Invalid numeric literal at line 2, column 0&lt;br /&gt;
|-&lt;br /&gt;
| 0100CA500756C000 || Fossil Hunters || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CA6009888000 || VERTICAL STRIKE ENDLESS CHALLENGE || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CA9002322000 || SteamWorld Dig 2 || EUR USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CAB006F54000 || Octodad: Dadliest Catch || EUR USA || 3.0.1 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CAB00B4E4000 || Pub Encounter || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CAF001DBE000 || アケアカNEOGEO 餓狼伝説2 〜新たなる闘い〜 || EUR JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CB0004C4A000 || 刑事J.B.ハロルドの事件簿　マーダー・クラブ || JPN || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CB10089DE000 || Party Crashers || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CB2001DB8000 || アケアカNEOGEO 餓狼 MARK OF THE WOLVES || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CB60092A2000 || World to the West || JPN || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CB800B07E000 || NOT A HERO: SUPER SNAZZY EDITION || EUR USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D03003F0E000 || Nine Parchments Demo || EUR JPN USA || 3.0.1 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CBA005160000 || クエストオブダンジョンズ || JPN || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CBB0070EE000 || Green Game: TimeSwapper || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010072E00AAA2000 || モザイクアート Fill-a-Pix DELUXE 体験版 || JPN || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CC2001C6C000 || Battle Chef Brigade || EUR JPN USA || 3.0.1 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CC6005DB0000 || 遊んで将棋が強くなる！ 銀星将棋DX || JPN || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CC6009456000 || SDガンダム ジージェネレーション ジェネシス for Nintendo Switch || JPN || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CC600ABB2000 || Yonder: The Cloud Catcher Chronicles (Retail Only) || USA || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CC7009196000 || Masters of Anima || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CC80013D6000 || The Jackbox Party Pack 3 || EUR USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Skylanders Imaginators || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CCE00A4F2000 || Reigns: Kings &amp;amp; Queens || EUR USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CD3000BDC000 || ドラゴンクエストヒーローズI・II for Nintendo Switch 体験版 || JPN || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CD300880E000 || The Pinball Arcade || EUR USA || 4.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CD300A1BA000 || Zombillie || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CD500B2C6000 || XEODRIFTER(ゼオドリフター) || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CD6004130000 || SubaraCity || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CD900B1AC000 || 거짓말쟁이 공주와 눈먼 왕자 || KOR || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CDB00AD64000 || Yono (ヨノ) || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CDB00BC94000 || A Case of Distrust || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CDC00789E000 || The Final Station || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || 魔界戰記DISGAEA 5 || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CE1004E72000 || The Longest Five Minutes || EUR USA || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CE1004FA6000 || ACA NEOGEO STREET HOOP || EUR JPN USA || 3.0.1 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 0100CE100A826000 || Jurassic Pinball || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CE2007A86000 || Old Man&#039;s Journey || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CE400A2FA000 || ACA NEOGEO Gururin || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 0100CEA007D08000 || Crypt of the NecroDancer: Nintendo Switch Edition || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CEF001DC0000 || アケアカNEOGEO わくわく7 || EUR JPN USA || 1.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CEF008048000 || RIVE:アルティメットエディション || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CF2008D88000 || プリンセスは金の亡者 || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CF3008798000 || ACA NEOGEO REAL BOUT FATAL FURY 2 || EUR JPN USA || 5.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 0100CF8003E70000 || Harvest Moon®: Light of Hope Special Edition || USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CFC00A1D8000 || Wild Guns™ Reloaded || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CFE003A64000 || ZOMBIE GOLD RUSH || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CFF0048D2000 || Milanoir || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D03003F0E000 || Nine Parchments Demo || EUR JPN USA || 3.0.1 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D04004176000 || Farming Simulator Nintendo Switch Edition || EUR USA || 1.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D0500B0A6000 || The VideoKid || EUR JPN USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F8B00883C000 || 原始人 うぉーりあーず || JPN || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D06003056000 || ピクセル ライン DX 体験版 || EUR JPN USA || 1.0.0 || Digital || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D07002CD6000 || Johnny Turbo&#039;s Arcade: Nitro Ball || USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D070040F8000 || スプラトゥーン2 前夜祭 || JPN || 3.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D0A009310000 || de Blob || EUR USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D0B0093D8000 || TorqueL -Physics Modified Edition- || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D0D00516A000 || Aqua Moto Racing Utopia || EUR USA || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D1000B18C000 || 1979 Revolution: Black Friday || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D12008EE4000 || Heart&amp;amp;Slash || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D1200AC2E000 || 図書館ＳＷ・名作１００選＋α || JPN || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D13006DFA000 || 刑事J.B.ハロルドの事件簿　マンハッタン・レクイエム || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D170038EA000 || ACA NEOGEO SENGOKU || EUR JPN USA || 1.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 010040A0065D2000 || 体験版デス！がるメタる！ || JPN || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D1700ACFC000 || Flood of Light || EUR JPN USA || 5.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D1A00C330000 || The Mahjong Huntress || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D1B006744000 || Crash Bandicoot™ N. Sane Trilogy || EUR USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D1B00A5A2000 || Iro Hero || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D1D007F4E000 || Paper Wars: Cannon Fodder Devastated || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D1D00ACB8000 || Three Fourths Home: Extended Edition || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D230069CC000 || Johnny Turbo&#039;s Arcade: Wizard Fire || USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D2400AFB0000 || ACA NEOGEO CROSSED SWORDS || EUR JPN USA || 5.0.0 || Digital || 0 65536 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 0100D250083B4000 || Salt and Sanctuary || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D2600736A000 || Fe || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D2D009028000 || INSIDE || EUR JPN USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100425009FB2000 || Baobabs Mausoleum Ep.1: Ovnifagos Don&#039;t Eat Flamingos || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D3A00409E000 || LEGO® Marvel Super Heroes 2 || USA || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D3D008E6C000 || Tiny Troopers Joint Ops XL || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D3F008746000 || Knights of Pen and Paper +1 Deluxier Edition || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D4300A4CA000 || Infernium || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D49008748000 || Joe Dever&#039;s Lone Wolf || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D51006AAC000 || Knight Terrors || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D54003AAA000 || Winning Post 8 2017 || JPN || 1.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D5700877A000 || 斑鳩 IKARUGA || JPN || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01007B5002F56000 || ドラゴンクエストビルダーズ　アレフガルドを復活せよ　体験版 || JPN || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D6000B52C000 || SNK 히로인즈 Tag Team Frenzy || KOR || 5.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D67006F14000 || Skies of Fury DX || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D6800AC5C000 || SEGA AGES サンダーフォースⅣ || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D6D00A490000 || Pool Panic || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D6E008700000 || Save the Ninja Clan || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D7000AE6A000 || Star Story: The Horizon Escape || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D71004694000 || Minecraft || EUR JPN USA || 4.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 458752 524288 589824 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D75007E32000 || みんなで大富豪 || JPN || 4.0.0 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D76006EF8000 || DOOM || JPN || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D7700AF88000 || 光明之響 龍奏回音 || CHN || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D7A005DFC000 || Tennis || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D800040AC000 || Rocket Fist || EUR USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Shelter Generations (retail only) || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D82009024000 || Goetia || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D83007928000 || あなたの四騎姫教導譚 || JPN || 3.0.1 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D84005AF6000 || Grand Prix Rock &#039;N Racing || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D8500A692000 || Night Trap - 25th Anniversary Edition || USA || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100704000B3A000 || いっしょにチョキッと スニッパーズ 体験版 || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D87009954000 || Jumping Joe &amp;amp; Friends || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D8800B87C000 || Cities: Skylines - Nintendo Switch™ Edition || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D8A00A564000 || エース・オブ・ルフトバッフェ -スクアドロン- || JPN || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D940022F6000 || Tiny Barbarian DX || EUR USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D940063A0000 || MXGP3 - The Official Motocross Videogame || EUR USA || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D9500A0F6000 || CLOSED NIGHTMARE || JPN || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D98005E8C000 || Die for Valhalla! || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D98007784000 || Premium Pool Arena || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D99009734000 || White Night || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D9A005ED6000 || 太鼓の達人 Nintendo Switchば～じょん！ || CHN JPN KOR || 4.0.0 || Digital / Cartridge || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100D9B0041CE000 || Spacecats with Lasers || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DA0006F50000 || ドラゴンファングZ 竜者ロゼと宿り木の迷宮 || EUR JPN USA || 3.0.1 || Digital || 0 65536 131072 196608 262144 327680 393216 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DA200A09A000 || Kero Blaster || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DA700879C000 || Last Day of June || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DB0007FF6000 || キャットクエスト || JPN || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DB200B512000 || 本格AI搭載 銀星麻雀 || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DB300A026000 || Warp Shift || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DB7003828000 || Pinball FX3 || EUR USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DBB004150000 || 進撃の巨人２ || JPN || 4.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DBC0081A4000 || ACORN Tactics || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DBD00ABF4000 || Party Trivia || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DBF004FAA000 || ACA NEOGEO SOCCER BRAWL || EUR JPN USA || 3.0.1 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 01004D1007926000 || 10秒走RETURNS 体験版 || EUR JPN USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DC300AC78000 || The Messenger || EUR JPN USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DC500B4B0000 || Beat Rush || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DC60085BA000 || Winning Post 8 2018 || JPN || 4.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 458752 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DCE009732000 || Poisoft Thud Card || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DCE00B756000 || Earthworms || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002CC0062B8000 || DEEMO || CHN EUR JPN KOR USA || 3.0.1 || Digital || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DDB004F30000 || Sky Ride || EUR JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DDD0085A4000 || Sushi Striker™: The Way of Sushido || CHN EUR KOR USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DDD00B684000 || 中華大仙 || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DDD00C0EA000 || Phantaruk || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DE40068CA000 || Squareboy vs Bullies: Arena Edition || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DE70085E8000 || Outlast 2 || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009840046BC000 || Semispheres || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DEC00B2BC000 || The Midnight Sanctuary || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E8C004616000 || お絵かきパズル Pic-a-Pix Deluxe 体験版 || JPN || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DF200A9DC000 || Woodle Tree Adventures Deluxe || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DF200B690000 || 本格AI搭載 大富豪 || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DF600AA4C000 || シリアルクリーナー　ジョージの裏シゴト || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DF8009BEE000 || 数学力王　中学２年 || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DF9005E7A000 || Floor Kids || EUR JPN USA || 3.0.1 || Digital || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DFC003398000 || アケアカNEOGEO ブレイジングスター || EUR JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DFC00405E000 || Wheels of Aurelia || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E000089F2000 || 포탈 나이츠 || KOR || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E000092B2000 || One Eyed Kutkh || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E0000A3C4000 || ルカノール伯爵 || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E0000B7BC000 || Iconoclasts || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E03009DB8000 || Invisiballs || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E0300B13C000 || Mahjong Deluxe 3 || EUR USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E04009BD4000 || Spot The Difference || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E07006C84000 || Earth Atlantis || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E0C00ADAC000 || SENRAN KAGURA Reflexions || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E0F008E64000 || 僕のヒーローアカデミア One&#039;s Justice || JPN || 5.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01008EA00405C000 || forma.8 || EUR USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E1900B584000 || ネオンロード || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E1A00AF40000 || Hungry Shark® World || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E1E00A14E000 || Furi（フリー） || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E1F003EE8000 || The Jackbox Party Pack 4 || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E21009352000 || Wolfenstein® II: The New Colossus™ || JPN || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E24006FA8000 || Stikbold! A Dodgeball Adventure DELUXE || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E28002D74000 || Space Dave || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E29001298000 || Has-Been Heroes || EUR JPN USA || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 || Gamecard Front: LA-H-ABMKA-{region} Back: ABMKA09Y000 || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01002A2004530000 || The Bridge || EUR JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E3C00A118000 || Chicken Assassin: Reloaded || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E45004212000 || Champion Jockey Special || JPN || 1.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E46003042000 || マリオ＋ラビッツ キングダムバトル || CHN JPN KOR || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E4600B166000 || Candle: The Power of the Flame || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E470067A8000 || Don&#039;t Knock Twice || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E4D00A690000 || PixelJunk® Monsters 2 Demo || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E4F00AE14000 || Sparkle ZERO || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E5000AB8A000 || Code of Princess EX || JPN || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E570051F0000 || PixelJunk モンスターズ 2　体験版 || JPN || 4.0.0 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || Owlboy (retail only) || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E5700A3BA000 || Vesta || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E5F0000C0000 || 魔界戦記ディスガイア5 体験版 || JPN || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E5F00643C000 || Astro Bears Party || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100770008DD8000 || Monster Hunter Generations Ultimate™ || CHN EUR USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E65002BB8000 || Stardew Valley || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010079B0045C2000 || ソニックフォース体験版 || CHN JPN KOR || 1.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E66006406000 || OCTOPATH TRAVELER || JPN || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E67008D84000 || Ultra Space Battle Brawl || EUR JPN USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E6A009A26000 || Spartan || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E7100B198000 || Scribblenauts Mega Pack || EUR USA || 5.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E7200B272000 || Lanota || EUR JPN USA || 4.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E74007EAC000 || Spellspire || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E7400B83E000 || Surgeon Simulator CPR || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E7C001DE0000 || Arcade Archives Kid&#039;s Horehore Daisakusen || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E7E00C4CA000 || Bombing Busters || USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E7F00BA5A000 || Catch &#039;Em! Goldfish Scooping || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E81007A06000 || Victor Vran Overkill Edition || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E8500AD58000 || 無双OROCHI３ || JPN || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E860086C6000 || ロックマンX アニバーサリー コレクション 2 || JPN || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E8C004616000 || お絵かきパズル Pic-a-Pix Deluxe 体験版 || JPN || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E8D007E16000 || Gotcha Racing 2nd || CHN EUR JPN KOR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E93004CB4000 || 鯉(KOI) || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E9300ABEC000 || Toki Tori 2+（トキ・トリ 2+） || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E9300B90A000 || メルルのアトリエ ～アーランドの錬金術士３～ DX || JPN || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E95004038000 || Xenoblade Chronicles™ 2 || EUR KOR USA || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 327680 393216 458752 524288 589824 655360 720896 786432 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E95006B30000 || The Men of Yoshiwara: Kikuya || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E98002F6E000 || Mantis Burn Racing || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E98006F22000 || Bad North || EUR JPN USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E9A00B0BC000 || NoReload Heroes || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E9D007432000 || Wonder Boy: The Dragon&#039;s Trap || CHN JPN KOR || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100E9E00B052000 || Arcade Archives DONKEY KONG || EUR JPN USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EA1009022000 || Timberman VS || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010039A008E76000 || ChromaGun || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EA6004516000 || MEMBRANE || EUR USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EAB00605C000 || Poly Bridge || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EAE003A5A000 || ファイアーエムブレム無双 || CHN JPN || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EAE00BE4A000 || にゃんらぶ ～私の恋の見つけ方～ || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EB2001DCC000 || アケアカNEOGEO ザ・キング・オブ・ファイターズ &#039;94 || EUR JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EB6005E90000 || Maria The Witch || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EB600A4DA000 || A Robot Named Fight || EUR USA || 4.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EB600AB5E000 || THE Card: Poker, Texas hold &#039;em, Blackjack and Page One || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EB800868C000 || Azkend 2: The World Beneath || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EB800B614000 || Freedom Planet || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 01009EA00A320000 || Devious Dungeon || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EBE002B3E000 || アケアカNEOGEO メタルスラッグ || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EC100A790000 || PSYVARIAR DELTA《閃速神機》 || CHN JPN KOR || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EC7009348000 || Rogue Aces || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EC8004762000 || KORG Gadget for Nintendo Switch || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EC800800C000 || NARUTO SHIPPUDEN: Ultimate Ninja STORM Trilogy || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EC9004736000 || Bulb Boy || EUR || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100ECB00A0FC000 || Let&#039;s Sing 2018 || USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100ECE00B210000 || Calculation Castle : Greco&#039;s Ghostly Challenge &amp;quot;Multiplication&amp;quot; || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100ECF008474000 || 6180 the moon || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100ED600A87A000 || Minit || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100ED800A526000 || パンカプ～オムニアの防人 || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EDC00AAAA000 || It&#039;s Spring Again || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EDD0068A6000 || Broken Age || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EDD00A1DA000 || インナースペース || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EE6002B48000 || アケアカNEOGEO　餓狼伝説 〜宿命の闘い〜 || EUR JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EE80098E6000 || Toki Tori || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EEA00AFB2000 || ACA NEOGEO FOOTBALL FRENZY || EUR JPN USA || 5.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| 0100EEB005ACC000 || Ghost 1.0 || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EEC00A262000 || D/Generation || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EEC00AA6E000 || Gone Home || EUR USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EEE0096CA000 || おしゃべり！ホリジョ！ || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EF3007250000 || 뿌요뿌요™테트리스® S || KOR || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EF300B720000 || Plague Road || JPN || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EFB00B7B8000 || Omvorm || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EFD00A4FA000 || Shantae and the Pirate&#039;s Curse || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100EFE009424000 || Animal Super Squad || EUR USA || 4.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F0000869C000 || Saturday Morning RPG || USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F0300B7BE000 || Ludomania || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F0400351C000 || Astro Duel Deluxe || EUR JPN USA || 1.0.0 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F0B0081DA000 || Dawn of the Breakers || EUR JPN USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F0C00685E000 || Slime-san || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F0D004CAE000 || PAN-PAN A tiny big adventure || EUR USA || 1.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F10009870000 || 大神 絶景版 || JPN || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F110029C8000 || Yooka-Laylee || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C3F000BD8000 || みんなでワイワイ！スペランカー 体験版 || JPN || 1.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F15003E64000 || Fire Emblem Warriors™ || EUR KOR USA || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 || Gamecard Front: LA-H-ADXHB-{region} Back: ADXHB08X000 || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F160092D2000 || STEINS;GATE ELITE || JPN || 5.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F17004156000 || Retro City Rampage DX || EUR USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F19006E04000 || LEGO® The Incredibles || EUR || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F1A00A5DC000 || FRAMED Collection || EUR JPN USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F200049C8000 || InnerSpace || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F210061E8000 || Hollow || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F2300A5DA000 || Think of the Children || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F25001DD0000 || Arcade Archives DOUBLE DRAGON || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F2A005C98000 || Gorogoa || EUR JPN USA || 3.0.1 || Digital || 0 65536 131072 196608 262144 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F3400332C000 || Xenoblade2 (ゼノブレイド2) || CHN JPN || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 458752 524288 589824 655360 720896 786432 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F3500A20C000 || BlobCat || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F3D001DEE000 || Puyo Puyo™ Tetris® Demo || EUR || 1.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F3D008436000 || Hiragana Pixel Party || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F3D00B032000 || God Wars The Complete Legend || EUR USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F45006A00000 || Oh...Sir! The Hollywood Roast || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F4500A47E000 || INSTANT TENNIS || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F4500AA4E000 || Slice, Dice &amp;amp; Rice || EUR JPN USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F490066A6000 || BILLIARD || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F4E006B32000 || The Men of Yoshiwara: Ohgiya || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100352006A10000 || Heroes of the Monkey Tavern Demo || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F5400AB6C000 || Alchemic Jousts || EUR USA || 5.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F55004AB8000 || Uurnog Uurnlimited || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F5800ABE8000 || Toki Tori（トキ・トリ） || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F5A008126000 || NBA Playgrounds - Enhanced Edition || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F5B007638000 || Pixel Action Heroes || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 010077B0038B2000 || LOST SPHEAR Demo || EUR JPN USA || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F6000BC6C000 || DRAGON BALL FIGHTERZ Open Beta || EUR JPN USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F6400A77E000 || カプコン ベルトアクション コレクション || JPN || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F6800910A000 || Hover || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F6A00A684000 || ひぐらしのなく頃に奉 || JPN || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F6C00641C000 || A.O.T. 2 || EUR || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 458752 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F6C00A016000 || Chicken Range || EUR || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F7000464A000 || Super Beat Sports™ || EUR JPN USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F770045CA000 || Time Recoil || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F78002040000 || Troll and I™ || EUR USA || 1.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F7800A434000 || Drawful 2 || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F7B002340000 || FIFA 18 || EUR JPN USA || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 458752 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F7B00595C000 || Tower Of Babel || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F7D00A1BC000 || NO THING || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F7F00AFA2000 || ACA NEOGEO THE SUPER SPY || EUR JPN USA || 4.0.0 || Digital || 0 || || Virtual Console&lt;br /&gt;
|-&lt;br /&gt;
| || Shaq Fu: A Legend Reborn (retail only) || || 5.0.0 || Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F8300A95C000 || Parallel || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F89003BC8000 || The Sexy Brutale || EUR USA || 3.0.1 || Digital || 0 65536 131072 196608 262144 327680 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F890078A8000 || Streets of Red - Devil&#039;s Dare Deluxe || USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F8900A5B0000 || The Way Remastered || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F8900ADC8000 || Beekyr Reloaded || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| || The Binding of Isaac: Afterbirth+ (retail only) || || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F8A00853C000 || Wandersong || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F8B00883C000 || 原始人 うぉーりあーず || JPN || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F8D0091F0000 || 迷宮の塔　トレジャーダンジョン　体験版 || JPN || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F8F0000A2000 || Splatoon™ 2 || EUR || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 458752 524288 589824 655360 720896 786432 851968 917504 983040 1048576 1114112 1179648 1245184 1310720 1376256 1441792 1507328 1572864 1638400 1703936 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F900046C4000 || Mercenary Kings Reloaded Edition || EUR JPN USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F900097EC000 || Tachyon Project || JPN || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F9100B04A000 || CLOSED NIGHTMARE || CHN || 4.0.0 || Digital / Cartridge || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F92005D54000 || Swim Out || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F93004288000 || Puzzle Adventure Blockle || EUR JPN USA || 1.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100F9A008AD6000 || Word Search by POWGI Demo || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FA100620C000 || 蒼の彼方のフォーリズム for Nintendo Switch || JPN || 3.0.1 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FA500B124000 || グレコからの挑戦状！計算の城とオバケたち　かけ算 || JPN || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100DDD0085A4000 || Sushi Striker™: The Way of Sushido || CHN EUR KOR USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FAA00B168000 || Hello Neighbor || EUR USA || 4.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FAF009562000 || Deep Ones || EUR USA || 3.0.1 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FB500631E000 || ATOMINE || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FBC007EAE000 || Tesla vs Lovecraft || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FC000AEF0000 || 死亡細胞 (Dead Cells) || CHN KOR || 4.0.0 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FC5009952000 || Pirates: All Aboard! || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FC5009E10000 || Holy Potatoes! A Weapon Shop?! || EUR USA || 4.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FCF002A58000 || Ultimate Chicken Horse || USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FD200A45A000 || Spheroids || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FDB0092B4000 || Where Are My Friends? || EUR USA || 4.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FDB00AA80000 || レイトン ミステリージャーニー カトリーエイルと大富豪の陰謀 DX || JPN || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FDF0083A6000 || Regalia: Of Men and Monarchs - Royal Edition || EUR USA || 4.0.0 || Digital || 0 131072 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FF00042EE000 || Lumo || EUR JPN USA || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FF1004D56000 || Ace of Seafood || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FF5005B76000 || STRIKERS1945 for Nintendo Switch || EUR JPN USA || 1.0.0 || Digital || 0 65536 131072 196608 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FF60051E2000 || SUPERBEAT XONiC EX || EUR || 3.0.1 || Digital / Cartridge || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FF700B96C000 || Snake vs Snake || EUR USA || 5.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FF8005EB2000 || Plague Road || EUR USA || 3.0.1 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FF9003F10000 || Splasher || EUR USA || 3.0.1 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100FFA0093E8000 || FIFA 19 || EUR JPN USA || 5.0.0 || Digital / Cartridge || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100C9800A454000 || GALAK-Z: Variant S || EUR USA || 4.0.0 || Digital || 0 || || Application / Game&lt;br /&gt;
|-&lt;br /&gt;
| 0100CB800B07E000 || NOT A HERO: SUPER SNAZZY EDITION || EUR USA || 5.0.0 || Digital || 0 65536 || || Application / Game&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Demos =&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! TitleID || Description || Region || Minimum Required OS || Distribution Method || Title Versions || Cartridge Description || Type&lt;br /&gt;
|-&lt;br /&gt;
| 0100618004096000 || Robonauts Demo || EUR USA || 3.0.1 || Digital || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 010021F004270000 || Spelunker Party! Demo Version || EUR USA || 3.0.1 || Digital || 0 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 010073C001D5E000 || Puyo Puyo Tetris Demo || USA || 1.0.0 || Digital / Cartridge || 0 131072 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100047009742000 || Twin Robots: Ultimate Edition Demo || EUR USA || 3.0.1 || Digital || 0 131072 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 01006BB009004000 || わくわくどうぶつランド　体験版 || CHN JPN KOR || 4.0.0 || Digital / Cartridge || 0 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100559004BB4000 || すみっコぐらし　すみっコパークへようこそ　体験版 || JPN || 3.0.1 || Digital / Cartridge || 0 131072 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 010053D0001BE000 || ぷよぷよ™テトリス®Ｓ 体験版 || CHN JPN || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100225000FEE000 || Blaster Master Zero Demo || EUR JPN USA || 1.0.0 || Digital || 0 65536 131072 196608 262144 327680 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100A6200851E000 || 超回転 寿司ストライカー The Way of Sushido 体験版 || CHN JPN || 4.0.0 || Digital / Cartridge || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 01009BF0072D4000 || 進め！キノピオ隊長　体験版 || CHN EUR JPN KOR USA || 4.0.0 || Digital / Cartridge || 0 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 01008DC004CBA000 || 王だぁランド！ 体験版 || JPN || 3.0.1 || Digital || 0 65536 131072 196608 262144 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 010095600AA36000 || Fill-a-Pix: Phil&#039;s Epic Adventure Demo || EUR USA || 4.0.0 || Digital || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100B3F000BE2000 || ポッ拳　POKKÉN TOURNAMENT DX 体験版 || CHN EUR JPN USA || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 01005AA00372A000 || UNO Demo || EUR JPN USA || 3.0.1 || Digital || 0 65536 131072 196608 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 010082600A234000 || アーバントライアル プレイグラウンド 体験版 || JPN || 4.0.0 || Digital / Cartridge || 0 131072 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 01000E2003FA0000 || MIGHTY GUNVOLT BURST Demo || EUR JPN USA || 1.0.0 || Digital || 0 65536 131072 196608 262144 327680 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 01001FA0034E2000 || Dark Witch Music Episode: Rudymical Demo || EUR JPN USA || 1.0.0 || Digital || 0 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 010031E00846A000 || タンブルストーン・デモ || JPN || 3.0.1 || Digital || 0 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100E4D00A690000 || PixelJunk® Monsters 2 Demo || EUR USA || 4.0.0 || Digital || 0 131072 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100F3D001DEE000 || Puyo Puyo™ Tetris® Demo || EUR || 1.0.0 || Digital / Cartridge || 0 131072 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100E5F0000C0000 || 魔界戦記ディスガイア5 体験版 || JPN || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 010077B0038B2000 || LOST SPHEAR Demo || EUR JPN USA || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 01007E3006DDA000 || Kirby™ Star Allies Demo || CHN EUR JPN KOR USA || 4.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100737003190000 || IMPLOSION 体験版 || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100112003B8A000 || Slime-san Demo || EUR USA || 1.0.0 || Digital || 0 65536 131072 196608 262144 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100AED003A60000 || プランテラ ガーデンライフ DXエディション 体験版 || JPN || 1.0.0 || Digital || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100E67008D84000 || 【体験版】Ultra Space Battle Brawl || EUR JPN USA || 4.0.0 || Digital || 0 131072 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 010083600AE9E000 || Happy Birthdays Demo || EUR USA || 4.0.0 || Digital / Cartridge || 0 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100F8D0091F0000 || 迷宮の塔　トレジャーダンジョン　体験版 || JPN || 3.0.1 || Digital || 0 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 01005F900416E000 || Pic-a-Pix Deluxe Demo || EUR USA || 3.0.1 || Digital || 0 131072 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100837006AF0000 || forma.8 体験版 || JPN || 3.0.1 || Digital || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 01009A5009A9E000 || Shining Resonance Refrain Demo || EUR USA || 4.0.0 || Digital / Cartridge || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100B0C0086B0000 || Mega Man 11 Demo || EUR JPN USA || 5.0.0 || Digital || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100D0B0093D8000 || トルクル(TorqueL) 物理調整版 デモ || EUR JPN USA || 3.0.1 || Digital || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100ACD009B6E000 || ポータルナイツ 体験版 || JPN || 4.0.0 || Digital / Cartridge || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100437004170000 || Portal Knights Demo || EUR USA || 3.0.1 || Digital / Cartridge || 0 131072 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 010016C009374000 || Lode Runner Legacy Demo Version || EUR JPN USA || 4.0.0 || Digital || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100322004844000 || Embers of Mirrim Demo || EUR USA || 3.0.1 || Digital || 0 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100A7F002830000 || VOEZ 体験版 || CHN EUR JPN KOR USA || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 01007D7001D0E000 || オーシャンホーン　体験版 || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100D06003056000 || Piczle Lines DX Demo || EUR JPN USA || 1.0.0 || Digital || 0 65536 131072 196608 262144 327680 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100CD3000BDC000 || ドラゴンクエストヒーローズI・II for Nintendo Switch 体験版 || JPN || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100C0A004C2C000 || Kid Tripp Demo || EUR USA || 3.0.1 || Digital || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100C88008BA6000 || Happy Birthdays 体験版 || JPN || 3.0.1 || Digital / Cartridge || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 01005FF002E2A000 || RAYMAN® LEGENDS: DEFINITIVE EDITION DEMO || CHN EUR KOR USA || 1.0.0 || Digital / Cartridge || 0 131072 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100E570051F0000 || PixelJunk モンスターズ 2　体験版 || JPN || 4.0.0 || Digital || 0 65536 131072 196608 262144 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 01000E10094D0000 || クリプト・オブ・ネクロダンサー体験版 || JPN || 3.0.1 || Digital || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100F9A008AD6000 || Word Search by POWGI Demo || EUR USA || 4.0.0 || Digital || 0 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 01009B500007C000 || ARMS Demo || CHN EUR JPN KOR USA || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 393216 458752 524288 589824 655360 720896 786432 851968 917504 983040 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100191006B98000 || ロロロロ　体験版 || JPN || 3.0.1 || Digital || 0 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 01001C9007614000 || Max: The Curse of Brotherhood (Demo) || EUR USA || 3.0.1 || Digital || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 01008FF004610000 || リーグ オブ イーブル　体験版 || JPN || 1.0.0 || Digital || 0 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100C3800049C000 || モンスターハンターダブルクロス™ Nintendo Switch Ver. 体験版 || JPN || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 262144 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100D03003F0E000 || Nine Parchments Demo || EUR JPN USA || 3.0.1 || Digital || 0 65536 131072 196608 262144 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 010072E00AAA2000 || モザイクアート Fill-a-Pix DELUXE 体験版 || JPN || 4.0.0 || Digital || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 010040A0065D2000 || 体験版デス！がるメタる！ || JPN || 3.0.1 || Digital / Cartridge || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 01007B5002F56000 || ドラゴンクエストビルダーズ　アレフガルドを復活せよ　体験版 || JPN || 3.0.1 || Digital / Cartridge || 0 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100704000B3A000 || いっしょにチョキッと スニッパーズ 体験版 || EUR JPN USA || 1.0.0 || Digital || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 01002CC0062B8000 || DEEMO 体験版 || CHN EUR JPN KOR USA || 3.0.1 || Digital || 0 65536 131072 196608 262144 327680 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100E8C004616000 || お絵かきパズル Pic-a-Pix Deluxe 体験版 || JPN || 3.0.1 || Digital || 0 131072 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 01002A2004530000 || ザ・ブリッジ・デモ || EUR JPN USA || 1.0.0 || Digital || 0 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 010079B0045C2000 || ソニックフォース体験版 || CHN JPN KOR || 1.0.0 || Digital / Cartridge || 0 131072 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 01005700031AE000 || Disgaea 5 Complete Demo || EUR USA || 1.0.0 || Digital / Cartridge || 0 65536 131072 196608 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100C3F000BD8000 || みんなでワイワイ！スペランカー 体験版 || JPN || 1.0.0 || Digital / Cartridge || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 0100352006A10000 || Heroes of the Monkey Tavern Demo || EUR USA || 3.0.1 || Digital || 0 65536 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 010077B0038B2000 || LOST SPHEAR Demo || EUR JPN USA || 3.0.1 || Digital / Cartridge || 0 65536 131072 196608 262144 327680 || || Demo&lt;br /&gt;
|-&lt;br /&gt;
| 01005C600AC68000 || Valkyria Chronicles 4 Demo || EUR USA || 5.0.0 || Digital / Cartridge || 0 || || Demo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= VersionList =&lt;br /&gt;
See [[VersionList]] for Nintendo Switch VersionList details.&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=HIPC&amp;diff=5167</id>
		<title>HIPC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=HIPC&amp;diff=5167"/>
		<updated>2018-10-07T22:29:54Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== IPC Command Structure ==&lt;br /&gt;
This is an array of u32&#039;s, usually located in [[Thread Local Storage]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 15-0 || [[#Type|Type]].&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 19-16 || Number of buf X descriptors (each: 2 words).&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 23-20 || Number of buf A descriptors (each: 3 words).&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 27-24 || Number of buf B descriptors (each: 3 words).&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 31-28 || Number of buf W desciptors (each: 3 words), not observed&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 9-0 || Size of raw data in u32s, plus 4&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 13-10 || Flags for buf C descriptor.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 30-20 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 31 || Enable handle descriptor.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Handle descriptor|Handle descriptor]], if enabled.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor X &amp;quot;Pointer&amp;quot;|Buf X descriptors]], each one 2 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot;|Buf A descriptors]], each one 3 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot;|Buf B descriptors]], each one 3 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot;|Type W descriptors]], each one 3 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Raw_data_section|Raw data section]] (including padding before and after aligned data section).&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor C &amp;quot;ReceiveList&amp;quot;|Buf C descriptors]], each one 2 words.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
First two header u32&#039;s and handle descriptor (if enabled) are copied as-is from one process to the other.&lt;br /&gt;
&lt;br /&gt;
=== Type ===&lt;br /&gt;
IPC commands can have different types which influence how the IPC server processes requests in &amp;quot;nn::sf::hipc::server::HipcServerSessionManagerBase::ProcessRequest&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;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#LegacyRequest, LegacyControl|LegacyRequest]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#Close|Close]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#LegacyRequest, LegacyControl|LegacyControl]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#Request, Control|Request]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Request, Control|Control]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [5.0.0+] [[#RequestWithContext, ControlWithContext|RequestWithContext]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [5.0.0+] [[#RequestWithContext, ControlWithContext|ControlWithContext]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Close ====&lt;br /&gt;
When processing a request of this type, the IPC server calls:&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::DestroyServerSession&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::CloseServerSessionHandle&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This ensures that the server session is destroyed internally and properly closed.&lt;br /&gt;
&lt;br /&gt;
==== LegacyRequest, LegacyControl ====&lt;br /&gt;
These types are handled by calling:&lt;br /&gt;
* &amp;quot;nn::sf::hipc::detail::HipcMessageBufferAccessor::ParseHeader&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::ProcessMessage&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::Reply&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::RegisterServerSessionToWaitBase&amp;quot;&lt;br /&gt;
&lt;br /&gt;
It is speculated that these are part of an older message processing system where headers were further partitioned.&lt;br /&gt;
&lt;br /&gt;
==== Request, Control ====&lt;br /&gt;
These types are handled by calling:&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::ProcessMessage2&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::RegisterServerSessionToWaitBase&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This represents a more modern message handling system where contents follow the general marshalling structure.&lt;br /&gt;
&lt;br /&gt;
==== RequestWithContext, ControlWithContext ====&lt;br /&gt;
These are identical to normal Request and Control types, but with the additional requirement of suppling a token in their [[#Data payload|data payload]].&lt;br /&gt;
&lt;br /&gt;
This token is used by &amp;quot;nn::sf::cmif::SetInlineContext&amp;quot; which has the sole purpose of saving it into the TLS in order for it to be distributed to any IPC commands that are made while processing the current command. It&#039;s unknown if this token serves any purpose or if it&#039;s just a debug-tool to figure out what IPC command caused a particular chain of commands.&lt;br /&gt;
&lt;br /&gt;
=== Handle descriptor ===&lt;br /&gt;
There can only be one of this descriptor type. It is enabled by bit31 of the second word.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Send current PID.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 4-1 || Number of handles to copy&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8-5 || Number of handles to move&lt;br /&gt;
|-&lt;br /&gt;
| ... || || 8-byte PID if enabled&lt;br /&gt;
|-&lt;br /&gt;
| ... || || Handles to copy&lt;br /&gt;
|-&lt;br /&gt;
| ... || || Handles to move&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sysmodules load the last u64 of rawdata when handling the PID. This is not written by kernel. For sysmodule handling:&lt;br /&gt;
* In some cases: these commands require a placeholder u64 value passed in the input parameters, as mentioned above. In these cases the OverwriteClientProcessId method is called to replace the value before it is used.&lt;br /&gt;
* In other cases: The rawdata_u64 is compared with the PID from the descriptor. On mismatch and when rawdata_u64!=0, error 0x60A is returned. The PID value passed to the cmdhandler vtable funcptr is the rawdata_u64.&lt;br /&gt;
&lt;br /&gt;
Handle 0 is allowed, and just means no handle was sent.&lt;br /&gt;
&lt;br /&gt;
=== Buffer descriptor X &amp;quot;Pointer&amp;quot; ===&lt;br /&gt;
This one is packed even worse than A, they inserted the bit38-36 of the address &#039;&#039;on top&#039;&#039; of the counter field.&lt;br /&gt;
&lt;br /&gt;
Officially, the counter is known as &amp;quot;receive index&amp;quot;. This one writes to the buffer described in the ReceiveList.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 5-0 || Bits 5-0 of counter.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8-6 || Bit 38-36 of address.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 11-9 || Bits 11-9 of counter.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 15-12 || Bit 35-32 of address.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 31-16 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Lower 32-bits of address.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot; ===&lt;br /&gt;
This packing is so unnecessarily complex.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Lower 32-bits of size.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Lower 32-bits of address.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1-0 || Flags. Always set to 0, 1 or 3.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4-2 || Bit 38-36 of address.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 27-24 || Bit 35-32 of size.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 31-28 || Bit 35-32 of address.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A reply must not use A/B/W, svcReplyAndReceive will return 0xE801.&lt;br /&gt;
&lt;br /&gt;
[[SVC|MemoryAttribute]] IsBorrowed and IsUncached are never allowed for the source address.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Send&amp;quot; means buffer is sent from source process into service process.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Receive&amp;quot; means that data is copied from service process into user process.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Exchange&amp;quot; means both &amp;quot;Send&amp;quot; and &amp;quot;Receive&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Flags ====&lt;br /&gt;
Determines what [[SVC|MemoryState]] to use with the mapped memory in the sysmodule.&lt;br /&gt;
&lt;br /&gt;
Used to enforce whether or not device mapping is allowed for src and dst buffers respectively.&lt;br /&gt;
 &lt;br /&gt;
* Flag0: Device mapping *not* allowed for src or dst.&lt;br /&gt;
* Flag1: Device mapping allowed for src and dst.&lt;br /&gt;
* Flag3: Device mapping allowed for src but not for dst.&lt;br /&gt;
&lt;br /&gt;
=== Buffer descriptor C &amp;quot;ReceiveList&amp;quot; ===&lt;br /&gt;
There&#039;s a 4-bit flag in the main header controlling the behavior of C descriptors.&lt;br /&gt;
&lt;br /&gt;
If it has value 0, the C descriptor functionality is disabled.&lt;br /&gt;
&lt;br /&gt;
If it has value 1, there is an &amp;quot;inlined&amp;quot; C buffer after the raw data. Received data is copied to ROUND_UP(cmdbuf+raw_size+index, 16)&lt;br /&gt;
&lt;br /&gt;
If it has value 2, there is a single C descriptor.&lt;br /&gt;
&lt;br /&gt;
Otherwise it has (flag-2) C descriptors. In this case, index picks which C descriptor to copy received data to [instead of picking the offset into the buffer].&lt;br /&gt;
&lt;br /&gt;
Data sent with this method must have MemoryState 0x4000000 mask set.&lt;br /&gt;
&lt;br /&gt;
After reply, X descriptors are written to the sender containing the address, size and index that were copied to.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Lower 32-bits of address.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 15-0 || Rest of address.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 31-16 || Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IPC buffers ===&lt;br /&gt;
Buffer descriptor A/B/... map memory into the sysmodule process. For the mapped memory in the sysmodule the permissions are: desc-A = R--, desc-B = RW-. The buffer is automatically unmapped while the kernel handles the cmdreply, the sysmodule doesn&#039;t need to specify anything in the cmdreply to trigger this.&lt;br /&gt;
&lt;br /&gt;
This memory is mapped in the sysmodule to the same vaddr from the original user-process cmd-request, except with with bits &amp;gt;=(~28(?)) changed to a different ASLR&#039;d region.&lt;br /&gt;
&lt;br /&gt;
No user-process-&amp;gt;sysmodule memcpy is done for outbufs, only sysmodule-&amp;gt;user-process.&lt;br /&gt;
&lt;br /&gt;
== Raw data section ==&lt;br /&gt;
[[File:Ipc msg buffer type a example.png|thumb|An example of an IPC message with a type 0xA buffer in it. Red is headers/descriptors, yellow is padding, and blue is data/buffer lengths. Note that the size of the u16 array for type A lengths is padded to fill up a whole word.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Description&lt;br /&gt;
|-&lt;br /&gt;
| ... || Padding to align to 16 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| ... || If sent to an object domain, a [[#Domain_message|domain message]], otherwise a [[#Data payload|data payload]]&lt;br /&gt;
|-&lt;br /&gt;
| ... || Padding&lt;br /&gt;
|-&lt;br /&gt;
| ... || Buffer type 0xA lengths (u16 array)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The total amount of padding within the raw data section is always 0x10 bytes. This means that if no padding is required before the message, there will be 0x10 bytes of padding after the message (before the buffer type 0xA lengths).&lt;br /&gt;
&lt;br /&gt;
=== Domain message ===&lt;br /&gt;
This header is used to wrap up requests sent to domains instead of sessions.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 7-0 || Command. 1=send message, 2=close virtual handle&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8-15 || Input object count&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 31-16 || Length of [[IPC_Marshalling#Data_payload|data payload]] in bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Object ID (from cmd 0 in [[IPC_Marshalling#Control|Control]]).&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 3 || || [5.0.0+] Token for (NewRequest only)&lt;br /&gt;
|-&lt;br /&gt;
| 4... || || [[#Data payload|Data payload]]&lt;br /&gt;
|-&lt;br /&gt;
| ... || || Input object IDs (u32s, not aligned)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Data payload ===&lt;br /&gt;
This is an array of u32&#039;s, but individual parameters are generally stored as u64&#039;s.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Magic (&amp;quot;SFCI&amp;quot; for requests, &amp;quot;SFCO&amp;quot; for responses) as u64.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Command id as u64 for requests, [[Error_codes|error code]] as u64 for responses.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [5.0.0+] Token (for NewRequest only, non-domain messages).&lt;br /&gt;
|-&lt;br /&gt;
| 4... || Input parameters or return values&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] A token value was introduced into raw_data+12 (regardless of domain or not, in either case it overlaps with padding).&lt;br /&gt;
&lt;br /&gt;
== Official marshalling code ==&lt;br /&gt;
The official marshalling function takes an array of (buf_ptr, size) pairs and a type-field for each such pair.&lt;br /&gt;
&lt;br /&gt;
Bitmask 0x10 seems to indicate null-terminated strings.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Type Mask || Description || Direction&lt;br /&gt;
|-&lt;br /&gt;
| 4 + 1 || Creates a A descriptor with flags=0. || In&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 + 4 + 1 || Creates a A descriptor with flags=1. || In&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 + 4 + 1 || Creates a A descriptor with flags=3. || In&lt;br /&gt;
|-&lt;br /&gt;
| 4 + 2 || Creates a B descriptor with flags=0. || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 + 4 + 2 || Creates a B descriptor with flags=1. || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 + 4 + 2 || Creates a B descriptor with flags=3. || Out&lt;br /&gt;
|-&lt;br /&gt;
| 8 + 1 || Creates an X descriptor || In&lt;br /&gt;
|-&lt;br /&gt;
| 8 + 2 || Creates a C descriptor, and writes the u16 size to an offset into raw data. || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + 8 + 2 || Creates a C descriptor || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 + 1 || Creates both an A and X descriptor || In&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 + 2 || Creates both an B and C descriptor || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 + 2 + 0x40 || Same as 0x20 + 2, except a certain value is set to hard-coded 0x1 instead. || Out&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
C and X (Pointer and ReceiveList) descriptors are backed by the &amp;quot;pointer buffer&amp;quot;, a buffer in the service process. Its size is a u16, which is retrieved using the &amp;quot;QueryPointerBufferSize&amp;quot; control message. If the client code determines all buffers with flag 8 do not fit in the pointer buffer, it returns error 0x11A0B.&lt;br /&gt;
&lt;br /&gt;
For buffers with flag 0x20 it creates two descriptors (A+X or B+C), but one descriptor is NULL (zero size and pointer), while the other holds the expected values. X/C descriptors are used as the non-NULL descriptor where possible, but if they don&#039;t fit in the pointer buffer, A/B descriptors are used instead. The code defers processing of type 0x20 buffers with sizes that fit in a u16 (and may therefore fit in the pointer buffer). This ensures all type 8 buffers get pointer-buffer space before any type 0x20.&lt;br /&gt;
&lt;br /&gt;
(The order in which the deferred type 0x20 buffers are processed is determined by a convoluted loop.)&lt;br /&gt;
&lt;br /&gt;
== Official IPC Cmd Structure ==&lt;br /&gt;
Official struct that is stored for each IPC command. It contains precalculated offsets for different portions of the command structure.&lt;br /&gt;
&lt;br /&gt;
All offsets are given is in number of u32 words.&lt;br /&gt;
&lt;br /&gt;
 struct IpcCmdStruct {&lt;br /&gt;
   u8  unk0;&lt;br /&gt;
   u8  has_handle_descriptor;&lt;br /&gt;
   u8  pad0[2];&lt;br /&gt;
   u32 cmd0;&lt;br /&gt;
   u32 cmd1;&lt;br /&gt;
   u32 offset_handle_descriptor;&lt;br /&gt;
   u32 pad1;&lt;br /&gt;
   u32 offset_handles;          &lt;br /&gt;
   u32 pad2;&lt;br /&gt;
   u32 offset_x_descriptors;&lt;br /&gt;
   u32 offset_a_descriptors;&lt;br /&gt;
   u32 offset_b_descriptors;&lt;br /&gt;
   u32 offset_w_descriptors; /* this is a guess */&lt;br /&gt;
   u32 offset_raw_data;&lt;br /&gt;
   u32 offset_c_descriptors;&lt;br /&gt;
   u32 unk2;&lt;br /&gt;
   u32 unk3;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Control ==&lt;br /&gt;
When type == 5 you are talking to the IPC manager. These are processed by the sysmodule.&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 || Arguments || Output&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ConvertCurrentObjectToDomain || None || u32 CmifDomainObjectId&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CopyFromCurrentDomain || u32 CmifDomainObjectId || u32 NativeHandle&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CloneCurrentObject || None || u32 NativeHandle&lt;br /&gt;
|-&lt;br /&gt;
| 3 || QueryPointerBufferSize || None || u16 size&lt;br /&gt;
|-&lt;br /&gt;
| 4 || CloneCurrentObjectEx || u32 unknown || u32 NativeHandle&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=HIPC&amp;diff=5166</id>
		<title>HIPC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=HIPC&amp;diff=5166"/>
		<updated>2018-10-07T22:11:40Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: our raw data != their raw data, prove me wrong with an IPC packet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== IPC Command Structure ==&lt;br /&gt;
This is an array of u32&#039;s, usually located in [[Thread Local Storage]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 15-0 || [[#Type|Type]].&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 19-16 || Number of buf X descriptors (each: 2 words).&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 23-20 || Number of buf A descriptors (each: 3 words).&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 27-24 || Number of buf B descriptors (each: 3 words).&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 31-28 || Number of buf W desciptors (each: 3 words), not observed&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 9-0 || Size of IPC packet in u32s.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 13-10 || Flags for buf C descriptor.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 30-20 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 31 || Enable handle descriptor.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Handle descriptor|Handle descriptor]], if enabled.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor X &amp;quot;Pointer&amp;quot;|Buf X descriptors]], each one 2 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot;|Buf A descriptors]], each one 3 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot;|Buf B descriptors]], each one 3 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot;|Type W descriptors]], each one 3 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Raw_data_section|Raw data section]] (including padding before and after aligned data section).&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor C &amp;quot;ReceiveList&amp;quot;|Buf C descriptors]], each one 2 words.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
First two header u32&#039;s and handle descriptor (if enabled) are copied as-is from one process to the other.&lt;br /&gt;
&lt;br /&gt;
=== Type ===&lt;br /&gt;
IPC commands can have different types which influence how the IPC server processes requests in &amp;quot;nn::sf::hipc::server::HipcServerSessionManagerBase::ProcessRequest&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;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#LegacyRequest, LegacyControl|LegacyRequest]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#Close|Close]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#LegacyRequest, LegacyControl|LegacyControl]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#Request, Control|Request]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Request, Control|Control]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [5.0.0+] [[#RequestWithContext, ControlWithContext|RequestWithContext]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [5.0.0+] [[#RequestWithContext, ControlWithContext|ControlWithContext]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Close ====&lt;br /&gt;
When processing a request of this type, the IPC server calls:&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::DestroyServerSession&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::CloseServerSessionHandle&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This ensures that the server session is destroyed internally and properly closed.&lt;br /&gt;
&lt;br /&gt;
==== LegacyRequest, LegacyControl ====&lt;br /&gt;
These types are handled by calling:&lt;br /&gt;
* &amp;quot;nn::sf::hipc::detail::HipcMessageBufferAccessor::ParseHeader&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::ProcessMessage&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::Reply&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::RegisterServerSessionToWaitBase&amp;quot;&lt;br /&gt;
&lt;br /&gt;
It is speculated that these are part of an older message processing system where headers were further partitioned.&lt;br /&gt;
&lt;br /&gt;
==== Request, Control ====&lt;br /&gt;
These types are handled by calling:&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::ProcessMessage2&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::RegisterServerSessionToWaitBase&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This represents a more modern message handling system where contents follow the general marshalling structure.&lt;br /&gt;
&lt;br /&gt;
==== RequestWithContext, ControlWithContext ====&lt;br /&gt;
These are identical to normal Request and Control types, but with the additional requirement of suppling a token in their [[#Data payload|data payload]].&lt;br /&gt;
&lt;br /&gt;
This token is used by &amp;quot;nn::sf::cmif::SetInlineContext&amp;quot; which has the sole purpose of saving it into the TLS in order for it to be distributed to any IPC commands that are made while processing the current command. It&#039;s unknown if this token serves any purpose or if it&#039;s just a debug-tool to figure out what IPC command caused a particular chain of commands.&lt;br /&gt;
&lt;br /&gt;
=== Handle descriptor ===&lt;br /&gt;
There can only be one of this descriptor type. It is enabled by bit31 of the second word.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Send current PID.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 4-1 || Number of handles to copy&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8-5 || Number of handles to move&lt;br /&gt;
|-&lt;br /&gt;
| ... || || 8-byte PID if enabled&lt;br /&gt;
|-&lt;br /&gt;
| ... || || Handles to copy&lt;br /&gt;
|-&lt;br /&gt;
| ... || || Handles to move&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sysmodules load the last u64 of rawdata when handling the PID. This is not written by kernel. For sysmodule handling:&lt;br /&gt;
* In some cases: these commands require a placeholder u64 value passed in the input parameters, as mentioned above. In these cases the OverwriteClientProcessId method is called to replace the value before it is used.&lt;br /&gt;
* In other cases: The rawdata_u64 is compared with the PID from the descriptor. On mismatch and when rawdata_u64!=0, error 0x60A is returned. The PID value passed to the cmdhandler vtable funcptr is the rawdata_u64.&lt;br /&gt;
&lt;br /&gt;
Handle 0 is allowed, and just means no handle was sent.&lt;br /&gt;
&lt;br /&gt;
=== Buffer descriptor X &amp;quot;Pointer&amp;quot; ===&lt;br /&gt;
This one is packed even worse than A, they inserted the bit38-36 of the address &#039;&#039;on top&#039;&#039; of the counter field.&lt;br /&gt;
&lt;br /&gt;
Officially, the counter is known as &amp;quot;receive index&amp;quot;. This one writes to the buffer described in the ReceiveList.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 5-0 || Bits 5-0 of counter.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8-6 || Bit 38-36 of address.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 11-9 || Bits 11-9 of counter.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 15-12 || Bit 35-32 of address.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 31-16 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Lower 32-bits of address.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot; ===&lt;br /&gt;
This packing is so unnecessarily complex.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Lower 32-bits of size.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Lower 32-bits of address.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1-0 || Flags. Always set to 0, 1 or 3.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4-2 || Bit 38-36 of address.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 27-24 || Bit 35-32 of size.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 31-28 || Bit 35-32 of address.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A reply must not use A/B/W, svcReplyAndReceive will return 0xE801.&lt;br /&gt;
&lt;br /&gt;
[[SVC|MemoryAttribute]] IsBorrowed and IsUncached are never allowed for the source address.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Send&amp;quot; means buffer is sent from source process into service process.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Receive&amp;quot; means that data is copied from service process into user process.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Exchange&amp;quot; means both &amp;quot;Send&amp;quot; and &amp;quot;Receive&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Flags ====&lt;br /&gt;
Determines what [[SVC|MemoryState]] to use with the mapped memory in the sysmodule.&lt;br /&gt;
&lt;br /&gt;
Used to enforce whether or not device mapping is allowed for src and dst buffers respectively.&lt;br /&gt;
 &lt;br /&gt;
* Flag0: Device mapping *not* allowed for src or dst.&lt;br /&gt;
* Flag1: Device mapping allowed for src and dst.&lt;br /&gt;
* Flag3: Device mapping allowed for src but not for dst.&lt;br /&gt;
&lt;br /&gt;
=== Buffer descriptor C &amp;quot;ReceiveList&amp;quot; ===&lt;br /&gt;
There&#039;s a 4-bit flag in the main header controlling the behavior of C descriptors.&lt;br /&gt;
&lt;br /&gt;
If it has value 0, the C descriptor functionality is disabled.&lt;br /&gt;
&lt;br /&gt;
If it has value 1, there is an &amp;quot;inlined&amp;quot; C buffer after the raw data. Received data is copied to ROUND_UP(cmdbuf+raw_size+index, 16)&lt;br /&gt;
&lt;br /&gt;
If it has value 2, there is a single C descriptor.&lt;br /&gt;
&lt;br /&gt;
Otherwise it has (flag-2) C descriptors. In this case, index picks which C descriptor to copy received data to [instead of picking the offset into the buffer].&lt;br /&gt;
&lt;br /&gt;
Data sent with this method must have MemoryState 0x4000000 mask set.&lt;br /&gt;
&lt;br /&gt;
After reply, X descriptors are written to the sender containing the address, size and index that were copied to.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Lower 32-bits of address.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 15-0 || Rest of address.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 31-16 || Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IPC buffers ===&lt;br /&gt;
Buffer descriptor A/B/... map memory into the sysmodule process. For the mapped memory in the sysmodule the permissions are: desc-A = R--, desc-B = RW-. The buffer is automatically unmapped while the kernel handles the cmdreply, the sysmodule doesn&#039;t need to specify anything in the cmdreply to trigger this.&lt;br /&gt;
&lt;br /&gt;
This memory is mapped in the sysmodule to the same vaddr from the original user-process cmd-request, except with with bits &amp;gt;=(~28(?)) changed to a different ASLR&#039;d region.&lt;br /&gt;
&lt;br /&gt;
No user-process-&amp;gt;sysmodule memcpy is done for outbufs, only sysmodule-&amp;gt;user-process.&lt;br /&gt;
&lt;br /&gt;
== Raw data section ==&lt;br /&gt;
[[File:Ipc msg buffer type a example.png|thumb|An example of an IPC message with a type 0xA buffer in it. Red is headers/descriptors, yellow is padding, and blue is data/buffer lengths. Note that the size of the u16 array for type A lengths is padded to fill up a whole word.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Description&lt;br /&gt;
|-&lt;br /&gt;
| ... || Padding to align to 16 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| ... || If sent to an object domain, a [[#Domain_message|domain message]], otherwise a [[#Data payload|data payload]]&lt;br /&gt;
|-&lt;br /&gt;
| ... || Padding&lt;br /&gt;
|-&lt;br /&gt;
| ... || Buffer type 0xA lengths (u16 array)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The total amount of padding within the raw data section is always 0x10 bytes. This means that if no padding is required before the message, there will be 0x10 bytes of padding after the message (before the buffer type 0xA lengths).&lt;br /&gt;
&lt;br /&gt;
=== Domain message ===&lt;br /&gt;
This header is used to wrap up requests sent to domains instead of sessions.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 7-0 || Command. 1=send message, 2=close virtual handle&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8-15 || Input object count&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 31-16 || Length of [[IPC_Marshalling#Data_payload|data payload]] in bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Object ID (from cmd 0 in [[IPC_Marshalling#Control|Control]]).&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 3 || || [5.0.0+] Token for (NewRequest only)&lt;br /&gt;
|-&lt;br /&gt;
| 4... || || [[#Data payload|Data payload]]&lt;br /&gt;
|-&lt;br /&gt;
| ... || || Input object IDs (u32s, not aligned)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Data payload ===&lt;br /&gt;
This is an array of u32&#039;s, but individual parameters are generally stored as u64&#039;s.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Magic (&amp;quot;SFCI&amp;quot; for requests, &amp;quot;SFCO&amp;quot; for responses) as u64.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Command id as u64 for requests, [[Error_codes|error code]] as u64 for responses.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [5.0.0+] Token (for NewRequest only, non-domain messages).&lt;br /&gt;
|-&lt;br /&gt;
| 4... || Input parameters or return values&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] A token value was introduced into raw_data+12 (regardless of domain or not, in either case it overlaps with padding).&lt;br /&gt;
&lt;br /&gt;
== Official marshalling code ==&lt;br /&gt;
The official marshalling function takes an array of (buf_ptr, size) pairs and a type-field for each such pair.&lt;br /&gt;
&lt;br /&gt;
Bitmask 0x10 seems to indicate null-terminated strings.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Type Mask || Description || Direction&lt;br /&gt;
|-&lt;br /&gt;
| 4 + 1 || Creates a A descriptor with flags=0. || In&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 + 4 + 1 || Creates a A descriptor with flags=1. || In&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 + 4 + 1 || Creates a A descriptor with flags=3. || In&lt;br /&gt;
|-&lt;br /&gt;
| 4 + 2 || Creates a B descriptor with flags=0. || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 + 4 + 2 || Creates a B descriptor with flags=1. || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 + 4 + 2 || Creates a B descriptor with flags=3. || Out&lt;br /&gt;
|-&lt;br /&gt;
| 8 + 1 || Creates an X descriptor || In&lt;br /&gt;
|-&lt;br /&gt;
| 8 + 2 || Creates a C descriptor, and writes the u16 size to an offset into raw data. || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + 8 + 2 || Creates a C descriptor || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 + 1 || Creates both an A and X descriptor || In&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 + 2 || Creates both an B and C descriptor || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 + 2 + 0x40 || Same as 0x20 + 2, except a certain value is set to hard-coded 0x1 instead. || Out&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
C and X (Pointer and ReceiveList) descriptors are backed by the &amp;quot;pointer buffer&amp;quot;, a buffer in the service process. Its size is a u16, which is retrieved using the &amp;quot;QueryPointerBufferSize&amp;quot; control message. If the client code determines all buffers with flag 8 do not fit in the pointer buffer, it returns error 0x11A0B.&lt;br /&gt;
&lt;br /&gt;
For buffers with flag 0x20 it creates two descriptors (A+X or B+C), but one descriptor is NULL (zero size and pointer), while the other holds the expected values. X/C descriptors are used as the non-NULL descriptor where possible, but if they don&#039;t fit in the pointer buffer, A/B descriptors are used instead. The code defers processing of type 0x20 buffers with sizes that fit in a u16 (and may therefore fit in the pointer buffer). This ensures all type 8 buffers get pointer-buffer space before any type 0x20.&lt;br /&gt;
&lt;br /&gt;
(The order in which the deferred type 0x20 buffers are processed is determined by a convoluted loop.)&lt;br /&gt;
&lt;br /&gt;
== Official IPC Cmd Structure ==&lt;br /&gt;
Official struct that is stored for each IPC command. It contains precalculated offsets for different portions of the command structure.&lt;br /&gt;
&lt;br /&gt;
All offsets are given is in number of u32 words.&lt;br /&gt;
&lt;br /&gt;
 struct IpcCmdStruct {&lt;br /&gt;
   u8  unk0;&lt;br /&gt;
   u8  has_handle_descriptor;&lt;br /&gt;
   u8  pad0[2];&lt;br /&gt;
   u32 cmd0;&lt;br /&gt;
   u32 cmd1;&lt;br /&gt;
   u32 offset_handle_descriptor;&lt;br /&gt;
   u32 pad1;&lt;br /&gt;
   u32 offset_handles;          &lt;br /&gt;
   u32 pad2;&lt;br /&gt;
   u32 offset_x_descriptors;&lt;br /&gt;
   u32 offset_a_descriptors;&lt;br /&gt;
   u32 offset_b_descriptors;&lt;br /&gt;
   u32 offset_w_descriptors; /* this is a guess */&lt;br /&gt;
   u32 offset_raw_data;&lt;br /&gt;
   u32 offset_c_descriptors;&lt;br /&gt;
   u32 unk2;&lt;br /&gt;
   u32 unk3;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Control ==&lt;br /&gt;
When type == 5 you are talking to the IPC manager. These are processed by the sysmodule.&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 || Arguments || Output&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ConvertCurrentObjectToDomain || None || u32 CmifDomainObjectId&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CopyFromCurrentDomain || u32 CmifDomainObjectId || u32 NativeHandle&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CloneCurrentObject || None || u32 NativeHandle&lt;br /&gt;
|-&lt;br /&gt;
| 3 || QueryPointerBufferSize || None || u16 size&lt;br /&gt;
|-&lt;br /&gt;
| 4 || CloneCurrentObjectEx || u32 unknown || u32 NativeHandle&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=HIPC&amp;diff=5164</id>
		<title>HIPC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=HIPC&amp;diff=5164"/>
		<updated>2018-10-07T22:02:47Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: oops it was a B, still&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== IPC Command Structure ==&lt;br /&gt;
This is an array of u32&#039;s, usually located in [[Thread Local Storage]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 15-0 || [[#Type|Type]].&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 19-16 || Number of buf X descriptors (each: 2 words).&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 23-20 || Number of buf A descriptors (each: 3 words).&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 27-24 || Number of buf B descriptors (each: 3 words).&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 31-28 || Number of buf W desciptors (each: 3 words), not observed&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 9-0 || Size of IPC packet in u32s.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 13-10 || Flags for buf C descriptor.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 30-20 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 31 || Enable handle descriptor.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Handle descriptor|Handle descriptor]], if enabled.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor X &amp;quot;Pointer&amp;quot;|Buf X descriptors]], each one 2 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot;|Buf A descriptors]], each one 3 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot;|Buf B descriptors]], each one 3 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot;|Type W descriptors]], each one 3 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Raw_data_section|Raw data section]] (including padding before and after aligned data section).&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor C &amp;quot;ReceiveList&amp;quot;|Buf C descriptors]], each one 2 words.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
First two header u32&#039;s and handle descriptor (if enabled) are copied as-is from one process to the other.&lt;br /&gt;
&lt;br /&gt;
=== Type ===&lt;br /&gt;
IPC commands can have different types which influence how the IPC server processes requests in &amp;quot;nn::sf::hipc::server::HipcServerSessionManagerBase::ProcessRequest&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;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#LegacyRequest, LegacyControl|LegacyRequest]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#Close|Close]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#LegacyRequest, LegacyControl|LegacyControl]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#Request, Control|Request]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Request, Control|Control]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [5.0.0+] [[#RequestWithContext, ControlWithContext|RequestWithContext]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [5.0.0+] [[#RequestWithContext, ControlWithContext|ControlWithContext]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Close ====&lt;br /&gt;
When processing a request of this type, the IPC server calls:&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::DestroyServerSession&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::CloseServerSessionHandle&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This ensures that the server session is destroyed internally and properly closed.&lt;br /&gt;
&lt;br /&gt;
==== LegacyRequest, LegacyControl ====&lt;br /&gt;
These types are handled by calling:&lt;br /&gt;
* &amp;quot;nn::sf::hipc::detail::HipcMessageBufferAccessor::ParseHeader&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::ProcessMessage&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::Reply&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::RegisterServerSessionToWaitBase&amp;quot;&lt;br /&gt;
&lt;br /&gt;
It is speculated that these are part of an older message processing system where headers were further partitioned.&lt;br /&gt;
&lt;br /&gt;
==== Request, Control ====&lt;br /&gt;
These types are handled by calling:&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::ProcessMessage2&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::RegisterServerSessionToWaitBase&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This represents a more modern message handling system where contents follow the general marshalling structure.&lt;br /&gt;
&lt;br /&gt;
==== RequestWithContext, ControlWithContext ====&lt;br /&gt;
These are identical to normal Request and Control types, but with the additional requirement of suppling a token in their [[#Data payload|data payload]].&lt;br /&gt;
&lt;br /&gt;
This token is used by &amp;quot;nn::sf::cmif::SetInlineContext&amp;quot; which has the sole purpose of saving it into the TLS in order for it to be distributed to any IPC commands that are made while processing the current command. It&#039;s unknown if this token serves any purpose or if it&#039;s just a debug-tool to figure out what IPC command caused a particular chain of commands.&lt;br /&gt;
&lt;br /&gt;
=== Handle descriptor ===&lt;br /&gt;
There can only be one of this descriptor type. It is enabled by bit31 of the second word.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Send current PID.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 4-1 || Number of handles to copy&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8-5 || Number of handles to move&lt;br /&gt;
|-&lt;br /&gt;
| ... || || 8-byte PID if enabled&lt;br /&gt;
|-&lt;br /&gt;
| ... || || Handles to copy&lt;br /&gt;
|-&lt;br /&gt;
| ... || || Handles to move&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sysmodules load the last u64 of rawdata when handling the PID. This is not written by kernel. For sysmodule handling:&lt;br /&gt;
* In some cases: these commands require a placeholder u64 value passed in the input parameters, as mentioned above. In these cases the OverwriteClientProcessId method is called to replace the value before it is used.&lt;br /&gt;
* In other cases: The rawdata_u64 is compared with the PID from the descriptor. On mismatch and when rawdata_u64!=0, error 0x60A is returned. The PID value passed to the cmdhandler vtable funcptr is the rawdata_u64.&lt;br /&gt;
&lt;br /&gt;
Handle 0 is allowed, and just means no handle was sent.&lt;br /&gt;
&lt;br /&gt;
=== Buffer descriptor X &amp;quot;Pointer&amp;quot; ===&lt;br /&gt;
This one is packed even worse than A, they inserted the bit38-36 of the address &#039;&#039;on top&#039;&#039; of the counter field.&lt;br /&gt;
&lt;br /&gt;
Officially, the counter is known as &amp;quot;receive index&amp;quot;. This one writes to the buffer described in the ReceiveList.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 5-0 || Bits 5-0 of counter.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8-6 || Bit 38-36 of address.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 11-9 || Bits 11-9 of counter.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 15-12 || Bit 35-32 of address.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 31-16 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Lower 32-bits of address.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot; ===&lt;br /&gt;
This packing is so unnecessarily complex.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Lower 32-bits of size.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Lower 32-bits of address.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1-0 || Flags. Always set to 0, 1 or 3.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4-2 || Bit 38-36 of address.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 27-24 || Bit 35-32 of size.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 31-28 || Bit 35-32 of address.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A reply must not use A/B/W, svcReplyAndReceive will return 0xE801.&lt;br /&gt;
&lt;br /&gt;
[[SVC|MemoryAttribute]] IsBorrowed and IsUncached are never allowed for the source address.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Send&amp;quot; means buffer is sent from source process into service process.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Receive&amp;quot; means that data is copied from service process into user process.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Exchange&amp;quot; means both &amp;quot;Send&amp;quot; and &amp;quot;Receive&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Flags ====&lt;br /&gt;
Determines what [[SVC|MemoryState]] to use with the mapped memory in the sysmodule.&lt;br /&gt;
&lt;br /&gt;
Used to enforce whether or not device mapping is allowed for src and dst buffers respectively.&lt;br /&gt;
 &lt;br /&gt;
* Flag0: Device mapping *not* allowed for src or dst.&lt;br /&gt;
* Flag1: Device mapping allowed for src and dst.&lt;br /&gt;
* Flag3: Device mapping allowed for src but not for dst.&lt;br /&gt;
&lt;br /&gt;
=== Buffer descriptor C &amp;quot;ReceiveList&amp;quot; ===&lt;br /&gt;
There&#039;s a 4-bit flag in the main header controlling the behavior of C descriptors.&lt;br /&gt;
&lt;br /&gt;
If it has value 0, the C descriptor functionality is disabled.&lt;br /&gt;
&lt;br /&gt;
If it has value 1, there is an &amp;quot;inlined&amp;quot; C buffer after the raw data. Received data is copied to ROUND_UP(cmdbuf+raw_size+index, 16)&lt;br /&gt;
&lt;br /&gt;
If it has value 2, there is a single C descriptor.&lt;br /&gt;
&lt;br /&gt;
Otherwise it has (flag-2) C descriptors. In this case, index picks which C descriptor to copy received data to [instead of picking the offset into the buffer].&lt;br /&gt;
&lt;br /&gt;
Data sent with this method must have MemoryState 0x4000000 mask set.&lt;br /&gt;
&lt;br /&gt;
After reply, X descriptors are written to the sender containing the address, size and index that were copied to.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Lower 32-bits of address.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 15-0 || Rest of address.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 31-16 || Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IPC buffers ===&lt;br /&gt;
Buffer descriptor A/B/... map memory into the sysmodule process. For the mapped memory in the sysmodule the permissions are: desc-A = R--, desc-B = RW-. The buffer is automatically unmapped while the kernel handles the cmdreply, the sysmodule doesn&#039;t need to specify anything in the cmdreply to trigger this.&lt;br /&gt;
&lt;br /&gt;
This memory is mapped in the sysmodule to the same vaddr from the original user-process cmd-request, except with with bits &amp;gt;=(~28(?)) changed to a different ASLR&#039;d region.&lt;br /&gt;
&lt;br /&gt;
No user-process-&amp;gt;sysmodule memcpy is done for outbufs, only sysmodule-&amp;gt;user-process.&lt;br /&gt;
&lt;br /&gt;
== Raw data section ==&lt;br /&gt;
[[File:Ipc msg buffer type a example.png|thumb|An example of an IPC message with a type 0xA buffer in it. Red is headers/descriptors, yellow is padding, and blue is data/buffer lengths. Note that the size of the u16 array for type A lengths is padded to fill up a whole word.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Description&lt;br /&gt;
|-&lt;br /&gt;
| ... || Padding to align to 16 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| ... || If sent to an object domain, a [[#Domain_message|domain message]], otherwise a [[#Data payload|data payload]]&lt;br /&gt;
|-&lt;br /&gt;
| ... || Padding&lt;br /&gt;
|-&lt;br /&gt;
| ... || Buffer type 0xA lengths (u16 array)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The total amount of padding within the raw data section is always 0x10 bytes. This means that if no padding is required before the message, there will be 0x10 bytes of padding after the message (before the buffer type 0xA lengths).&lt;br /&gt;
&lt;br /&gt;
=== Domain message ===&lt;br /&gt;
This header is used to wrap up requests sent to domains instead of sessions.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 7-0 || Command. 1=send message, 2=close virtual handle&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8-15 || Input object count&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 31-16 || Length of [[IPC_Marshalling#Data_payload|data payload]] in bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Object ID (from cmd 0 in [[IPC_Marshalling#Control|Control]]).&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 3 || || [5.0.0+] Token for (NewRequest only)&lt;br /&gt;
|-&lt;br /&gt;
| 4... || || [[#Data payload|Data payload]]&lt;br /&gt;
|-&lt;br /&gt;
| ... || || Input object IDs (u32s, not aligned)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Data payload ===&lt;br /&gt;
This is an array of u32&#039;s, but individual parameters are generally stored as u64&#039;s.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Magic (&amp;quot;SFCI&amp;quot; for requests, &amp;quot;SFCO&amp;quot; for responses) as u64.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Command id as u64 for requests, [[Error_codes|error code]] as u64 for responses.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [5.0.0+] Token (for NewRequest only, non-domain messages).&lt;br /&gt;
|-&lt;br /&gt;
| 4... || Input parameters or return values&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] A token value was introduced into raw_data+12 (regardless of domain or not, in either case it overlaps with padding).&lt;br /&gt;
&lt;br /&gt;
== Official marshalling code ==&lt;br /&gt;
The official marshalling function takes an array of (buf_ptr, size) pairs and a type-field for each such pair.&lt;br /&gt;
&lt;br /&gt;
Bitmask 0x10 seems to indicate null-terminated strings.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Type Mask || Description || Direction&lt;br /&gt;
|-&lt;br /&gt;
| 4 + 1 || Creates a A descriptor with flags=0. || In&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 + 4 + 1 || Creates a A descriptor with flags=1. || In&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 + 4 + 1 || Creates a A descriptor with flags=3. || In&lt;br /&gt;
|-&lt;br /&gt;
| 4 + 2 || Creates a B descriptor with flags=0. || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 + 4 + 2 || Creates a B descriptor with flags=1. || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 + 4 + 2 || Creates a B descriptor with flags=3. || Out&lt;br /&gt;
|-&lt;br /&gt;
| 8 + 1 || Creates an X descriptor || In&lt;br /&gt;
|-&lt;br /&gt;
| 8 + 2 || Creates a C descriptor, and writes the u16 size to an offset into raw data. || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + 8 + 2 || Creates a C descriptor || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 + 1 || Creates both an A and X descriptor || In&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 + 2 || Creates both an B and C descriptor || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 + 2 + 0x40 || Same as 0x20 + 2, except a certain value is set to hard-coded 0x1 instead. || Out&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
C and X (Pointer and ReceiveList) descriptors are backed by the &amp;quot;pointer buffer&amp;quot;, a buffer in the service process. Its size is a u16, which is retrieved using the &amp;quot;QueryPointerBufferSize&amp;quot; control message. If the client code determines all buffers with flag 8 do not fit in the pointer buffer, it returns error 0x11A0B.&lt;br /&gt;
&lt;br /&gt;
For buffers with flag 0x20 it creates two descriptors (A+X or B+C), but one descriptor is NULL (zero size and pointer), while the other holds the expected values. X/C descriptors are used as the non-NULL descriptor where possible, but if they don&#039;t fit in the pointer buffer, A/B descriptors are used instead. The code defers processing of type 0x20 buffers with sizes that fit in a u16 (and may therefore fit in the pointer buffer). This ensures all type 8 buffers get pointer-buffer space before any type 0x20.&lt;br /&gt;
&lt;br /&gt;
(The order in which the deferred type 0x20 buffers are processed is determined by a convoluted loop.)&lt;br /&gt;
&lt;br /&gt;
== Official IPC Cmd Structure ==&lt;br /&gt;
Official struct that is stored for each IPC command. It contains precalculated offsets for different portions of the command structure.&lt;br /&gt;
&lt;br /&gt;
All offsets are given is in number of u32 words.&lt;br /&gt;
&lt;br /&gt;
 struct IpcCmdStruct {&lt;br /&gt;
   u8  unk0;&lt;br /&gt;
   u8  has_handle_descriptor;&lt;br /&gt;
   u8  pad0[2];&lt;br /&gt;
   u32 cmd0;&lt;br /&gt;
   u32 cmd1;&lt;br /&gt;
   u32 offset_handle_descriptor;&lt;br /&gt;
   u32 pad1;&lt;br /&gt;
   u32 offset_handles;          &lt;br /&gt;
   u32 pad2;&lt;br /&gt;
   u32 offset_x_descriptors;&lt;br /&gt;
   u32 offset_a_descriptors;&lt;br /&gt;
   u32 offset_b_descriptors;&lt;br /&gt;
   u32 offset_w_descriptors; /* this is a guess */&lt;br /&gt;
   u32 offset_raw_data;&lt;br /&gt;
   u32 offset_c_descriptors;&lt;br /&gt;
   u32 unk2;&lt;br /&gt;
   u32 unk3;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Control ==&lt;br /&gt;
When type == 5 you are talking to the IPC manager. These are processed by the sysmodule.&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 || Arguments || Output&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ConvertCurrentObjectToDomain || None || u32 CmifDomainObjectId&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CopyFromCurrentDomain || u32 CmifDomainObjectId || u32 NativeHandle&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CloneCurrentObject || None || u32 NativeHandle&lt;br /&gt;
|-&lt;br /&gt;
| 3 || QueryPointerBufferSize || None || u16 size&lt;br /&gt;
|-&lt;br /&gt;
| 4 || CloneCurrentObjectEx || u32 unknown || u32 NativeHandle&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=HIPC&amp;diff=5163</id>
		<title>HIPC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=HIPC&amp;diff=5163"/>
		<updated>2018-10-07T21:57:48Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: I&amp;#039;m literally looking at this rn, field changes w/ addition of W desc despite same data section size https://gist.github.com/shinyquagsire23/4801b63bceec302932b4bed1bfdaacfc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== IPC Command Structure ==&lt;br /&gt;
This is an array of u32&#039;s, usually located in [[Thread Local Storage]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 15-0 || [[#Type|Type]].&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 19-16 || Number of buf X descriptors (each: 2 words).&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 23-20 || Number of buf A descriptors (each: 3 words).&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 27-24 || Number of buf B descriptors (each: 3 words).&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 31-28 || Number of buf W desciptors (each: 3 words).&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 9-0 || Size of IPC packet in u32s.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 13-10 || Flags for buf C descriptor.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 30-20 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 31 || Enable handle descriptor.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Handle descriptor|Handle descriptor]], if enabled.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor X &amp;quot;Pointer&amp;quot;|Buf X descriptors]], each one 2 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot;|Buf A descriptors]], each one 3 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot;|Buf B descriptors]], each one 3 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot;|Type W descriptors]], each one 3 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Raw_data_section|Raw data section]] (including padding before and after aligned data section).&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor C &amp;quot;ReceiveList&amp;quot;|Buf C descriptors]], each one 2 words.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
First two header u32&#039;s and handle descriptor (if enabled) are copied as-is from one process to the other.&lt;br /&gt;
&lt;br /&gt;
=== Type ===&lt;br /&gt;
IPC commands can have different types which influence how the IPC server processes requests in &amp;quot;nn::sf::hipc::server::HipcServerSessionManagerBase::ProcessRequest&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;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#LegacyRequest, LegacyControl|LegacyRequest]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#Close|Close]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#LegacyRequest, LegacyControl|LegacyControl]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#Request, Control|Request]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Request, Control|Control]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [5.0.0+] [[#RequestWithContext, ControlWithContext|RequestWithContext]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [5.0.0+] [[#RequestWithContext, ControlWithContext|ControlWithContext]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Close ====&lt;br /&gt;
When processing a request of this type, the IPC server calls:&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::DestroyServerSession&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::CloseServerSessionHandle&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This ensures that the server session is destroyed internally and properly closed.&lt;br /&gt;
&lt;br /&gt;
==== LegacyRequest, LegacyControl ====&lt;br /&gt;
These types are handled by calling:&lt;br /&gt;
* &amp;quot;nn::sf::hipc::detail::HipcMessageBufferAccessor::ParseHeader&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::ProcessMessage&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::Reply&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::RegisterServerSessionToWaitBase&amp;quot;&lt;br /&gt;
&lt;br /&gt;
It is speculated that these are part of an older message processing system where headers were further partitioned.&lt;br /&gt;
&lt;br /&gt;
==== Request, Control ====&lt;br /&gt;
These types are handled by calling:&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::ProcessMessage2&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::RegisterServerSessionToWaitBase&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This represents a more modern message handling system where contents follow the general marshalling structure.&lt;br /&gt;
&lt;br /&gt;
==== RequestWithContext, ControlWithContext ====&lt;br /&gt;
These are identical to normal Request and Control types, but with the additional requirement of suppling a token in their [[#Data payload|data payload]].&lt;br /&gt;
&lt;br /&gt;
This token is used by &amp;quot;nn::sf::cmif::SetInlineContext&amp;quot; which has the sole purpose of saving it into the TLS in order for it to be distributed to any IPC commands that are made while processing the current command. It&#039;s unknown if this token serves any purpose or if it&#039;s just a debug-tool to figure out what IPC command caused a particular chain of commands.&lt;br /&gt;
&lt;br /&gt;
=== Handle descriptor ===&lt;br /&gt;
There can only be one of this descriptor type. It is enabled by bit31 of the second word.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Send current PID.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 4-1 || Number of handles to copy&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8-5 || Number of handles to move&lt;br /&gt;
|-&lt;br /&gt;
| ... || || 8-byte PID if enabled&lt;br /&gt;
|-&lt;br /&gt;
| ... || || Handles to copy&lt;br /&gt;
|-&lt;br /&gt;
| ... || || Handles to move&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sysmodules load the last u64 of rawdata when handling the PID. This is not written by kernel. For sysmodule handling:&lt;br /&gt;
* In some cases: these commands require a placeholder u64 value passed in the input parameters, as mentioned above. In these cases the OverwriteClientProcessId method is called to replace the value before it is used.&lt;br /&gt;
* In other cases: The rawdata_u64 is compared with the PID from the descriptor. On mismatch and when rawdata_u64!=0, error 0x60A is returned. The PID value passed to the cmdhandler vtable funcptr is the rawdata_u64.&lt;br /&gt;
&lt;br /&gt;
Handle 0 is allowed, and just means no handle was sent.&lt;br /&gt;
&lt;br /&gt;
=== Buffer descriptor X &amp;quot;Pointer&amp;quot; ===&lt;br /&gt;
This one is packed even worse than A, they inserted the bit38-36 of the address &#039;&#039;on top&#039;&#039; of the counter field.&lt;br /&gt;
&lt;br /&gt;
Officially, the counter is known as &amp;quot;receive index&amp;quot;. This one writes to the buffer described in the ReceiveList.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 5-0 || Bits 5-0 of counter.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8-6 || Bit 38-36 of address.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 11-9 || Bits 11-9 of counter.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 15-12 || Bit 35-32 of address.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 31-16 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Lower 32-bits of address.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot; ===&lt;br /&gt;
This packing is so unnecessarily complex.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Lower 32-bits of size.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Lower 32-bits of address.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1-0 || Flags. Always set to 0, 1 or 3.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4-2 || Bit 38-36 of address.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 27-24 || Bit 35-32 of size.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 31-28 || Bit 35-32 of address.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A reply must not use A/B/W, svcReplyAndReceive will return 0xE801.&lt;br /&gt;
&lt;br /&gt;
[[SVC|MemoryAttribute]] IsBorrowed and IsUncached are never allowed for the source address.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Send&amp;quot; means buffer is sent from source process into service process.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Receive&amp;quot; means that data is copied from service process into user process.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Exchange&amp;quot; means both &amp;quot;Send&amp;quot; and &amp;quot;Receive&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Flags ====&lt;br /&gt;
Determines what [[SVC|MemoryState]] to use with the mapped memory in the sysmodule.&lt;br /&gt;
&lt;br /&gt;
Used to enforce whether or not device mapping is allowed for src and dst buffers respectively.&lt;br /&gt;
 &lt;br /&gt;
* Flag0: Device mapping *not* allowed for src or dst.&lt;br /&gt;
* Flag1: Device mapping allowed for src and dst.&lt;br /&gt;
* Flag3: Device mapping allowed for src but not for dst.&lt;br /&gt;
&lt;br /&gt;
=== Buffer descriptor C &amp;quot;ReceiveList&amp;quot; ===&lt;br /&gt;
There&#039;s a 4-bit flag in the main header controlling the behavior of C descriptors.&lt;br /&gt;
&lt;br /&gt;
If it has value 0, the C descriptor functionality is disabled.&lt;br /&gt;
&lt;br /&gt;
If it has value 1, there is an &amp;quot;inlined&amp;quot; C buffer after the raw data. Received data is copied to ROUND_UP(cmdbuf+raw_size+index, 16)&lt;br /&gt;
&lt;br /&gt;
If it has value 2, there is a single C descriptor.&lt;br /&gt;
&lt;br /&gt;
Otherwise it has (flag-2) C descriptors. In this case, index picks which C descriptor to copy received data to [instead of picking the offset into the buffer].&lt;br /&gt;
&lt;br /&gt;
Data sent with this method must have MemoryState 0x4000000 mask set.&lt;br /&gt;
&lt;br /&gt;
After reply, X descriptors are written to the sender containing the address, size and index that were copied to.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Lower 32-bits of address.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 15-0 || Rest of address.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 31-16 || Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IPC buffers ===&lt;br /&gt;
Buffer descriptor A/B/... map memory into the sysmodule process. For the mapped memory in the sysmodule the permissions are: desc-A = R--, desc-B = RW-. The buffer is automatically unmapped while the kernel handles the cmdreply, the sysmodule doesn&#039;t need to specify anything in the cmdreply to trigger this.&lt;br /&gt;
&lt;br /&gt;
This memory is mapped in the sysmodule to the same vaddr from the original user-process cmd-request, except with with bits &amp;gt;=(~28(?)) changed to a different ASLR&#039;d region.&lt;br /&gt;
&lt;br /&gt;
No user-process-&amp;gt;sysmodule memcpy is done for outbufs, only sysmodule-&amp;gt;user-process.&lt;br /&gt;
&lt;br /&gt;
== Raw data section ==&lt;br /&gt;
[[File:Ipc msg buffer type a example.png|thumb|An example of an IPC message with a type 0xA buffer in it. Red is headers/descriptors, yellow is padding, and blue is data/buffer lengths. Note that the size of the u16 array for type A lengths is padded to fill up a whole word.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Description&lt;br /&gt;
|-&lt;br /&gt;
| ... || Padding to align to 16 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| ... || If sent to an object domain, a [[#Domain_message|domain message]], otherwise a [[#Data payload|data payload]]&lt;br /&gt;
|-&lt;br /&gt;
| ... || Padding&lt;br /&gt;
|-&lt;br /&gt;
| ... || Buffer type 0xA lengths (u16 array)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The total amount of padding within the raw data section is always 0x10 bytes. This means that if no padding is required before the message, there will be 0x10 bytes of padding after the message (before the buffer type 0xA lengths).&lt;br /&gt;
&lt;br /&gt;
=== Domain message ===&lt;br /&gt;
This header is used to wrap up requests sent to domains instead of sessions.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 7-0 || Command. 1=send message, 2=close virtual handle&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8-15 || Input object count&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 31-16 || Length of [[IPC_Marshalling#Data_payload|data payload]] in bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Object ID (from cmd 0 in [[IPC_Marshalling#Control|Control]]).&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 3 || || [5.0.0+] Token for (NewRequest only)&lt;br /&gt;
|-&lt;br /&gt;
| 4... || || [[#Data payload|Data payload]]&lt;br /&gt;
|-&lt;br /&gt;
| ... || || Input object IDs (u32s, not aligned)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Data payload ===&lt;br /&gt;
This is an array of u32&#039;s, but individual parameters are generally stored as u64&#039;s.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Magic (&amp;quot;SFCI&amp;quot; for requests, &amp;quot;SFCO&amp;quot; for responses) as u64.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Command id as u64 for requests, [[Error_codes|error code]] as u64 for responses.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [5.0.0+] Token (for NewRequest only, non-domain messages).&lt;br /&gt;
|-&lt;br /&gt;
| 4... || Input parameters or return values&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] A token value was introduced into raw_data+12 (regardless of domain or not, in either case it overlaps with padding).&lt;br /&gt;
&lt;br /&gt;
== Official marshalling code ==&lt;br /&gt;
The official marshalling function takes an array of (buf_ptr, size) pairs and a type-field for each such pair.&lt;br /&gt;
&lt;br /&gt;
Bitmask 0x10 seems to indicate null-terminated strings.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Type Mask || Description || Direction&lt;br /&gt;
|-&lt;br /&gt;
| 4 + 1 || Creates a A descriptor with flags=0. || In&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 + 4 + 1 || Creates a A descriptor with flags=1. || In&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 + 4 + 1 || Creates a A descriptor with flags=3. || In&lt;br /&gt;
|-&lt;br /&gt;
| 4 + 2 || Creates a B descriptor with flags=0. || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 + 4 + 2 || Creates a B descriptor with flags=1. || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 + 4 + 2 || Creates a B descriptor with flags=3. || Out&lt;br /&gt;
|-&lt;br /&gt;
| 8 + 1 || Creates an X descriptor || In&lt;br /&gt;
|-&lt;br /&gt;
| 8 + 2 || Creates a C descriptor, and writes the u16 size to an offset into raw data. || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + 8 + 2 || Creates a C descriptor || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 + 1 || Creates both an A and X descriptor || In&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 + 2 || Creates both an B and C descriptor || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 + 2 + 0x40 || Same as 0x20 + 2, except a certain value is set to hard-coded 0x1 instead. || Out&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
C and X (Pointer and ReceiveList) descriptors are backed by the &amp;quot;pointer buffer&amp;quot;, a buffer in the service process. Its size is a u16, which is retrieved using the &amp;quot;QueryPointerBufferSize&amp;quot; control message. If the client code determines all buffers with flag 8 do not fit in the pointer buffer, it returns error 0x11A0B.&lt;br /&gt;
&lt;br /&gt;
For buffers with flag 0x20 it creates two descriptors (A+X or B+C), but one descriptor is NULL (zero size and pointer), while the other holds the expected values. X/C descriptors are used as the non-NULL descriptor where possible, but if they don&#039;t fit in the pointer buffer, A/B descriptors are used instead. The code defers processing of type 0x20 buffers with sizes that fit in a u16 (and may therefore fit in the pointer buffer). This ensures all type 8 buffers get pointer-buffer space before any type 0x20.&lt;br /&gt;
&lt;br /&gt;
(The order in which the deferred type 0x20 buffers are processed is determined by a convoluted loop.)&lt;br /&gt;
&lt;br /&gt;
== Official IPC Cmd Structure ==&lt;br /&gt;
Official struct that is stored for each IPC command. It contains precalculated offsets for different portions of the command structure.&lt;br /&gt;
&lt;br /&gt;
All offsets are given is in number of u32 words.&lt;br /&gt;
&lt;br /&gt;
 struct IpcCmdStruct {&lt;br /&gt;
   u8  unk0;&lt;br /&gt;
   u8  has_handle_descriptor;&lt;br /&gt;
   u8  pad0[2];&lt;br /&gt;
   u32 cmd0;&lt;br /&gt;
   u32 cmd1;&lt;br /&gt;
   u32 offset_handle_descriptor;&lt;br /&gt;
   u32 pad1;&lt;br /&gt;
   u32 offset_handles;          &lt;br /&gt;
   u32 pad2;&lt;br /&gt;
   u32 offset_x_descriptors;&lt;br /&gt;
   u32 offset_a_descriptors;&lt;br /&gt;
   u32 offset_b_descriptors;&lt;br /&gt;
   u32 offset_w_descriptors; /* this is a guess */&lt;br /&gt;
   u32 offset_raw_data;&lt;br /&gt;
   u32 offset_c_descriptors;&lt;br /&gt;
   u32 unk2;&lt;br /&gt;
   u32 unk3;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Control ==&lt;br /&gt;
When type == 5 you are talking to the IPC manager. These are processed by the sysmodule.&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 || Arguments || Output&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ConvertCurrentObjectToDomain || None || u32 CmifDomainObjectId&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CopyFromCurrentDomain || u32 CmifDomainObjectId || u32 NativeHandle&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CloneCurrentObject || None || u32 NativeHandle&lt;br /&gt;
|-&lt;br /&gt;
| 3 || QueryPointerBufferSize || None || u16 size&lt;br /&gt;
|-&lt;br /&gt;
| 4 || CloneCurrentObjectEx || u32 unknown || u32 NativeHandle&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=HIPC&amp;diff=5161</id>
		<title>HIPC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=HIPC&amp;diff=5161"/>
		<updated>2018-10-07T20:17:21Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: /* IPC Command Structure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== IPC Command Structure ==&lt;br /&gt;
This is an array of u32&#039;s, usually located in [[Thread Local Storage]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 15-0 || [[#Type|Type]].&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 19-16 || Number of buf X descriptors (each: 2 words).&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 23-20 || Number of buf A descriptors (each: 3 words).&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 27-24 || Number of buf B descriptors (each: 3 words).&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 31-28 || Number of buf W desciptors (each: 3 words), never observed.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 9-0 || Size of IPC packet in u32s.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 13-10 || Flags for buf C descriptor.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 30-20 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 31 || Enable handle descriptor.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Handle descriptor|Handle descriptor]], if enabled.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor X &amp;quot;Pointer&amp;quot;|Buf X descriptors]], each one 2 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot;|Buf A descriptors]], each one 3 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot;|Buf B descriptors]], each one 3 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot;|Type W descriptors]], each one 3 words.&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Raw_data_section|Raw data section]] (including padding before and after aligned data section).&lt;br /&gt;
|-&lt;br /&gt;
| ... || || [[#Buffer descriptor C &amp;quot;ReceiveList&amp;quot;|Buf C descriptors]], each one 2 words.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
First two header u32&#039;s and handle descriptor (if enabled) are copied as-is from one process to the other.&lt;br /&gt;
&lt;br /&gt;
=== Type ===&lt;br /&gt;
IPC commands can have different types which influence how the IPC server processes requests in &amp;quot;nn::sf::hipc::server::HipcServerSessionManagerBase::ProcessRequest&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;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#LegacyRequest, LegacyControl|LegacyRequest]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#Close|Close]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#LegacyRequest, LegacyControl|LegacyControl]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#Request, Control|Request]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Request, Control|Control]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [5.0.0+] [[#RequestWithContext, ControlWithContext|RequestWithContext]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [5.0.0+] [[#RequestWithContext, ControlWithContext|ControlWithContext]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Close ====&lt;br /&gt;
When processing a request of this type, the IPC server calls:&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::DestroyServerSession&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::CloseServerSessionHandle&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This ensures that the server session is destroyed internally and properly closed.&lt;br /&gt;
&lt;br /&gt;
==== LegacyRequest, LegacyControl ====&lt;br /&gt;
These types are handled by calling:&lt;br /&gt;
* &amp;quot;nn::sf::hipc::detail::HipcMessageBufferAccessor::ParseHeader&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::ProcessMessage&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::Reply&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::RegisterServerSessionToWaitBase&amp;quot;&lt;br /&gt;
&lt;br /&gt;
It is speculated that these are part of an older message processing system where headers were further partitioned.&lt;br /&gt;
&lt;br /&gt;
==== Request, Control ====&lt;br /&gt;
These types are handled by calling:&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::ProcessMessage2&amp;quot;&lt;br /&gt;
* &amp;quot;nn::sf::hipc::server::HipcServerSessionManager::RegisterServerSessionToWaitBase&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This represents a more modern message handling system where contents follow the general marshalling structure.&lt;br /&gt;
&lt;br /&gt;
==== RequestWithContext, ControlWithContext ====&lt;br /&gt;
These are identical to normal Request and Control types, but with the additional requirement of suppling a token in their [[#Data payload|data payload]].&lt;br /&gt;
&lt;br /&gt;
This token is used by &amp;quot;nn::sf::cmif::SetInlineContext&amp;quot; which has the sole purpose of saving it into the TLS in order for it to be distributed to any IPC commands that are made while processing the current command. It&#039;s unknown if this token serves any purpose or if it&#039;s just a debug-tool to figure out what IPC command caused a particular chain of commands.&lt;br /&gt;
&lt;br /&gt;
=== Handle descriptor ===&lt;br /&gt;
There can only be one of this descriptor type. It is enabled by bit31 of the second word.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Send current PID.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 4-1 || Number of handles to copy&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8-5 || Number of handles to move&lt;br /&gt;
|-&lt;br /&gt;
| ... || || 8-byte PID if enabled&lt;br /&gt;
|-&lt;br /&gt;
| ... || || Handles to copy&lt;br /&gt;
|-&lt;br /&gt;
| ... || || Handles to move&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sysmodules load the last u64 of rawdata when handling the PID. This is not written by kernel. For sysmodule handling:&lt;br /&gt;
* In some cases: these commands require a placeholder u64 value passed in the input parameters, as mentioned above. In these cases the OverwriteClientProcessId method is called to replace the value before it is used.&lt;br /&gt;
* In other cases: The rawdata_u64 is compared with the PID from the descriptor. On mismatch and when rawdata_u64!=0, error 0x60A is returned. The PID value passed to the cmdhandler vtable funcptr is the rawdata_u64.&lt;br /&gt;
&lt;br /&gt;
Handle 0 is allowed, and just means no handle was sent.&lt;br /&gt;
&lt;br /&gt;
=== Buffer descriptor X &amp;quot;Pointer&amp;quot; ===&lt;br /&gt;
This one is packed even worse than A, they inserted the bit38-36 of the address &#039;&#039;on top&#039;&#039; of the counter field.&lt;br /&gt;
&lt;br /&gt;
Officially, the counter is known as &amp;quot;receive index&amp;quot;. This one writes to the buffer described in the ReceiveList.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 5-0 || Bits 5-0 of counter.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8-6 || Bit 38-36 of address.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 11-9 || Bits 11-9 of counter.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 15-12 || Bit 35-32 of address.&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 31-16 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Lower 32-bits of address.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Buffer descriptor A/B/W &amp;quot;Send&amp;quot;/&amp;quot;Receive&amp;quot;/&amp;quot;Exchange&amp;quot; ===&lt;br /&gt;
This packing is so unnecessarily complex.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Lower 32-bits of size.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Lower 32-bits of address.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 1-0 || Flags. Always set to 0, 1 or 3.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4-2 || Bit 38-36 of address.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 27-24 || Bit 35-32 of size.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 31-28 || Bit 35-32 of address.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A reply must not use A/B/W, svcReplyAndReceive will return 0xE801.&lt;br /&gt;
&lt;br /&gt;
[[SVC|MemoryAttribute]] IsBorrowed and IsUncached are never allowed for the source address.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Send&amp;quot; means buffer is sent from source process into service process.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Receive&amp;quot; means that data is copied from service process into user process.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Exchange&amp;quot; means both &amp;quot;Send&amp;quot; and &amp;quot;Receive&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Flags ====&lt;br /&gt;
Determines what [[SVC|MemoryState]] to use with the mapped memory in the sysmodule.&lt;br /&gt;
&lt;br /&gt;
Used to enforce whether or not device mapping is allowed for src and dst buffers respectively.&lt;br /&gt;
 &lt;br /&gt;
* Flag0: Device mapping *not* allowed for src or dst.&lt;br /&gt;
* Flag1: Device mapping allowed for src and dst.&lt;br /&gt;
* Flag3: Device mapping allowed for src but not for dst.&lt;br /&gt;
&lt;br /&gt;
=== Buffer descriptor C &amp;quot;ReceiveList&amp;quot; ===&lt;br /&gt;
There&#039;s a 4-bit flag in the main header controlling the behavior of C descriptors.&lt;br /&gt;
&lt;br /&gt;
If it has value 0, the C descriptor functionality is disabled.&lt;br /&gt;
&lt;br /&gt;
If it has value 1, there is an &amp;quot;inlined&amp;quot; C buffer after the raw data. Received data is copied to ROUND_UP(cmdbuf+raw_size+index, 16)&lt;br /&gt;
&lt;br /&gt;
If it has value 2, there is a single C descriptor.&lt;br /&gt;
&lt;br /&gt;
Otherwise it has (flag-2) C descriptors. In this case, index picks which C descriptor to copy received data to [instead of picking the offset into the buffer].&lt;br /&gt;
&lt;br /&gt;
Data sent with this method must have MemoryState 0x4000000 mask set.&lt;br /&gt;
&lt;br /&gt;
After reply, X descriptors are written to the sender containing the address, size and index that were copied to.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Lower 32-bits of address.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 15-0 || Rest of address.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 31-16 || Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IPC buffers ===&lt;br /&gt;
Buffer descriptor A/B/... map memory into the sysmodule process. For the mapped memory in the sysmodule the permissions are: desc-A = R--, desc-B = RW-. The buffer is automatically unmapped while the kernel handles the cmdreply, the sysmodule doesn&#039;t need to specify anything in the cmdreply to trigger this.&lt;br /&gt;
&lt;br /&gt;
This memory is mapped in the sysmodule to the same vaddr from the original user-process cmd-request, except with with bits &amp;gt;=(~28(?)) changed to a different ASLR&#039;d region.&lt;br /&gt;
&lt;br /&gt;
No user-process-&amp;gt;sysmodule memcpy is done for outbufs, only sysmodule-&amp;gt;user-process.&lt;br /&gt;
&lt;br /&gt;
== Raw data section ==&lt;br /&gt;
[[File:Ipc msg buffer type a example.png|thumb|An example of an IPC message with a type 0xA buffer in it. Red is headers/descriptors, yellow is padding, and blue is data/buffer lengths. Note that the size of the u16 array for type A lengths is padded to fill up a whole word.]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Description&lt;br /&gt;
|-&lt;br /&gt;
| ... || Padding to align to 16 bytes.&lt;br /&gt;
|-&lt;br /&gt;
| ... || If sent to an object domain, a [[#Domain_message|domain message]], otherwise a [[#Data payload|data payload]]&lt;br /&gt;
|-&lt;br /&gt;
| ... || Padding&lt;br /&gt;
|-&lt;br /&gt;
| ... || Buffer type 0xA lengths (u16 array)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The total amount of padding within the raw data section is always 0x10 bytes. This means that if no padding is required before the message, there will be 0x10 bytes of padding after the message (before the buffer type 0xA lengths).&lt;br /&gt;
&lt;br /&gt;
=== Domain message ===&lt;br /&gt;
This header is used to wrap up requests sent to domains instead of sessions.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 7-0 || Command. 1=send message, 2=close virtual handle&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8-15 || Input object count&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 31-16 || Length of [[IPC_Marshalling#Data_payload|data payload]] in bytes.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Object ID (from cmd 0 in [[IPC_Marshalling#Control|Control]]).&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 3 || || [5.0.0+] Token for (NewRequest only)&lt;br /&gt;
|-&lt;br /&gt;
| 4... || || [[#Data payload|Data payload]]&lt;br /&gt;
|-&lt;br /&gt;
| ... || || Input object IDs (u32s, not aligned)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Data payload ===&lt;br /&gt;
This is an array of u32&#039;s, but individual parameters are generally stored as u64&#039;s.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Word || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Magic (&amp;quot;SFCI&amp;quot; for requests, &amp;quot;SFCO&amp;quot; for responses) as u64.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Command id as u64 for requests, [[Error_codes|error code]] as u64 for responses.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [5.0.0+] Token (for NewRequest only, non-domain messages).&lt;br /&gt;
|-&lt;br /&gt;
| 4... || Input parameters or return values&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] A token value was introduced into raw_data+12 (regardless of domain or not, in either case it overlaps with padding).&lt;br /&gt;
&lt;br /&gt;
== Official marshalling code ==&lt;br /&gt;
The official marshalling function takes an array of (buf_ptr, size) pairs and a type-field for each such pair.&lt;br /&gt;
&lt;br /&gt;
Bitmask 0x10 seems to indicate null-terminated strings.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Type Mask || Description || Direction&lt;br /&gt;
|-&lt;br /&gt;
| 4 + 1 || Creates a A descriptor with flags=0. || In&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 + 4 + 1 || Creates a A descriptor with flags=1. || In&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 + 4 + 1 || Creates a A descriptor with flags=3. || In&lt;br /&gt;
|-&lt;br /&gt;
| 4 + 2 || Creates a B descriptor with flags=0. || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 + 4 + 2 || Creates a B descriptor with flags=1. || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 + 4 + 2 || Creates a B descriptor with flags=3. || Out&lt;br /&gt;
|-&lt;br /&gt;
| 8 + 1 || Creates an X descriptor || In&lt;br /&gt;
|-&lt;br /&gt;
| 8 + 2 || Creates a C descriptor, and writes the u16 size to an offset into raw data. || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + 8 + 2 || Creates a C descriptor || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 + 1 || Creates both an A and X descriptor || In&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 + 2 || Creates both an B and C descriptor || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 + 2 + 0x40 || Same as 0x20 + 2, except a certain value is set to hard-coded 0x1 instead. || Out&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
C and X (Pointer and ReceiveList) descriptors are backed by the &amp;quot;pointer buffer&amp;quot;, a buffer in the service process. Its size is a u16, which is retrieved using the &amp;quot;QueryPointerBufferSize&amp;quot; control message. If the client code determines all buffers with flag 8 do not fit in the pointer buffer, it returns error 0x11A0B.&lt;br /&gt;
&lt;br /&gt;
For buffers with flag 0x20 it creates two descriptors (A+X or B+C), but one descriptor is NULL (zero size and pointer), while the other holds the expected values. X/C descriptors are used as the non-NULL descriptor where possible, but if they don&#039;t fit in the pointer buffer, A/B descriptors are used instead. The code defers processing of type 0x20 buffers with sizes that fit in a u16 (and may therefore fit in the pointer buffer). This ensures all type 8 buffers get pointer-buffer space before any type 0x20.&lt;br /&gt;
&lt;br /&gt;
(The order in which the deferred type 0x20 buffers are processed is determined by a convoluted loop.)&lt;br /&gt;
&lt;br /&gt;
== Official IPC Cmd Structure ==&lt;br /&gt;
Official struct that is stored for each IPC command. It contains precalculated offsets for different portions of the command structure.&lt;br /&gt;
&lt;br /&gt;
All offsets are given is in number of u32 words.&lt;br /&gt;
&lt;br /&gt;
 struct IpcCmdStruct {&lt;br /&gt;
   u8  unk0;&lt;br /&gt;
   u8  has_handle_descriptor;&lt;br /&gt;
   u8  pad0[2];&lt;br /&gt;
   u32 cmd0;&lt;br /&gt;
   u32 cmd1;&lt;br /&gt;
   u32 offset_handle_descriptor;&lt;br /&gt;
   u32 pad1;&lt;br /&gt;
   u32 offset_handles;          &lt;br /&gt;
   u32 pad2;&lt;br /&gt;
   u32 offset_x_descriptors;&lt;br /&gt;
   u32 offset_a_descriptors;&lt;br /&gt;
   u32 offset_b_descriptors;&lt;br /&gt;
   u32 offset_w_descriptors; /* this is a guess */&lt;br /&gt;
   u32 offset_raw_data;&lt;br /&gt;
   u32 offset_c_descriptors;&lt;br /&gt;
   u32 unk2;&lt;br /&gt;
   u32 unk3;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Control ==&lt;br /&gt;
When type == 5 you are talking to the IPC manager. These are processed by the sysmodule.&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 || Arguments || Output&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ConvertCurrentObjectToDomain || None || u32 CmifDomainObjectId&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CopyFromCurrentDomain || u32 CmifDomainObjectId || u32 NativeHandle&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CloneCurrentObject || None || u32 NativeHandle&lt;br /&gt;
|-&lt;br /&gt;
| 3 || QueryPointerBufferSize || None || u16 size&lt;br /&gt;
|-&lt;br /&gt;
| 4 || CloneCurrentObjectEx || u32 unknown || u32 NativeHandle&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=5136</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=5136"/>
		<updated>2018-10-01T01:07:10Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&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 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 || SetWakePinDebugMode&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [5.0.0+] [[#OpenSession2]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [5.0.0+] IsWakeEventActive2&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [5.0.0+] SetWakeEventActiveFlagSetForDebug2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || 0xCC || Z, 4 || Audio Codec (ALC5639) Power || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Audio services]], [[Fatal services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x24 || E, 4 || SDCard Power || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Filesystem services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x3C || H, 4 || BT_RST_PH4 || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Bluetooth Driver services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0xDA || BB, 2 || || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || 0xDB || BB, 3 || GcAsic Power || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Filesystem services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0xDC || BB, 4 || Headphone Detect || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Audio services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || 0x25 || E, 5 || || Out || Icosa, Copper, Hoag&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x90 || S, 0 || DebugPadDriver || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x91 || S, 1 || || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x96 || S, 6 || Charger IC (BQ24193) Charge Enable || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x97 || S, 7 || CPU fan sampling || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x26 || E, 6 || Joy-Con(L) IsAttached (insertion, Joy-Con pin 5/console TX, pulled low on insert?) || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x05 || A, 5 || Fan enable (normal) || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x78 || P, 0 || SDMMC3_CLK_PP0? || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x93 || S, 3 || GcAsic IRQ || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Filesystem services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || SDMMC3_DAT0_PP5? || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || SDMMC3_DAT1_PP4? || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || SDMMC3_DAT2_PP3? || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || SDMMC3_DAT3_PP2? || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || Temperature Sensor || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Audio services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || MOTION_INT_PX2? || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || TouchPanel IRQ (TOUCH_INT_PX1) (unused - polled instead) || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || Power Button (BUTTON_POWER_ON_PX5) || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up (BUTTON_VOL_UP_PX6) || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Boot2]], [[Audio services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down (BUTTON_VOL_DOWN_PX7) || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Boot2]], [[Audio services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Fuel Gauge IC (MAX17050) IRQ || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || BUTTON_HOME_PY1 || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight Enable (LCD_BL_EN_PV1) || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[NV services]], [[Backlight services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight Reset (LCD_RST_PV2) || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger IC (BQ24193) OTG charge select || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]], [[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || USB-PD controller (RHOM BM92T30MWV) related || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Charger IC (BQ24193) IRQ || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || TouchPanel reset || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || USB-PD controller (RHOM BM92T30MWV) IRQ || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || In || Icosa, Copper, Hoag&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || Joy-Con(R) NwcpDriver1.NwcpCharger || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || Joy-Con(L) NwcpDriver0.NwcpCharger || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || WIFI_EN_PH0? || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || WIFI_RST_PH1 || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Wlan services]], [[PCIe services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || AP_WAKE_BT_PH3 || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Bluetooth Driver services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight +5V || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight -5V || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || Joy-Con(R) IsAttached (insertion, Joy-Con pin 5/console TX, pulled low on insert?) || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Fan enable (high power) || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Filesystem services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger IC (BQ24193) OTG charge select || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]], [[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger IC (BQ24193) OTG charge select || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]], [[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || Joy-Con(R) NwcpDriver1.GpioMonitorTask0 duplicate? || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || Joy-Con(L) NwcpDriver1.GpioMonitorTask0 duplicate? || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || Joy-Con(R) CTS (checked low) || In || None &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || Joy-Con(L) CTS (checked low) || In || None &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || Out || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || Lid Closed (unused) || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || Out || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x4D || 0xAC || V, 4 || || Out || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x4E || 0xE1 || CC, 1 || HdmiHotplug (HDMI_INT_DP_HPD_PCC1) || In || [2.0.0+] Copper &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x4F || 0x56 || K, 6 || || || None&lt;br /&gt;
|-&lt;br /&gt;
| - || 0x32 || G, 2 || Joy-Con(R) RTS || || None&lt;br /&gt;
|-&lt;br /&gt;
| - || 0x1B || D, 3 || Joy-Con(L) RTS || || None&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw [[#GpioPadDescriptor]] and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as [[#OpenSessionForDev]] except it takes a &#039;&#039;&#039;GpioPadName&#039;&#039;&#039; which is then converted to a [[#GpioPadDescriptor]]. Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== OpenSession2 ==&lt;br /&gt;
Same as [[#OpenSession]] but takes a &#039;&#039;&#039;DeviceCode&#039;&#039;&#039; instead of a &#039;&#039;&#039;GpioPadName&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&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 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [4.0.0+] SetValueForSleepState&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c, i2c:pcv =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&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 || [[#OpenSessionForDev_2|OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession_2|OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#HasDevice|HasDevice]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#HasDeviceForDev|HasDeviceForDev]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! I2cDevice || Port:Addr || Is10bit || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || TouchPanel || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || Temperature Sensor (TMP451 or NCT72) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || Temperature Sensor (TMP451 or NCT72) (duplicate) ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio Codec (ALC5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || PMIC RTC (max77620_rtc0), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (MAX77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || Sub-PMIC for CPU (max77621_cpu) || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || Sub-PMIC for GPU (max77621_gpu) || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || Charger IC (BQ24193) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Fuel Gauge IC (MAX17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (RHOM BM92T30MWV) || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VDD15V0-HB) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-CPU-DS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-GPU-DS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-DDR-DS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-AP) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-BL-DS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || Ambient Light Sensor (BH1730) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_CORE) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_Soc-1V8) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || Power Monitor (ina226_LPDDR4-1V8) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || Power Monitor (ina226_REG1V32) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || Power Monitor (ina226_VDD3V3-SYS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || HDMI DDC || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || HDMI SCDC || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;port&#039;&#039;&#039;, an u16 &#039;&#039;&#039;addr&#039;&#039;&#039;, an &#039;&#039;&#039;AddressingMode&#039;&#039;&#039; (1 for 10-bit, 0 otherwise) and a &#039;&#039;&#039;SpeedMode&#039;&#039;&#039; (400000 or 100000). Returns a [[#II2cSession]] session.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Takes an &#039;&#039;&#039;I2cDevice&#039;&#039;&#039; and returns a [[#II2cSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== HasDevice ==&lt;br /&gt;
Takes an &#039;&#039;&#039;I2cDevice&#039;&#039;&#039; and returns true if the device exists or false otherwise.&lt;br /&gt;
&lt;br /&gt;
== HasDeviceForDev ==&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;port&#039;&#039;&#039;, an u16 &#039;&#039;&#039;addr&#039;&#039;&#039;, an &#039;&#039;&#039;AddressingMode&#039;&#039;&#039; (1 for 10-bit, 0 otherwise) and a &#039;&#039;&#039;SpeedMode&#039;&#039;&#039; (400000 or 100000). Returns true if the device exists or false otherwise.&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&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 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ExecuteCommandList&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#SendAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ReceiveAuto&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#ExecuteCommandListAuto]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SendAuto ==&lt;br /&gt;
&lt;br /&gt;
Takes bytes to write in either a static buffer or a receive buffer, returns an error code for success&lt;br /&gt;
&lt;br /&gt;
== ExecuteCommandListAuto ==&lt;br /&gt;
&lt;br /&gt;
Takes a command list from either a static buffer or a receive buffer, returns data in either a static (or recieve?) buffer.&lt;br /&gt;
&lt;br /&gt;
=== Commands ===&lt;br /&gt;
&lt;br /&gt;
* 0x40 [u8 len] &amp;lt;bytes&amp;gt; - Write bytes to device&lt;br /&gt;
* 0xC1 [u8 len] - Receive bytes from device&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&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 || [[#DoesUartExist]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#SetUartBaudrate]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#IsSomethingUartValid]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#GetSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DoesUartExist ==&lt;br /&gt;
Takes a u32 [[#UartPort]] and returns boolean success value&lt;br /&gt;
&lt;br /&gt;
== SetUartBaudrate ==&lt;br /&gt;
Takes a u32 [[#UartPort]] and a u32 baudrate and returns boolean success value&lt;br /&gt;
&lt;br /&gt;
== IsSomethingUartValid ==&lt;br /&gt;
Takes a u32 [[#UartPort]] and returns boolean success value&lt;br /&gt;
&lt;br /&gt;
== GetSession ==&lt;br /&gt;
Takes a u32 [[#UartPort]] and returns an [[#IPortSession]]&lt;br /&gt;
&lt;br /&gt;
== UartPort ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port || Usage&lt;br /&gt;
|-&lt;br /&gt;
| 1 || UART-D || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-B || Joy-Con(R)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-C || Joy-Con(L)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&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 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSessionForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Port Mapping ===&lt;br /&gt;
OpenSession translates user IDs to to the [[#UartPort]] index.&lt;br /&gt;
&lt;br /&gt;
OpenSessionForTest takes the port index verbatim.&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&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 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 1 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 0 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&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 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pinmux =&lt;br /&gt;
This is &amp;quot;nn::pinmux::IManager&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 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
This is &amp;quot;nn::pinmux::ISession&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 || SetPinAssignment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPinAssignment&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetPinAssignmentForHardwareTest&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= sasbus =&lt;br /&gt;
This is &amp;quot;nn::sasbus::IManager&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 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
This is &amp;quot;nn::sasbus::ISession&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 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=5135</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=5135"/>
		<updated>2018-10-01T00:53:06Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: /* II2cSession */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&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 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 || SetWakePinDebugMode&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [5.0.0+] [[#OpenSession2]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [5.0.0+] IsWakeEventActive2&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [5.0.0+] SetWakeEventActiveFlagSetForDebug2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || 0xCC || Z, 4 || Audio Codec (ALC5639) Power || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Audio services]], [[Fatal services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x24 || E, 4 || SDCard Power || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Filesystem services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x3C || H, 4 || BT_RST_PH4 || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Bluetooth Driver services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0xDA || BB, 2 || || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || 0xDB || BB, 3 || GcAsic Power || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Filesystem services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0xDC || BB, 4 || Headphone Detect || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Audio services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || 0x25 || E, 5 || || Out || Icosa, Copper, Hoag&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x90 || S, 0 || DebugPadDriver || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x91 || S, 1 || || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x96 || S, 6 || Charger IC (BQ24193) Charge Enable || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x97 || S, 7 || CPU fan sampling || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x26 || E, 6 || Joy-Con(L) IsAttached (insertion, Joy-Con pin 5/console TX, pulled low on insert?) || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x05 || A, 5 || Fan enable (normal) || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x78 || P, 0 || SDMMC3_CLK_PP0? || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x93 || S, 3 || GcAsic IRQ || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Filesystem services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || SDMMC3_DAT0_PP5? || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || SDMMC3_DAT1_PP4? || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || SDMMC3_DAT2_PP3? || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || SDMMC3_DAT3_PP2? || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || Temperature Sensor || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Audio services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || MOTION_INT_PX2? || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || TouchPanel IRQ (TOUCH_INT_PX1) (unused - polled instead) || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || Power Button (BUTTON_POWER_ON_PX5) || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up (BUTTON_VOL_UP_PX6) || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Boot2]], [[Audio services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down (BUTTON_VOL_DOWN_PX7) || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Boot2]], [[Audio services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Fuel Gauge IC (MAX17050) IRQ || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || BUTTON_HOME_PY1 || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight Enable (LCD_BL_EN_PV1) || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[NV services]], [[Backlight services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight Reset (LCD_RST_PV2) || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger IC (BQ24193) OTG charge select || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]], [[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || USB-PD controller (RHOM BM92T30MWV) related || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Charger IC (BQ24193) IRQ || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || TouchPanel reset || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || USB-PD controller (RHOM BM92T30MWV) IRQ || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || In || Icosa, Copper, Hoag&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || Joy-Con(R) NwcpDriver1.NwcpCharger || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || Joy-Con(L) NwcpDriver0.NwcpCharger || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || WIFI_EN_PH0? || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || WIFI_RST_PH1 || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Wlan services]], [[PCIe services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || AP_WAKE_BT_PH3 || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Bluetooth Driver services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight +5V || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight -5V || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || Joy-Con(R) IsAttached (insertion, Joy-Con pin 5/console TX, pulled low on insert?) || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Fan enable (high power) || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Filesystem services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger IC (BQ24193) OTG charge select || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]], [[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger IC (BQ24193) OTG charge select || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]], [[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || Joy-Con(R) NwcpDriver1.GpioMonitorTask0 duplicate? || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || Joy-Con(L) NwcpDriver1.GpioMonitorTask0 duplicate? || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || Joy-Con(R) CTS (checked low) || In || None &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || Joy-Con(L) CTS (checked low) || In || None &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || Out || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || Lid Closed (unused) || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || Out || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x4D || 0xAC || V, 4 || || Out || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x4E || 0xE1 || CC, 1 || HdmiHotplug (HDMI_INT_DP_HPD_PCC1) || In || [2.0.0+] Copper &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x4F || 0x56 || K, 6 || || || None&lt;br /&gt;
|-&lt;br /&gt;
| - || 0x32 || G, 2 || Joy-Con(R) RTS || || None&lt;br /&gt;
|-&lt;br /&gt;
| - || 0x1B || D, 3 || Joy-Con(L) RTS || || None&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw [[#GpioPadDescriptor]] and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as [[#OpenSessionForDev]] except it takes a &#039;&#039;&#039;GpioPadName&#039;&#039;&#039; which is then converted to a [[#GpioPadDescriptor]]. Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== OpenSession2 ==&lt;br /&gt;
Same as [[#OpenSession]] but takes a &#039;&#039;&#039;DeviceCode&#039;&#039;&#039; instead of a &#039;&#039;&#039;GpioPadName&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&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 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [4.0.0+] SetValueForSleepState&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c, i2c:pcv =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&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 || [[#OpenSessionForDev_2|OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession_2|OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#HasDevice|HasDevice]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#HasDeviceForDev|HasDeviceForDev]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! I2cDevice || Port:Addr || Is10bit || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || TouchPanel || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || Temperature Sensor (TMP451 or NCT72) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || Temperature Sensor (TMP451 or NCT72) (duplicate) ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio Codec (ALC5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || PMIC RTC (max77620_rtc0), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (MAX77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || Sub-PMIC for CPU (max77621_cpu) || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || Sub-PMIC for GPU (max77621_gpu) || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || Charger IC (BQ24193) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Fuel Gauge IC (MAX17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (RHOM BM92T30MWV) || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VDD15V0-HB) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-CPU-DS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-GPU-DS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-DDR-DS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-AP) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-BL-DS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || Ambient Light Sensor (BH1730) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_CORE) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_Soc-1V8) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || Power Monitor (ina226_LPDDR4-1V8) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || Power Monitor (ina226_REG1V32) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || Power Monitor (ina226_VDD3V3-SYS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || HDMI DDC || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || HDMI SCDC || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;port&#039;&#039;&#039;, an u16 &#039;&#039;&#039;addr&#039;&#039;&#039;, an &#039;&#039;&#039;AddressingMode&#039;&#039;&#039; (1 for 10-bit, 0 otherwise) and a &#039;&#039;&#039;SpeedMode&#039;&#039;&#039; (400000 or 100000). Returns a [[#II2cSession]] session.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Takes an &#039;&#039;&#039;I2cDevice&#039;&#039;&#039; and returns a [[#II2cSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== HasDevice ==&lt;br /&gt;
Takes an &#039;&#039;&#039;I2cDevice&#039;&#039;&#039; and returns true if the device exists or false otherwise.&lt;br /&gt;
&lt;br /&gt;
== HasDeviceForDev ==&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;port&#039;&#039;&#039;, an u16 &#039;&#039;&#039;addr&#039;&#039;&#039;, an &#039;&#039;&#039;AddressingMode&#039;&#039;&#039; (1 for 10-bit, 0 otherwise) and a &#039;&#039;&#039;SpeedMode&#039;&#039;&#039; (400000 or 100000). Returns true if the device exists or false otherwise.&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&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 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ExecuteCommandList&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#SendAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ReceiveAuto&lt;br /&gt;
|-&lt;br /&gt;
| 12 || ExecuteCommandListAuto&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SendAuto ==&lt;br /&gt;
&lt;br /&gt;
Takes bytes to write in either a static buffer or a receive buffer, returns an error code for success&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&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 || [[#DoesUartExist]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#SetUartBaudrate]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#IsSomethingUartValid]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#GetSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DoesUartExist ==&lt;br /&gt;
Takes a u32 [[#UartPort]] and returns boolean success value&lt;br /&gt;
&lt;br /&gt;
== SetUartBaudrate ==&lt;br /&gt;
Takes a u32 [[#UartPort]] and a u32 baudrate and returns boolean success value&lt;br /&gt;
&lt;br /&gt;
== IsSomethingUartValid ==&lt;br /&gt;
Takes a u32 [[#UartPort]] and returns boolean success value&lt;br /&gt;
&lt;br /&gt;
== GetSession ==&lt;br /&gt;
Takes a u32 [[#UartPort]] and returns an [[#IPortSession]]&lt;br /&gt;
&lt;br /&gt;
== UartPort ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port || Usage&lt;br /&gt;
|-&lt;br /&gt;
| 1 || UART-D || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-B || Joy-Con(R)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-C || Joy-Con(L)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&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 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSessionForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Port Mapping ===&lt;br /&gt;
OpenSession translates user IDs to to the [[#UartPort]] index.&lt;br /&gt;
&lt;br /&gt;
OpenSessionForTest takes the port index verbatim.&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&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 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 1 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 0 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&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 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pinmux =&lt;br /&gt;
This is &amp;quot;nn::pinmux::IManager&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 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
This is &amp;quot;nn::pinmux::ISession&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 || SetPinAssignment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPinAssignment&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetPinAssignmentForHardwareTest&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= sasbus =&lt;br /&gt;
This is &amp;quot;nn::sasbus::IManager&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 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
This is &amp;quot;nn::sasbus::ISession&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 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=5127</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=5127"/>
		<updated>2018-09-30T03:27:08Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: /* uart */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&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 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 || SetWakePinDebugMode&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [5.0.0+] [[#OpenSession2]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [5.0.0+] IsWakeEventActive2&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [5.0.0+] SetWakeEventActiveFlagSetForDebug2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || 0xCC || Z, 4 || Audio Codec (ALC5639) Power || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Audio services]], [[Fatal services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x24 || E, 4 || SDCard Power || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Filesystem services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x3C || H, 4 || BT_RST_PH4 || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Bluetooth Driver services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0xDA || BB, 2 || || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || 0xDB || BB, 3 || GcAsic Power || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Filesystem services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0xDC || BB, 4 || Headphone Detect || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Audio services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || 0x25 || E, 5 || || Out || Icosa, Copper, Hoag&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x90 || S, 0 || DebugPadDriver || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x91 || S, 1 || || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x96 || S, 6 || Charger IC (BQ24193) Charge Enable || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x97 || S, 7 || CPU fan sampling || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x26 || E, 6 || Joy-Con(L) IsAttached (insertion, Joy-Con pin 5/console TX, pulled low on insert?) || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x05 || A, 5 || Fan enable (normal) || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x78 || P, 0 || SDMMC3_CLK_PP0? || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x93 || S, 3 || GcAsic IRQ || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Filesystem services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || SDMMC3_DAT0_PP5? || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || SDMMC3_DAT1_PP4? || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || SDMMC3_DAT2_PP3? || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || SDMMC3_DAT3_PP2? || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || Temperature Sensor || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Audio services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || MOTION_INT_PX2? || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || TouchPanel IRQ (TOUCH_INT_PX1) (unused - polled instead) || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || Power Button (BUTTON_POWER_ON_PX5) || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up (BUTTON_VOL_UP_PX6) || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Boot2]], [[Audio services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down (BUTTON_VOL_DOWN_PX7) || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Boot2]], [[Audio services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Fuel Gauge IC (MAX17050) IRQ || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || BUTTON_HOME_PY1 || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight Enable (LCD_BL_EN_PV1) || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[NV services]], [[Backlight services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight Reset (LCD_RST_PV2) || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger IC (BQ24193) OTG charge select || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]], [[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || USB-PD controller (RHOM BM92T30MWV) related || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Charger IC (BQ24193) IRQ || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || TouchPanel reset || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || USB-PD controller (RHOM BM92T30MWV) IRQ || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || In || Icosa, Copper, Hoag&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || Joy-Con(R) NwcpDriver1.NwcpCharger || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || Joy-Con(L) NwcpDriver0.NwcpCharger || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || WIFI_EN_PH0? || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || WIFI_RST_PH1 || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Wlan services]], [[PCIe services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || AP_WAKE_BT_PH3 || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Bluetooth Driver services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight +5V || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight -5V || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || Joy-Con(R) IsAttached (insertion, Joy-Con pin 5/console TX, pulled low on insert?) || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Fan enable (high power) || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Filesystem services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger IC (BQ24193) OTG charge select || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]], [[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger IC (BQ24193) OTG charge select || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]], [[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || Joy-Con(R) NwcpDriver1.GpioMonitorTask0 duplicate? || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || Joy-Con(L) NwcpDriver1.GpioMonitorTask0 duplicate? || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || Joy-Con(R) CTS (checked low) || In || None &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || Joy-Con(L) CTS (checked low) || In || None &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || Out || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || Lid Closed (unused) || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || Out || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x4D || 0xAC || V, 4 || || Out || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x4E || 0xE1 || CC, 1 || HdmiHotplug (HDMI_INT_DP_HPD_PCC1) || In || [2.0.0+] Copper &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x4F || 0x56 || K, 6 || || || None&lt;br /&gt;
|-&lt;br /&gt;
| - || 0x32 || G, 2 || Joy-Con(R) RTS || || None&lt;br /&gt;
|-&lt;br /&gt;
| - || 0x1B || D, 3 || Joy-Con(L) RTS || || None&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw [[#GpioPadDescriptor]] and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as [[#OpenSessionForDev]] except it takes a &#039;&#039;&#039;GpioPadName&#039;&#039;&#039; which is then converted to a [[#GpioPadDescriptor]]. Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== OpenSession2 ==&lt;br /&gt;
Same as [[#OpenSession]] but takes a &#039;&#039;&#039;DeviceCode&#039;&#039;&#039; instead of a &#039;&#039;&#039;GpioPadName&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&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 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [4.0.0+] SetValueForSleepState&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c, i2c:pcv =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&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 || [[#OpenSessionForDev_2|OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession_2|OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#HasDevice|HasDevice]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#HasDeviceForDev|HasDeviceForDev]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! I2cDevice || Port:Addr || Is10bit || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || TouchPanel || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || Temperature Sensor (TMP451 or NCT72) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || Temperature Sensor (TMP451 or NCT72) (duplicate) ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio Codec (ALC5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || PMIC RTC (max77620_rtc0), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (MAX77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || Sub-PMIC for CPU (max77621_cpu) || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || Sub-PMIC for GPU (max77621_gpu) || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || Charger IC (BQ24193) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Fuel Gauge IC (MAX17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (RHOM BM92T30MWV) || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VDD15V0-HB) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-CPU-DS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-GPU-DS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-DDR-DS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-AP) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-BL-DS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || Ambient Light Sensor (BH1730) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_CORE) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_Soc-1V8) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || Power Monitor (ina226_LPDDR4-1V8) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || Power Monitor (ina226_REG1V32) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || Power Monitor (ina226_VDD3V3-SYS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || HDMI DDC || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || HDMI SCDC || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;port&#039;&#039;&#039;, an u16 &#039;&#039;&#039;addr&#039;&#039;&#039;, an &#039;&#039;&#039;AddressingMode&#039;&#039;&#039; (1 for 10-bit, 0 otherwise) and a &#039;&#039;&#039;SpeedMode&#039;&#039;&#039; (400000 or 100000). Returns a [[#II2cSession]] session.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Takes an &#039;&#039;&#039;I2cDevice&#039;&#039;&#039; and returns a [[#II2cSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== HasDevice ==&lt;br /&gt;
Takes an &#039;&#039;&#039;I2cDevice&#039;&#039;&#039; and returns true if the device exists or false otherwise.&lt;br /&gt;
&lt;br /&gt;
== HasDeviceForDev ==&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;port&#039;&#039;&#039;, an u16 &#039;&#039;&#039;addr&#039;&#039;&#039;, an &#039;&#039;&#039;AddressingMode&#039;&#039;&#039; (1 for 10-bit, 0 otherwise) and a &#039;&#039;&#039;SpeedMode&#039;&#039;&#039; (400000 or 100000). Returns true if the device exists or false otherwise.&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&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 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ExecuteCommandList&lt;br /&gt;
|-&lt;br /&gt;
| 10 || SendAuto&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ReceiveAuto&lt;br /&gt;
|-&lt;br /&gt;
| 12 || ExecuteCommandListAuto&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&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 || [[#DoesUartExist]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#SetUartBaudrate]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#IsSomethingUartValid]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#GetSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DoesUartExist ==&lt;br /&gt;
Takes a u32 [[#UartPort]] and returns boolean success value&lt;br /&gt;
&lt;br /&gt;
== SetUartBaudrate ==&lt;br /&gt;
Takes a u32 [[#UartPort]] and a u32 baudrate and returns boolean success value&lt;br /&gt;
&lt;br /&gt;
== IsSomethingUartValid ==&lt;br /&gt;
Takes a u32 [[#UartPort]] and returns boolean success value&lt;br /&gt;
&lt;br /&gt;
== GetSession ==&lt;br /&gt;
Takes a u32 [[#UartPort]] and returns an [[#IPortSession]]&lt;br /&gt;
&lt;br /&gt;
== UartPort ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port || Usage&lt;br /&gt;
|-&lt;br /&gt;
| 1 || UART-D || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-B || Joy-Con(R)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-C || Joy-Con(L)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&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 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSessionForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Port Mapping ===&lt;br /&gt;
OpenSession translates user IDs to to the [[#UartPort]] index.&lt;br /&gt;
&lt;br /&gt;
OpenSessionForTest takes the port index verbatim.&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&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 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 1 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 0 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&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 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pinmux =&lt;br /&gt;
This is &amp;quot;nn::pinmux::IManager&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 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
This is &amp;quot;nn::pinmux::ISession&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 || SetPinAssignment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPinAssignment&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetPinAssignmentForHardwareTest&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= sasbus =&lt;br /&gt;
This is &amp;quot;nn::sasbus::IManager&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 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
This is &amp;quot;nn::sasbus::ISession&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 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=5126</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=5126"/>
		<updated>2018-09-30T03:26:13Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&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 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 || SetWakePinDebugMode&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [5.0.0+] [[#OpenSession2]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [5.0.0+] IsWakeEventActive2&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [5.0.0+] SetWakeEventActiveFlagSetForDebug2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || 0xCC || Z, 4 || Audio Codec (ALC5639) Power || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Audio services]], [[Fatal services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x24 || E, 4 || SDCard Power || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Filesystem services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x3C || H, 4 || BT_RST_PH4 || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Bluetooth Driver services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0xDA || BB, 2 || || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || 0xDB || BB, 3 || GcAsic Power || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Filesystem services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0xDC || BB, 4 || Headphone Detect || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Audio services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || 0x25 || E, 5 || || Out || Icosa, Copper, Hoag&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x90 || S, 0 || DebugPadDriver || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x91 || S, 1 || || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x96 || S, 6 || Charger IC (BQ24193) Charge Enable || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x97 || S, 7 || CPU fan sampling || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x26 || E, 6 || Joy-Con(L) IsAttached (insertion, Joy-Con pin 5/console TX, pulled low on insert?) || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x05 || A, 5 || Fan enable (normal) || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x78 || P, 0 || SDMMC3_CLK_PP0? || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x93 || S, 3 || GcAsic IRQ || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Filesystem services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || SDMMC3_DAT0_PP5? || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || SDMMC3_DAT1_PP4? || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || SDMMC3_DAT2_PP3? || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || SDMMC3_DAT3_PP2? || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || Temperature Sensor || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Audio services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || MOTION_INT_PX2? || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || TouchPanel IRQ (TOUCH_INT_PX1) (unused - polled instead) || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || Power Button (BUTTON_POWER_ON_PX5) || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up (BUTTON_VOL_UP_PX6) || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Boot2]], [[Audio services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down (BUTTON_VOL_DOWN_PX7) || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Boot2]], [[Audio services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Fuel Gauge IC (MAX17050) IRQ || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || BUTTON_HOME_PY1 || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight Enable (LCD_BL_EN_PV1) || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[NV services]], [[Backlight services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight Reset (LCD_RST_PV2) || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger IC (BQ24193) OTG charge select || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]], [[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || USB-PD controller (RHOM BM92T30MWV) related || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Charger IC (BQ24193) IRQ || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || TouchPanel reset || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || USB-PD controller (RHOM BM92T30MWV) IRQ || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || In || Icosa, Copper, Hoag&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || Joy-Con(R) NwcpDriver1.NwcpCharger || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || Joy-Con(L) NwcpDriver0.NwcpCharger || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || WIFI_EN_PH0? || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || WIFI_RST_PH1 || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Wlan services]], [[PCIe services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || AP_WAKE_BT_PH3 || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Bluetooth Driver services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight +5V || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight -5V || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || Joy-Con(R) IsAttached (insertion, Joy-Con pin 5/console TX, pulled low on insert?) || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Fan enable (high power) || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Filesystem services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger IC (BQ24193) OTG charge select || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]], [[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger IC (BQ24193) OTG charge select || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]], [[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || Joy-Con(R) NwcpDriver1.GpioMonitorTask0 duplicate? || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || Joy-Con(L) NwcpDriver1.GpioMonitorTask0 duplicate? || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || Joy-Con(R) CTS (checked low) || In || None &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || Joy-Con(L) CTS (checked low) || In || None &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || Out || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || Lid Closed (unused) || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || Out || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x4D || 0xAC || V, 4 || || Out || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x4E || 0xE1 || CC, 1 || HdmiHotplug (HDMI_INT_DP_HPD_PCC1) || In || [2.0.0+] Copper &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x4F || 0x56 || K, 6 || || || None&lt;br /&gt;
|-&lt;br /&gt;
| - || 0x32 || G, 2 || Joy-Con(R) RTS || || None&lt;br /&gt;
|-&lt;br /&gt;
| - || 0x1B || D, 3 || Joy-Con(L) RTS || || None&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw [[#GpioPadDescriptor]] and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as [[#OpenSessionForDev]] except it takes a &#039;&#039;&#039;GpioPadName&#039;&#039;&#039; which is then converted to a [[#GpioPadDescriptor]]. Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== OpenSession2 ==&lt;br /&gt;
Same as [[#OpenSession]] but takes a &#039;&#039;&#039;DeviceCode&#039;&#039;&#039; instead of a &#039;&#039;&#039;GpioPadName&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&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 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [4.0.0+] SetValueForSleepState&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c, i2c:pcv =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&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 || [[#OpenSessionForDev_2|OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession_2|OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#HasDevice|HasDevice]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#HasDeviceForDev|HasDeviceForDev]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! I2cDevice || Port:Addr || Is10bit || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || TouchPanel || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || Temperature Sensor (TMP451 or NCT72) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || Temperature Sensor (TMP451 or NCT72) (duplicate) ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio Codec (ALC5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || PMIC RTC (max77620_rtc0), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (MAX77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || Sub-PMIC for CPU (max77621_cpu) || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || Sub-PMIC for GPU (max77621_gpu) || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || Charger IC (BQ24193) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Fuel Gauge IC (MAX17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (RHOM BM92T30MWV) || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VDD15V0-HB) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-CPU-DS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-GPU-DS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-DDR-DS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-AP) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-BL-DS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || Ambient Light Sensor (BH1730) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_CORE) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_Soc-1V8) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || Power Monitor (ina226_LPDDR4-1V8) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || Power Monitor (ina226_REG1V32) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || Power Monitor (ina226_VDD3V3-SYS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || HDMI DDC || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || HDMI SCDC || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;port&#039;&#039;&#039;, an u16 &#039;&#039;&#039;addr&#039;&#039;&#039;, an &#039;&#039;&#039;AddressingMode&#039;&#039;&#039; (1 for 10-bit, 0 otherwise) and a &#039;&#039;&#039;SpeedMode&#039;&#039;&#039; (400000 or 100000). Returns a [[#II2cSession]] session.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Takes an &#039;&#039;&#039;I2cDevice&#039;&#039;&#039; and returns a [[#II2cSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== HasDevice ==&lt;br /&gt;
Takes an &#039;&#039;&#039;I2cDevice&#039;&#039;&#039; and returns true if the device exists or false otherwise.&lt;br /&gt;
&lt;br /&gt;
== HasDeviceForDev ==&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;port&#039;&#039;&#039;, an u16 &#039;&#039;&#039;addr&#039;&#039;&#039;, an &#039;&#039;&#039;AddressingMode&#039;&#039;&#039; (1 for 10-bit, 0 otherwise) and a &#039;&#039;&#039;SpeedMode&#039;&#039;&#039; (400000 or 100000). Returns true if the device exists or false otherwise.&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&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 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ExecuteCommandList&lt;br /&gt;
|-&lt;br /&gt;
| 10 || SendAuto&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ReceiveAuto&lt;br /&gt;
|-&lt;br /&gt;
| 12 || ExecuteCommandListAuto&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&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 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DoesUartExist ==&lt;br /&gt;
Takes a u32 [[#UartPort]] and returns boolean success value&lt;br /&gt;
&lt;br /&gt;
== SetUartBaudrate ==&lt;br /&gt;
Takes a u32 [[#UartPort]] and a u32 baudrate and returns boolean success value&lt;br /&gt;
&lt;br /&gt;
== IsSomethingUartValid ==&lt;br /&gt;
Takes a u32 [[#UartPort]] and returns boolean success value&lt;br /&gt;
&lt;br /&gt;
== GetSession ==&lt;br /&gt;
Takes a u32 [[#UartPort]] and returns an [[#IPortSession]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UartPort ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port || Usage&lt;br /&gt;
|-&lt;br /&gt;
| 1 || UART-D || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-B || Joy-Con(R)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-C || Joy-Con(L)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&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 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSessionForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Port Mapping ===&lt;br /&gt;
OpenSession translates user IDs to to the [[#UartPort]] index.&lt;br /&gt;
&lt;br /&gt;
OpenSessionForTest takes the port index verbatim.&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&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 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 1 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 0 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&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 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pinmux =&lt;br /&gt;
This is &amp;quot;nn::pinmux::IManager&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 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
This is &amp;quot;nn::pinmux::ISession&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 || SetPinAssignment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPinAssignment&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetPinAssignmentForHardwareTest&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= sasbus =&lt;br /&gt;
This is &amp;quot;nn::sasbus::IManager&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 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
This is &amp;quot;nn::sasbus::ISession&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 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Kernel&amp;diff=5053</id>
		<title>Kernel</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Kernel&amp;diff=5053"/>
		<updated>2018-09-23T05:18:09Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: /* KHandleEntry */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KAutoObject =&lt;br /&gt;
Size: 0x10&lt;br /&gt;
&lt;br /&gt;
[5.0.0] Size: 0x20&lt;br /&gt;
&lt;br /&gt;
[6.0.0] Size: 0x30&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u32 || ReferenceCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[5.0.0]:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u32 || ReferenceCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KLinkedListNode || Intrusive list, links to other instances of the same class (managed by a KObjectAllocator).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[6.0.0]:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u32 || ReferenceCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || ptr || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KSynchronizationObject =&lt;br /&gt;
Size: 0x28&lt;br /&gt;
&lt;br /&gt;
[5.0.0] Size: 0x38&lt;br /&gt;
&lt;br /&gt;
[6.0.0] Size: 0x48&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KLinkedList]] || ThreadSyncList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KMutex =&lt;br /&gt;
Size: 0x8&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || OwnerTag&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KRecursiveLock =&lt;br /&gt;
Size: 0x18&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KThread]] * || Owner&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s32 || Count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= KLockedList =&lt;br /&gt;
Size: 0x28&lt;br /&gt;
&lt;br /&gt;
[5.0.0]? Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || Count&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KLinkedListNode]] || List&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || MaxCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[5.0.0]?:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]] || List&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || MaxCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KLinkedListNode =&lt;br /&gt;
Size: 0x10&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]]* || Prev&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KLinkedListNode]]* || Next&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KLinkedListEntry =&lt;br /&gt;
Size: 0x10 + &amp;lt;code&amp;gt;sizeof(T)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]] || NodeFor__List&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || T || Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KLinkedList =&lt;br /&gt;
Size: 0x18&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || Count &lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KLinkedListNode]] || Bounds (first, last)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KThread =&lt;br /&gt;
[1.0.0] Size: 0x620&lt;br /&gt;
[5.0.0]? Size: 0x6C0&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]], [[#KSchedulerObject0]], [[#KSchedulerObject1]], [[#KSchedulerObject2]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || KSchedulerObject0 || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || KSchedulerObject1 || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || KSchedulerObject2 || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || KThreadContext || Context&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F0 || u64 || CoreMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F8 || u64 || CoreMaskOverride&lt;br /&gt;
|-&lt;br /&gt;
| 0x300 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x308 || u64 || TotalTimeRunning&lt;br /&gt;
|-&lt;br /&gt;
| 0x310 || [[#KSynchronizationObject]]* || SignalledObjectPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x318 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x320 || u64 || CondVar_CondVarUserAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x328 || u64 || Entrypoint&lt;br /&gt;
|-&lt;br /&gt;
| 0x330 || u64 || CondVar_MutexUserAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x338 || [[#KProcess]]* || ProcessPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x340 || void* || KernelThreadStack&lt;br /&gt;
|-&lt;br /&gt;
| 0x348 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x350 || void* || TlsKernelPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x358 || void* || TlsPhysicalPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x360 || [[#KSynchronizationObject]]*[0x40] || SyncObjects&lt;br /&gt;
|-&lt;br /&gt;
| 0x560 || [[#KThread]]* || CondVar_NextThreadPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x568 || [[#KThread]]* || CondVar_PrevThreadPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x570 || [[#KSynchronizationObject]]* || SignalledObjectPtr?&lt;br /&gt;
|-&lt;br /&gt;
| 0x578 || KLinkedListNode ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x588 || KLinkedListNode ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x598 || KLinkedListNode || NodeFor__ThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A8 || KLinkedListNode || NodeFor__ThreadsOnSameCore&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C0 || [[#KThread]]* || CondVar_SelfPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D0 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E0 || u32 || CondVar_WaitThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E4 || u32 || SchedulingFlags_Default&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E8 || u32 || WaitSync_RetVal&lt;br /&gt;
|-&lt;br /&gt;
| 0x5EC || u32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F0 || u32 || ActualPriority&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F4 || u32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F8 || u32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5FC || u32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x600 || u32 || WantedPriority&lt;br /&gt;
|-&lt;br /&gt;
| 0x604 || u32 || CpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 0x608 || u8 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x609 || u8 || ShallBeTerminated&lt;br /&gt;
|-&lt;br /&gt;
| 0x60A || u8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x60B || u8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x60C || u8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x60D || u8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x60E || u8 || HasExited&lt;br /&gt;
|-&lt;br /&gt;
| 0x60F || u8 || HasCpuCoreOverride&lt;br /&gt;
|-&lt;br /&gt;
| ... || ... || ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KProcess =&lt;br /&gt;
[1.0.0] Size: 0x5B0&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x2480&lt;br /&gt;
&lt;br /&gt;
[3.0.0] Size: 0x2580&lt;br /&gt;
&lt;br /&gt;
[5.0.0] Size: 0x4600&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || KProcessTerminationMessage || Sent to mailbox 0 when self-terminating.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KMemoryManager]] || MemoryManager&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 || u64 || TotalMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0xF8 || [[#KLinkedList]]&amp;lt;[[#KTlsPageManager]]*&amp;gt;&amp;gt; || TlsPagesList&lt;br /&gt;
|-&lt;br /&gt;
| 0x110 || s32 || DefaultCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 0x118 || [[#KDebug]]* || Debug&lt;br /&gt;
|-&lt;br /&gt;
| 0x120 || [[#KResourceLimit]]* || ResourceLimit&lt;br /&gt;
|-&lt;br /&gt;
| 0x128 || u32 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x130 || [[#KMutex]] || ProcessMutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x138 || [[#KMutex]] || ThreadingMutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x140 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ThreadArbiterList&lt;br /&gt;
|-&lt;br /&gt;
| 0x150 || KLinkedListNode ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x160 || u64[4] || RandomEntropy&lt;br /&gt;
|-&lt;br /&gt;
| 0x180 || u8 || HasStateChanged&lt;br /&gt;
|-&lt;br /&gt;
| 0x181 || u8 || HasInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 0x182 || u8 || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x183 || u8[12+1] || ProcessName&lt;br /&gt;
|-&lt;br /&gt;
| 0x190 || u16 || NumberOfCreatedThreads&lt;br /&gt;
|-&lt;br /&gt;
| 0x192 || u16 || ThreadingRelatedInitiallyZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x194 || u32 || ProcessFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0x198 || [[#KProcessCapabilities]] || Capabilities&lt;br /&gt;
|-&lt;br /&gt;
| 0x248 || u64 || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x250 || u64 || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x258 || u64 || CreatedTickstamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x260 || u64 || Entrypoint&lt;br /&gt;
|-&lt;br /&gt;
| 0x268 || u64 || CodeMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x270 || u64 || DynamicMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x278 || u64 || MaxTotalMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x280 || u32 || ProcessCategory (0: regular title, 1: kernel built-in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x288 || [[#KProcessHandleTable]] || HandleTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x528 || void* || UsermodeExceptionTlsArea&lt;br /&gt;
|-&lt;br /&gt;
| 0x530 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ExceptionThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x540 || [[#KThread]]* || ExceptionThread&lt;br /&gt;
|-&lt;br /&gt;
| 0x548 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x558 || bool || HasStarted&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C || u32 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x560 || u64[2] || UnusedZeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x570 || u64 || TotalTimeRunning&lt;br /&gt;
|-&lt;br /&gt;
| 0x578 || u64[5] || UnusedZeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A0 || u64 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A8 || u64 || UnusedZero&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || KProcessTerminationMessage || Sent to mailbox 0 when self-terminating.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KMemoryManager]] || MemoryManager&lt;br /&gt;
|-&lt;br /&gt;
| 0x100 || u64 || TotalMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x108 || [[#KLinkedList]]&amp;lt;[[#KTlsPageManager]]*&amp;gt; || TlsPagesList&lt;br /&gt;
|-&lt;br /&gt;
| 0x120 || s32 || DefaultCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 0x128 || [[#KDebug]]* || Debug&lt;br /&gt;
|-&lt;br /&gt;
| 0x130 || [[#KResourceLimit]]* || ResourceLimit&lt;br /&gt;
|-&lt;br /&gt;
| 0x138 || u32 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x140 || [[#KMutex]] || ProcessMutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || [[#KMutex]] || ThreadingMutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x150 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ThreadArbiterList&lt;br /&gt;
|-&lt;br /&gt;
| 0x160 || KLinkedListNode ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x170 || u64[4] || RandomEntropy&lt;br /&gt;
|-&lt;br /&gt;
| 0x190 || u8 || HasStateChanged&lt;br /&gt;
|-&lt;br /&gt;
| 0x191 || u8 || HasInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 0x192 || u8 || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x193 || u8[12+1] || ProcessName&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A0 || u16 || NumberOfCreatedThreads&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A2 || u16 || ThreadingRelatedInitiallyZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A4 || u32 || ProcessFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A8 || [[#KProcessCapabilities]] || Capabilities&lt;br /&gt;
|-&lt;br /&gt;
| 0x258 || u64 || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x260 || u64 || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x268 || u64 || CreatedTickstamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x270 || u64 || Entrypoint&lt;br /&gt;
|-&lt;br /&gt;
| 0x278 || u64 || CodeMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x280 || u64 || DynamicMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x288 || u64 || MaxTotalMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x290 || u32 || ProcessCategory (0: regular title, 1: kernel built-in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x298 || u64[5] || Unused [?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C0 || [[#KProcessHandleTable]] || HandleTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2380 || void* || UsermodeExceptionTlsArea&lt;br /&gt;
|-&lt;br /&gt;
| 0x2388 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ExceptionThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x2398 || [[#KThread]]* || ExceptionThread&lt;br /&gt;
|-&lt;br /&gt;
| 0x23A0 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x23B0 || [[#KLinkedListNode]]&amp;lt;[[#KSharedMemoryRef]] *&amp;gt; || MappedSharedMemoriesList&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C0 || bool || HasStarted&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C1 || bool || HasException&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C4 || u32 || ExceptionEnum0&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C8 || u64 || ExceptionEnum1&lt;br /&gt;
|-&lt;br /&gt;
| 0x23D0 || u64 || ExceptionThreadUnkInfo0&lt;br /&gt;
|-&lt;br /&gt;
| 0x23D8 || u64 || BreakArg0&lt;br /&gt;
|-&lt;br /&gt;
| 0x23E0 || u64 || BreakArg1&lt;br /&gt;
|-&lt;br /&gt;
| 0x23E8 || u64 || BreakArg2&lt;br /&gt;
|-&lt;br /&gt;
| 0x23F0 || u64 || ExceptionThreadUnkInfo1&lt;br /&gt;
|-&lt;br /&gt;
| 0x23F8 || u32 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2400 || u64[8] || UnusedZeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2440 || u64 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2448 || u64 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2450 || u64[6] || Unused [?]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KTlsPageManager ==&lt;br /&gt;
Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || TlsPagePtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KProcess*]] || ProcessPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || UsageCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || u8[8] || IsSlotFree&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KProcessCapabilities ==&lt;br /&gt;
Size: 0xB0&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u8[16] || SvcAccessMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u8[128] || IrqAccessMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || u64 || AllowedCpuIdBitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || u64 || AllowedThreadPrioBitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || u32 || DebuggingFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4 || u32 || HandleTableSize&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || u32 || KernelReleaseVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || u32 || ApplicationType&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KProcessHandleTable ==&lt;br /&gt;
[1.0.0] Size: 0x2A0&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x20C0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KHandleEntry]]* || TablePtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KHandleEntry]]* || NextFreeEntry&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KHandleEntry]][40] || InternalTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x290 || u16 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x292 || u16 || MaxUsageAtOnce&lt;br /&gt;
|-&lt;br /&gt;
| 0x294 || u16 || IdCounter&lt;br /&gt;
|-&lt;br /&gt;
| 0x296 || u16 || NumActiveSlots&lt;br /&gt;
|-&lt;br /&gt;
| 0x298 || [[#KSpinLock]] || Lock&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KHandleEntry]]* || TablePtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KHandleEntry]]* || NextFreeEntry&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KHandleEntry]][1024] || InternalTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2010 || u16 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x2012 || u16 || MaxUsageAtOnce&lt;br /&gt;
|-&lt;br /&gt;
| 0x2014 || u16 || IdCounter&lt;br /&gt;
|-&lt;br /&gt;
| 0x2016 || u16 || NumActiveSlots&lt;br /&gt;
|-&lt;br /&gt;
| 0x2040 || [[#KSpinLock]] || Lock&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KHandleEntry ===&lt;br /&gt;
[1.0.0] Size: 0x10&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 8&lt;br /&gt;
&lt;br /&gt;
[6.0.0]? Size: 0x10&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u16 || HandleId&lt;br /&gt;
|-&lt;br /&gt;
| 2 || u8 || ObjectType&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KAutoObject]]* || Object&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u16 || HandleId&lt;br /&gt;
|-&lt;br /&gt;
| 2 || u8 || ObjectType&lt;br /&gt;
|-&lt;br /&gt;
| 4 || u32 || ObjectCompressedPtr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 6.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u16 || HandleId&lt;br /&gt;
|-&lt;br /&gt;
| 2 || u8 || ObjectType&lt;br /&gt;
|-&lt;br /&gt;
| 4 || u32 || ObjectCompressedPtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || ptr || ?&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KSpinLock ===&lt;br /&gt;
[1.0.0] Size: 0x1&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x40&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u8 || IsBusy&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u16 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u16 ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KSharedMemoryRef ==&lt;br /&gt;
[2.0.0] Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]]&amp;lt;[[#KSharedMemoryRef]] *&amp;gt; || NodeFor__MappedSharedMemoriesList&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KSharedMemory*]] || SharedMem&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || InitiallyZero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KMemoryManager =&lt;br /&gt;
[1.0.0] Size: 0xB8&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0xC8&lt;br /&gt;
&lt;br /&gt;
[5.0.0] Size: 0xF8?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || AddrSpaceMinAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || AddrSpaceMaxAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || HeapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || HeapCurAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || MapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u64 || MapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u64 || HeapMaxAllocation&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || [[#KPageTable]] || PageTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || [[#KMemoryBlockManager]] || MemoryBlockManager&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || bool || IsKernel&lt;br /&gt;
|-&lt;br /&gt;
| 0x79 || bool || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || bool || IsAddrSpace36Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || bool || HasAslr&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || u32 || Is_0x59_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || u32 || Is_0x5A_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x84 || u32 || Is_0x58_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x88 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || u64 || TranslationTableBaseRegister0&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || u64 || TranslationControlRegister&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || u8 || AsidTagValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || AddrSpaceMinAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || AddrSpaceMaxAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || HeapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || HeapCurAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || MapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u64 || MapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u64 || NewMapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || u64 || NewMapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || u64 || TlsIoRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || u64 || TlsIoRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || u64 || HeapMaxAllocation&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || [[#KPageTable]] || PageTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || [[#KMemoryBlockManager]] || MemoryBlockManager&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || u32 || AddressSpaceWidth (32/36/39)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C || bool || IsKernel&lt;br /&gt;
|-&lt;br /&gt;
| 0x9D || bool || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x9E || bool || HasAslr&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || u32 || PoolPartition&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4 || u32 || Is_0x5A_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || u32 || Is_0x59_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || u32 || Is_0x58_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || u64 || TranslationTableBaseRegister0&lt;br /&gt;
|-&lt;br /&gt;
| 0xB8 || u64 || TranslationControlRegister&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || u32 || AsidTagValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 5.0.0 Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || AddrSpaceMinAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || AddrSpaceMaxAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || HeapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || HeapCurAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || MapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u64 || MapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u64 || NewMapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || u64 || NewMapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || u64 || TlsIoRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || u64 || TlsIoRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || u64 || HeapMaxAllocation&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0x70 ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || [[#KPageTable]] || PageTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || [[#KMemoryBlockManager]] || MemoryBlockManager&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || u32 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || u32 || AddressSpaceWidth (32/36/39)&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || [[#KLinkedList]]? || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC8 ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ptr || &lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || u64 || TranslationTableBaseRegister0 val&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || u64 || TranslationControlRegister val&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 || u32 || AsidTagValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KPageTable ==&lt;br /&gt;
Size: 0x10&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || RawPageTablePtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || bool ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || u32 || AddrSpaceSizeInGb&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KMemoryBlockManager ==&lt;br /&gt;
Size: 0x18&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KMemoryBlock]]* || MemoryBlockList&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || MaxAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || MinAddr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KMemoryBlock ==&lt;br /&gt;
Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]]&amp;lt;[[#KMemoryBlock]] *&amp;gt; || NodeFor__MemoryBlockList&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || NumOfPages&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u32 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || u16 || IpcRefCount [?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || u16 || DeviceMapRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u8 || Permission&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || u8 || UnkAttribute&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || u8 || Attribute&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KMemoryBlockInfo ==&lt;br /&gt;
Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || u8 || Permission&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || u8 || Attribute&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || u8 || UnkAttribute&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u16 || IpcRefCount [?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || u16 || DeviceMapRefCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KTransferMemory =&lt;br /&gt;
Size: 0x48&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KMemoryBlockList || Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KProcess]]* || OwnerProcess&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || KMutex || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || int || Permission&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || bool || HasInited&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || bool || IsMapped&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KSharedMemory =&lt;br /&gt;
[1.0.0] Size: 0x40&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x48&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KMemoryBlockList || Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KProcess]]* || OwnerProcess&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || int || LocalPermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || int || RemotePermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KMemoryBlockList || Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KResourceLimit]]* || OwnerResourceLimit&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || OwnerProcessPid&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || int || LocalPermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || int || RemotePermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= KJitMemory =&lt;br /&gt;
[4.0.0+] Size: 0x58&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || KMemoryBlockList || Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KProcess]]* || SrcProcessPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || u8 || HasInit&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || u8 || HasMappedSlave&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || u8 || HasMappedMaster&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KPort =&lt;br /&gt;
Size: 0xA8&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KServerPort]] || ServerSide&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || [[#KClientPort]] || ClientSide&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || bool || HasInited&lt;br /&gt;
|-&lt;br /&gt;
| 0xA1 || bool || IsLight&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KServerPort ==&lt;br /&gt;
Size: 0x50&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KLinkedListNode]] || IncomingConnections&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KLinkedListNode]] || IncomingLightConnections&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KPort]]* || Parent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KClientPort ==&lt;br /&gt;
Size: 0x38&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u32 || NumSessions&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || u32 || MaxSessions&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[#KPort]]* || Parent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KSession =&lt;br /&gt;
Size: 0xB0&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KServerSession]] || ServerSide&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || [[#KClientSession]] || ClientSide&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KServerSession ==&lt;br /&gt;
Size: 0x60&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || KLinkedListNode ||  NodeFor__IncomingConnections&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KSession*]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || KLinkedListNode&amp;lt;[[#KSessionRequest]]*&amp;gt; || RequestList&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || [[#KSessionRequest]]* || ActiveRequest&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== KSessionRequest ===&lt;br /&gt;
Size: 0x158&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KLinkedListNode ||  NodeFor__RequestList&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KBufferDescriptor]][8] || BufferTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x120 || [[#KBufferDescriptor]]* || ExternalBufferTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x128 || u8 || NumSendBuffers&lt;br /&gt;
|-&lt;br /&gt;
| 0x129 || u8 || NumRecvBuffers&lt;br /&gt;
|-&lt;br /&gt;
| 0x12A || u8 || NumExchBuffers&lt;br /&gt;
|-&lt;br /&gt;
| 0x130 || [[#KThread]]* || SenderThread&lt;br /&gt;
|-&lt;br /&gt;
| 0x138 || u64 || InitiallyZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x140 || [[#KWritableEvent]]* || ForAsyncEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || u64 || CustomCmdbufAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x150 || u64 || CustomCmdbufSize&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== KBufferDescriptor ===&lt;br /&gt;
Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || UserVirtAddr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || BufferMemoryState&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KClientSession ==&lt;br /&gt;
Size: 0x38&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KSession]]* || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || bool || HasInited&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KClientPort]]* || ParentPort&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[#KProcess]]* || CreatorProcess&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KLightSession =&lt;br /&gt;
Size: 0xA8&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KLightSessionServer]] || ServerSide&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || [[#KLightSessionClient]] || ClientSide&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KLightServerSession ==&lt;br /&gt;
Size: 0x58&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KLinkedListNode || NodeFor__IncomingLightConnections&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KLightSession]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64[6] ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KLightClientSession ==&lt;br /&gt;
Size: 0x38&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KLightSession]]* || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || bool || HasInited&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KClientPort]]* || Port&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[#KProcess]]* || CreatorProcess&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KEvent =&lt;br /&gt;
Size: 0x70&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KReadableEvent]] || ReadableEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KWritableEvent]] || WritableEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || [[#KProcess]]* || Creator&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KReadableEvent ==&lt;br /&gt;
Size: 0x38&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationEvent]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || bool ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[#KEvent]]* || Parent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KWritableEvent ==&lt;br /&gt;
Size: 0x18&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KEvent]]* || Parent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KInterruptEvent ==&lt;br /&gt;
[1.0.0] Size: 0x50&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x48&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KReadableEvent]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KReadableEvent]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KInterruptReceiver]] || Receiver&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || u32 || IrqId (or -1)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KReadableEvent]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KInterruptReceiver]]* || Receiver&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u32 || IrqId (or -1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || bool || IsIrqRegistered&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KInterruptReceiver ===&lt;br /&gt;
[1.0.0] Size: 0x10&lt;br /&gt;
[2.0.0] Size: 0x20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || InitiallyZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KInterruptEvent]]* || IrqEventPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || s32 || IrqId&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= KDeviceAddressSpace =&lt;br /&gt;
Size: 0x70&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#KSmmuManager]] || Manager&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || u64 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1.0.0] It was called KAddressSpace.&lt;br /&gt;
&lt;br /&gt;
== KSmmuManager ==&lt;br /&gt;
Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u8[4] || PageTableAsids&lt;br /&gt;
|-&lt;br /&gt;
| 8 || void*[4] || PageDirectories&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || AttachedDevicesMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u32 || RegVal32Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || u32 || RegVal32BitEmpty&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u32 || RegVal36Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || u32 || RegVal36BitEmpty&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KResourceLimit =&lt;br /&gt;
Size: 0x68&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64[5] || CurrentValue&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u64[5] || LimitValue&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || [[#KMutex]] || Mutex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KPoolManager =&lt;br /&gt;
[1.0.0] Size: 0x380&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x450&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KPoolAllocator]][3] || Allocator&lt;br /&gt;
|-&lt;br /&gt;
| 0x348 || [[#KPoolRefManager]] || RefManager&lt;br /&gt;
|-&lt;br /&gt;
| 0x368 || u64 || AllocationCounter&lt;br /&gt;
|-&lt;br /&gt;
| 0x370 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x378 || [[#KMutex]] || Mutex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KPoolAllocator]] || Allocator0&lt;br /&gt;
|-&lt;br /&gt;
| 0x220 || [[#KPartitionInfo]]* || PartitionInfo0&lt;br /&gt;
|-&lt;br /&gt;
| 0x228 || [[#KPoolAllocator]] || Allocator1&lt;br /&gt;
|-&lt;br /&gt;
| 0x448 || [[#KPartitionInfo]]* || PartitionInfo1&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KPoolAllocator ==&lt;br /&gt;
[1.0.0] Size: 0x118&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x220&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || MemoryBase&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || MemorySize&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || s32 || NumPools&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#KPool]][8] || Pools&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || MemoryBase&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || MemorySize&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KPool]][8] || Pools&lt;br /&gt;
|-&lt;br /&gt;
| 0x210 || s32 || NumPools&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KPool ===&lt;br /&gt;
[1.0.0] Size: 0x20&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x40&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || KPoolHeader* || FirstFreeChunk&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || void* || SingletonTableEntryPtr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || KPoolHeader* || FirstFreeChunk&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || void* || SingletonTableEntryPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KPool]]* || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64[2] || DmaProtectionKey&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KPoolRefManager ==&lt;br /&gt;
[1.0.0] Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KPoolManager]]* || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 8 || void* || PoolBase&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || MaxPage&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u16* || RefCountTable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KObjectAllocator =&lt;br /&gt;
Size: 0x50&lt;br /&gt;
[5.0.0]? Size: 0x48&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLockedList]] || LockedList &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KSlabHeap]] || SlabHeap &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= KSlabHeap =&lt;br /&gt;
Size: 0x28&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || FreeListHead &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || u64 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || void* || HeapPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || TotalHeapSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || SingleObjectSize&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
5.0.0 (?):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || FreeListHead &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || u64 || SingleObjectSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || void* || HeapPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || void* || Start (equal to HeapPtr on init)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || void* || End&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KPageTableAllocator =&lt;br /&gt;
Size: 0x30&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u16* || RefCountTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || void* || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KIrqManager =&lt;br /&gt;
[1.0.0] Size: 0x1608&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KIrqEntry]][32] || Core0Irq&lt;br /&gt;
|-&lt;br /&gt;
| 0x200 || [[#KIrqEntry]][32] || Core1Irq&lt;br /&gt;
|-&lt;br /&gt;
| 0x400 || [[#KIrqEntry]][32] || Core2Irq&lt;br /&gt;
|-&lt;br /&gt;
| 0x600 || [[#KIrqEntry]][32] || Core3Irq&lt;br /&gt;
|-&lt;br /&gt;
| 0x800 || [[#KIrqEntry]][224] || SharedIrqs&lt;br /&gt;
|-&lt;br /&gt;
| 0x1600 || [[#KMutex]] || Mutex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KIrqEntry ==&lt;br /&gt;
[1.0.0] Size: 0x10&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KIrqReciever*]] || Receiver&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u8 || State0&lt;br /&gt;
|-&lt;br /&gt;
| 9 || u8 || State1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KDebug =&lt;br /&gt;
Size: 0x50&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KLinkedListNode]]&amp;lt;[[#KDebugEvent]]&amp;gt; || EventList&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u32 || Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || [[#KProcess]]* || ProcessPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KMutex]] || Mutex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KDebugEvent ==&lt;br /&gt;
Size: 0x60&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]]&amp;lt;[[#KDebugEvent]] *&amp;gt; || NodeFor__EventList&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || EventType&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || u32 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u32 || Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || u16 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || bool ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || ... || ...&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Kernel&amp;diff=5052</id>
		<title>Kernel</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Kernel&amp;diff=5052"/>
		<updated>2018-09-23T04:40:58Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KAutoObject =&lt;br /&gt;
Size: 0x10&lt;br /&gt;
&lt;br /&gt;
[5.0.0] Size: 0x20&lt;br /&gt;
&lt;br /&gt;
[6.0.0] Size: 0x30&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u32 || ReferenceCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[5.0.0]:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u32 || ReferenceCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KLinkedListNode || Intrusive list, links to other instances of the same class (managed by a KObjectAllocator).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[6.0.0]:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u32 || ReferenceCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || ptr || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KSynchronizationObject =&lt;br /&gt;
Size: 0x28&lt;br /&gt;
&lt;br /&gt;
[5.0.0] Size: 0x38&lt;br /&gt;
&lt;br /&gt;
[6.0.0] Size: 0x48&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KLinkedList]] || ThreadSyncList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KMutex =&lt;br /&gt;
Size: 0x8&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || OwnerTag&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KRecursiveLock =&lt;br /&gt;
Size: 0x18&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KThread]] * || Owner&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s32 || Count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= KLockedList =&lt;br /&gt;
Size: 0x28&lt;br /&gt;
&lt;br /&gt;
[5.0.0]? Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || Count&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KLinkedListNode]] || List&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || MaxCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[5.0.0]?:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]] || List&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || MaxCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KLinkedListNode =&lt;br /&gt;
Size: 0x10&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]]* || Prev&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KLinkedListNode]]* || Next&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KLinkedListEntry =&lt;br /&gt;
Size: 0x10 + &amp;lt;code&amp;gt;sizeof(T)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]] || NodeFor__List&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || T || Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KLinkedList =&lt;br /&gt;
Size: 0x18&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || Count &lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KLinkedListNode]] || Bounds (first, last)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KThread =&lt;br /&gt;
[1.0.0] Size: 0x620&lt;br /&gt;
[5.0.0]? Size: 0x6C0&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]], [[#KSchedulerObject0]], [[#KSchedulerObject1]], [[#KSchedulerObject2]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || KSchedulerObject0 || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || KSchedulerObject1 || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || KSchedulerObject2 || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || KThreadContext || Context&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F0 || u64 || CoreMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F8 || u64 || CoreMaskOverride&lt;br /&gt;
|-&lt;br /&gt;
| 0x300 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x308 || u64 || TotalTimeRunning&lt;br /&gt;
|-&lt;br /&gt;
| 0x310 || [[#KSynchronizationObject]]* || SignalledObjectPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x318 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x320 || u64 || CondVar_CondVarUserAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x328 || u64 || Entrypoint&lt;br /&gt;
|-&lt;br /&gt;
| 0x330 || u64 || CondVar_MutexUserAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x338 || [[#KProcess]]* || ProcessPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x340 || void* || KernelThreadStack&lt;br /&gt;
|-&lt;br /&gt;
| 0x348 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x350 || void* || TlsKernelPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x358 || void* || TlsPhysicalPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x360 || [[#KSynchronizationObject]]*[0x40] || SyncObjects&lt;br /&gt;
|-&lt;br /&gt;
| 0x560 || [[#KThread]]* || CondVar_NextThreadPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x568 || [[#KThread]]* || CondVar_PrevThreadPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x570 || [[#KSynchronizationObject]]* || SignalledObjectPtr?&lt;br /&gt;
|-&lt;br /&gt;
| 0x578 || KLinkedListNode ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x588 || KLinkedListNode ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x598 || KLinkedListNode || NodeFor__ThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A8 || KLinkedListNode || NodeFor__ThreadsOnSameCore&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C0 || [[#KThread]]* || CondVar_SelfPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D0 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E0 || u32 || CondVar_WaitThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E4 || u32 || SchedulingFlags_Default&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E8 || u32 || WaitSync_RetVal&lt;br /&gt;
|-&lt;br /&gt;
| 0x5EC || u32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F0 || u32 || ActualPriority&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F4 || u32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F8 || u32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5FC || u32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x600 || u32 || WantedPriority&lt;br /&gt;
|-&lt;br /&gt;
| 0x604 || u32 || CpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 0x608 || u8 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x609 || u8 || ShallBeTerminated&lt;br /&gt;
|-&lt;br /&gt;
| 0x60A || u8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x60B || u8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x60C || u8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x60D || u8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x60E || u8 || HasExited&lt;br /&gt;
|-&lt;br /&gt;
| 0x60F || u8 || HasCpuCoreOverride&lt;br /&gt;
|-&lt;br /&gt;
| ... || ... || ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KProcess =&lt;br /&gt;
[1.0.0] Size: 0x5B0&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x2480&lt;br /&gt;
&lt;br /&gt;
[3.0.0] Size: 0x2580&lt;br /&gt;
&lt;br /&gt;
[5.0.0] Size: 0x4600&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || KProcessTerminationMessage || Sent to mailbox 0 when self-terminating.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KMemoryManager]] || MemoryManager&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 || u64 || TotalMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0xF8 || [[#KLinkedList]]&amp;lt;[[#KTlsPageManager]]*&amp;gt;&amp;gt; || TlsPagesList&lt;br /&gt;
|-&lt;br /&gt;
| 0x110 || s32 || DefaultCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 0x118 || [[#KDebug]]* || Debug&lt;br /&gt;
|-&lt;br /&gt;
| 0x120 || [[#KResourceLimit]]* || ResourceLimit&lt;br /&gt;
|-&lt;br /&gt;
| 0x128 || u32 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x130 || [[#KMutex]] || ProcessMutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x138 || [[#KMutex]] || ThreadingMutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x140 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ThreadArbiterList&lt;br /&gt;
|-&lt;br /&gt;
| 0x150 || KLinkedListNode ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x160 || u64[4] || RandomEntropy&lt;br /&gt;
|-&lt;br /&gt;
| 0x180 || u8 || HasStateChanged&lt;br /&gt;
|-&lt;br /&gt;
| 0x181 || u8 || HasInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 0x182 || u8 || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x183 || u8[12+1] || ProcessName&lt;br /&gt;
|-&lt;br /&gt;
| 0x190 || u16 || NumberOfCreatedThreads&lt;br /&gt;
|-&lt;br /&gt;
| 0x192 || u16 || ThreadingRelatedInitiallyZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x194 || u32 || ProcessFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0x198 || [[#KProcessCapabilities]] || Capabilities&lt;br /&gt;
|-&lt;br /&gt;
| 0x248 || u64 || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x250 || u64 || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x258 || u64 || CreatedTickstamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x260 || u64 || Entrypoint&lt;br /&gt;
|-&lt;br /&gt;
| 0x268 || u64 || CodeMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x270 || u64 || DynamicMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x278 || u64 || MaxTotalMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x280 || u32 || ProcessCategory (0: regular title, 1: kernel built-in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x288 || [[#KProcessHandleTable]] || HandleTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x528 || void* || UsermodeExceptionTlsArea&lt;br /&gt;
|-&lt;br /&gt;
| 0x530 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ExceptionThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x540 || [[#KThread]]* || ExceptionThread&lt;br /&gt;
|-&lt;br /&gt;
| 0x548 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x558 || bool || HasStarted&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C || u32 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x560 || u64[2] || UnusedZeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x570 || u64 || TotalTimeRunning&lt;br /&gt;
|-&lt;br /&gt;
| 0x578 || u64[5] || UnusedZeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A0 || u64 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A8 || u64 || UnusedZero&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || KProcessTerminationMessage || Sent to mailbox 0 when self-terminating.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KMemoryManager]] || MemoryManager&lt;br /&gt;
|-&lt;br /&gt;
| 0x100 || u64 || TotalMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x108 || [[#KLinkedList]]&amp;lt;[[#KTlsPageManager]]*&amp;gt; || TlsPagesList&lt;br /&gt;
|-&lt;br /&gt;
| 0x120 || s32 || DefaultCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 0x128 || [[#KDebug]]* || Debug&lt;br /&gt;
|-&lt;br /&gt;
| 0x130 || [[#KResourceLimit]]* || ResourceLimit&lt;br /&gt;
|-&lt;br /&gt;
| 0x138 || u32 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x140 || [[#KMutex]] || ProcessMutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || [[#KMutex]] || ThreadingMutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x150 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ThreadArbiterList&lt;br /&gt;
|-&lt;br /&gt;
| 0x160 || KLinkedListNode ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x170 || u64[4] || RandomEntropy&lt;br /&gt;
|-&lt;br /&gt;
| 0x190 || u8 || HasStateChanged&lt;br /&gt;
|-&lt;br /&gt;
| 0x191 || u8 || HasInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 0x192 || u8 || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x193 || u8[12+1] || ProcessName&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A0 || u16 || NumberOfCreatedThreads&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A2 || u16 || ThreadingRelatedInitiallyZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A4 || u32 || ProcessFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A8 || [[#KProcessCapabilities]] || Capabilities&lt;br /&gt;
|-&lt;br /&gt;
| 0x258 || u64 || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x260 || u64 || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x268 || u64 || CreatedTickstamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x270 || u64 || Entrypoint&lt;br /&gt;
|-&lt;br /&gt;
| 0x278 || u64 || CodeMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x280 || u64 || DynamicMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x288 || u64 || MaxTotalMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x290 || u32 || ProcessCategory (0: regular title, 1: kernel built-in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x298 || u64[5] || Unused [?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C0 || [[#KProcessHandleTable]] || HandleTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2380 || void* || UsermodeExceptionTlsArea&lt;br /&gt;
|-&lt;br /&gt;
| 0x2388 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ExceptionThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x2398 || [[#KThread]]* || ExceptionThread&lt;br /&gt;
|-&lt;br /&gt;
| 0x23A0 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x23B0 || [[#KLinkedListNode]]&amp;lt;[[#KSharedMemoryRef]] *&amp;gt; || MappedSharedMemoriesList&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C0 || bool || HasStarted&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C1 || bool || HasException&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C4 || u32 || ExceptionEnum0&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C8 || u64 || ExceptionEnum1&lt;br /&gt;
|-&lt;br /&gt;
| 0x23D0 || u64 || ExceptionThreadUnkInfo0&lt;br /&gt;
|-&lt;br /&gt;
| 0x23D8 || u64 || BreakArg0&lt;br /&gt;
|-&lt;br /&gt;
| 0x23E0 || u64 || BreakArg1&lt;br /&gt;
|-&lt;br /&gt;
| 0x23E8 || u64 || BreakArg2&lt;br /&gt;
|-&lt;br /&gt;
| 0x23F0 || u64 || ExceptionThreadUnkInfo1&lt;br /&gt;
|-&lt;br /&gt;
| 0x23F8 || u32 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2400 || u64[8] || UnusedZeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2440 || u64 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2448 || u64 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2450 || u64[6] || Unused [?]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KTlsPageManager ==&lt;br /&gt;
Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || TlsPagePtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KProcess*]] || ProcessPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || UsageCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || u8[8] || IsSlotFree&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KProcessCapabilities ==&lt;br /&gt;
Size: 0xB0&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u8[16] || SvcAccessMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u8[128] || IrqAccessMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || u64 || AllowedCpuIdBitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || u64 || AllowedThreadPrioBitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || u32 || DebuggingFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4 || u32 || HandleTableSize&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || u32 || KernelReleaseVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || u32 || ApplicationType&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KProcessHandleTable ==&lt;br /&gt;
[1.0.0] Size: 0x2A0&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x20C0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KHandleEntry]]* || TablePtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KHandleEntry]]* || NextFreeEntry&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KHandleEntry]][40] || InternalTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x290 || u16 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x292 || u16 || MaxUsageAtOnce&lt;br /&gt;
|-&lt;br /&gt;
| 0x294 || u16 || IdCounter&lt;br /&gt;
|-&lt;br /&gt;
| 0x296 || u16 || NumActiveSlots&lt;br /&gt;
|-&lt;br /&gt;
| 0x298 || [[#KSpinLock]] || Lock&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KHandleEntry]]* || TablePtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KHandleEntry]]* || NextFreeEntry&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KHandleEntry]][1024] || InternalTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2010 || u16 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x2012 || u16 || MaxUsageAtOnce&lt;br /&gt;
|-&lt;br /&gt;
| 0x2014 || u16 || IdCounter&lt;br /&gt;
|-&lt;br /&gt;
| 0x2016 || u16 || NumActiveSlots&lt;br /&gt;
|-&lt;br /&gt;
| 0x2040 || [[#KSpinLock]] || Lock&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KHandleEntry ===&lt;br /&gt;
[1.0.0] Size: 0x10&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 8&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u16 || HandleId&lt;br /&gt;
|-&lt;br /&gt;
| 2 || u8 || ObjectType&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KAutoObject]]* || Object&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u16 || HandleId&lt;br /&gt;
|-&lt;br /&gt;
| 2 || u8 || ObjectType&lt;br /&gt;
|-&lt;br /&gt;
| 4 || u32 || ObjectCompressedPtr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KSpinLock ===&lt;br /&gt;
[1.0.0] Size: 0x1&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x40&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u8 || IsBusy&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u16 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u16 ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KSharedMemoryRef ==&lt;br /&gt;
[2.0.0] Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]]&amp;lt;[[#KSharedMemoryRef]] *&amp;gt; || NodeFor__MappedSharedMemoriesList&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KSharedMemory*]] || SharedMem&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || InitiallyZero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KMemoryManager =&lt;br /&gt;
[1.0.0] Size: 0xB8&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0xC8&lt;br /&gt;
&lt;br /&gt;
[5.0.0] Size: 0xF8?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || AddrSpaceMinAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || AddrSpaceMaxAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || HeapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || HeapCurAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || MapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u64 || MapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u64 || HeapMaxAllocation&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || [[#KPageTable]] || PageTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || [[#KMemoryBlockManager]] || MemoryBlockManager&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || bool || IsKernel&lt;br /&gt;
|-&lt;br /&gt;
| 0x79 || bool || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || bool || IsAddrSpace36Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || bool || HasAslr&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || u32 || Is_0x59_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || u32 || Is_0x5A_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x84 || u32 || Is_0x58_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x88 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || u64 || TranslationTableBaseRegister0&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || u64 || TranslationControlRegister&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || u8 || AsidTagValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || AddrSpaceMinAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || AddrSpaceMaxAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || HeapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || HeapCurAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || MapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u64 || MapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u64 || NewMapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || u64 || NewMapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || u64 || TlsIoRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || u64 || TlsIoRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || u64 || HeapMaxAllocation&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || [[#KPageTable]] || PageTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || [[#KMemoryBlockManager]] || MemoryBlockManager&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || u32 || AddressSpaceWidth (32/36/39)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C || bool || IsKernel&lt;br /&gt;
|-&lt;br /&gt;
| 0x9D || bool || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x9E || bool || HasAslr&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || u32 || PoolPartition&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4 || u32 || Is_0x5A_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || u32 || Is_0x59_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || u32 || Is_0x58_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || u64 || TranslationTableBaseRegister0&lt;br /&gt;
|-&lt;br /&gt;
| 0xB8 || u64 || TranslationControlRegister&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || u32 || AsidTagValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 5.0.0 Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || AddrSpaceMinAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || AddrSpaceMaxAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || HeapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || HeapCurAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || MapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u64 || MapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u64 || NewMapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || u64 || NewMapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || u64 || TlsIoRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || u64 || TlsIoRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || u64 || HeapMaxAllocation&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0x70 ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || [[#KPageTable]] || PageTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || [[#KMemoryBlockManager]] || MemoryBlockManager&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || u32 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || u32 || AddressSpaceWidth (32/36/39)&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || [[#KLinkedList]]? || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC8 ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ptr || &lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || u64 || TranslationTableBaseRegister0 val&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || u64 || TranslationControlRegister val&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 || u32 || AsidTagValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KPageTable ==&lt;br /&gt;
Size: 0x10&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || RawPageTablePtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || bool ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || u32 || AddrSpaceSizeInGb&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KMemoryBlockManager ==&lt;br /&gt;
Size: 0x18&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KMemoryBlock]]* || MemoryBlockList&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || MaxAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || MinAddr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KMemoryBlock ==&lt;br /&gt;
Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]]&amp;lt;[[#KMemoryBlock]] *&amp;gt; || NodeFor__MemoryBlockList&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || NumOfPages&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u32 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || u16 || IpcRefCount [?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || u16 || DeviceMapRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u8 || Permission&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || u8 || UnkAttribute&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || u8 || Attribute&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KMemoryBlockInfo ==&lt;br /&gt;
Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || u8 || Permission&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || u8 || Attribute&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || u8 || UnkAttribute&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u16 || IpcRefCount [?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || u16 || DeviceMapRefCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KTransferMemory =&lt;br /&gt;
Size: 0x48&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KMemoryBlockList || Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KProcess]]* || OwnerProcess&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || KMutex || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || int || Permission&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || bool || HasInited&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || bool || IsMapped&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KSharedMemory =&lt;br /&gt;
[1.0.0] Size: 0x40&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x48&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KMemoryBlockList || Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KProcess]]* || OwnerProcess&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || int || LocalPermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || int || RemotePermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KMemoryBlockList || Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KResourceLimit]]* || OwnerResourceLimit&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || OwnerProcessPid&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || int || LocalPermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || int || RemotePermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= KJitMemory =&lt;br /&gt;
[4.0.0+] Size: 0x58&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || KMemoryBlockList || Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KProcess]]* || SrcProcessPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || u8 || HasInit&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || u8 || HasMappedSlave&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || u8 || HasMappedMaster&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KPort =&lt;br /&gt;
Size: 0xA8&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KServerPort]] || ServerSide&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || [[#KClientPort]] || ClientSide&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || bool || HasInited&lt;br /&gt;
|-&lt;br /&gt;
| 0xA1 || bool || IsLight&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KServerPort ==&lt;br /&gt;
Size: 0x50&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KLinkedListNode]] || IncomingConnections&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KLinkedListNode]] || IncomingLightConnections&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KPort]]* || Parent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KClientPort ==&lt;br /&gt;
Size: 0x38&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u32 || NumSessions&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || u32 || MaxSessions&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[#KPort]]* || Parent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KSession =&lt;br /&gt;
Size: 0xB0&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KServerSession]] || ServerSide&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || [[#KClientSession]] || ClientSide&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KServerSession ==&lt;br /&gt;
Size: 0x60&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || KLinkedListNode ||  NodeFor__IncomingConnections&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KSession*]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || KLinkedListNode&amp;lt;[[#KSessionRequest]]*&amp;gt; || RequestList&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || [[#KSessionRequest]]* || ActiveRequest&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== KSessionRequest ===&lt;br /&gt;
Size: 0x158&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KLinkedListNode ||  NodeFor__RequestList&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KBufferDescriptor]][8] || BufferTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x120 || [[#KBufferDescriptor]]* || ExternalBufferTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x128 || u8 || NumSendBuffers&lt;br /&gt;
|-&lt;br /&gt;
| 0x129 || u8 || NumRecvBuffers&lt;br /&gt;
|-&lt;br /&gt;
| 0x12A || u8 || NumExchBuffers&lt;br /&gt;
|-&lt;br /&gt;
| 0x130 || [[#KThread]]* || SenderThread&lt;br /&gt;
|-&lt;br /&gt;
| 0x138 || u64 || InitiallyZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x140 || [[#KWritableEvent]]* || ForAsyncEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || u64 || CustomCmdbufAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x150 || u64 || CustomCmdbufSize&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== KBufferDescriptor ===&lt;br /&gt;
Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || UserVirtAddr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || BufferMemoryState&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KClientSession ==&lt;br /&gt;
Size: 0x38&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KSession]]* || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || bool || HasInited&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KClientPort]]* || ParentPort&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[#KProcess]]* || CreatorProcess&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KLightSession =&lt;br /&gt;
Size: 0xA8&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KLightSessionServer]] || ServerSide&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || [[#KLightSessionClient]] || ClientSide&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KLightServerSession ==&lt;br /&gt;
Size: 0x58&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KLinkedListNode || NodeFor__IncomingLightConnections&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KLightSession]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64[6] ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KLightClientSession ==&lt;br /&gt;
Size: 0x38&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KLightSession]]* || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || bool || HasInited&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KClientPort]]* || Port&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[#KProcess]]* || CreatorProcess&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KEvent =&lt;br /&gt;
Size: 0x70&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KReadableEvent]] || ReadableEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KWritableEvent]] || WritableEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || [[#KProcess]]* || Creator&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KReadableEvent ==&lt;br /&gt;
Size: 0x38&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationEvent]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || bool ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[#KEvent]]* || Parent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KWritableEvent ==&lt;br /&gt;
Size: 0x18&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KEvent]]* || Parent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KInterruptEvent ==&lt;br /&gt;
[1.0.0] Size: 0x50&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x48&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KReadableEvent]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KReadableEvent]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KInterruptReceiver]] || Receiver&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || u32 || IrqId (or -1)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KReadableEvent]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KInterruptReceiver]]* || Receiver&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u32 || IrqId (or -1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || bool || IsIrqRegistered&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KInterruptReceiver ===&lt;br /&gt;
[1.0.0] Size: 0x10&lt;br /&gt;
[2.0.0] Size: 0x20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || InitiallyZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KInterruptEvent]]* || IrqEventPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || s32 || IrqId&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= KDeviceAddressSpace =&lt;br /&gt;
Size: 0x70&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#KSmmuManager]] || Manager&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || u64 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1.0.0] It was called KAddressSpace.&lt;br /&gt;
&lt;br /&gt;
== KSmmuManager ==&lt;br /&gt;
Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u8[4] || PageTableAsids&lt;br /&gt;
|-&lt;br /&gt;
| 8 || void*[4] || PageDirectories&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || AttachedDevicesMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u32 || RegVal32Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || u32 || RegVal32BitEmpty&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u32 || RegVal36Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || u32 || RegVal36BitEmpty&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KResourceLimit =&lt;br /&gt;
Size: 0x68&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64[5] || CurrentValue&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u64[5] || LimitValue&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || [[#KMutex]] || Mutex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KPoolManager =&lt;br /&gt;
[1.0.0] Size: 0x380&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x450&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KPoolAllocator]][3] || Allocator&lt;br /&gt;
|-&lt;br /&gt;
| 0x348 || [[#KPoolRefManager]] || RefManager&lt;br /&gt;
|-&lt;br /&gt;
| 0x368 || u64 || AllocationCounter&lt;br /&gt;
|-&lt;br /&gt;
| 0x370 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x378 || [[#KMutex]] || Mutex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KPoolAllocator]] || Allocator0&lt;br /&gt;
|-&lt;br /&gt;
| 0x220 || [[#KPartitionInfo]]* || PartitionInfo0&lt;br /&gt;
|-&lt;br /&gt;
| 0x228 || [[#KPoolAllocator]] || Allocator1&lt;br /&gt;
|-&lt;br /&gt;
| 0x448 || [[#KPartitionInfo]]* || PartitionInfo1&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KPoolAllocator ==&lt;br /&gt;
[1.0.0] Size: 0x118&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x220&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || MemoryBase&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || MemorySize&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || s32 || NumPools&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#KPool]][8] || Pools&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || MemoryBase&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || MemorySize&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KPool]][8] || Pools&lt;br /&gt;
|-&lt;br /&gt;
| 0x210 || s32 || NumPools&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KPool ===&lt;br /&gt;
[1.0.0] Size: 0x20&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x40&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || KPoolHeader* || FirstFreeChunk&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || void* || SingletonTableEntryPtr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || KPoolHeader* || FirstFreeChunk&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || void* || SingletonTableEntryPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KPool]]* || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64[2] || DmaProtectionKey&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KPoolRefManager ==&lt;br /&gt;
[1.0.0] Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KPoolManager]]* || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 8 || void* || PoolBase&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || MaxPage&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u16* || RefCountTable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KObjectAllocator =&lt;br /&gt;
Size: 0x50&lt;br /&gt;
[5.0.0]? Size: 0x48&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLockedList]] || LockedList &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KSlabHeap]] || SlabHeap &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= KSlabHeap =&lt;br /&gt;
Size: 0x28&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || FreeListHead &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || u64 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || void* || HeapPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || TotalHeapSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || SingleObjectSize&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
5.0.0 (?):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || FreeListHead &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || u64 || SingleObjectSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || void* || HeapPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || void* || Start (equal to HeapPtr on init)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || void* || End&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KPageTableAllocator =&lt;br /&gt;
Size: 0x30&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u16* || RefCountTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || void* || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KIrqManager =&lt;br /&gt;
[1.0.0] Size: 0x1608&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KIrqEntry]][32] || Core0Irq&lt;br /&gt;
|-&lt;br /&gt;
| 0x200 || [[#KIrqEntry]][32] || Core1Irq&lt;br /&gt;
|-&lt;br /&gt;
| 0x400 || [[#KIrqEntry]][32] || Core2Irq&lt;br /&gt;
|-&lt;br /&gt;
| 0x600 || [[#KIrqEntry]][32] || Core3Irq&lt;br /&gt;
|-&lt;br /&gt;
| 0x800 || [[#KIrqEntry]][224] || SharedIrqs&lt;br /&gt;
|-&lt;br /&gt;
| 0x1600 || [[#KMutex]] || Mutex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KIrqEntry ==&lt;br /&gt;
[1.0.0] Size: 0x10&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KIrqReciever*]] || Receiver&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u8 || State0&lt;br /&gt;
|-&lt;br /&gt;
| 9 || u8 || State1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KDebug =&lt;br /&gt;
Size: 0x50&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KLinkedListNode]]&amp;lt;[[#KDebugEvent]]&amp;gt; || EventList&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u32 || Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || [[#KProcess]]* || ProcessPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KMutex]] || Mutex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KDebugEvent ==&lt;br /&gt;
Size: 0x60&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]]&amp;lt;[[#KDebugEvent]] *&amp;gt; || NodeFor__EventList&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || EventType&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || u32 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u32 || Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || u16 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || bool ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || ... || ...&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Kernel&amp;diff=5051</id>
		<title>Kernel</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Kernel&amp;diff=5051"/>
		<updated>2018-09-23T04:39:41Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KAutoObject =&lt;br /&gt;
Size: 0x10&lt;br /&gt;
&lt;br /&gt;
[5.0.0] Size: 0x20&lt;br /&gt;
[6.0.0] Size: 0x30&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u32 || ReferenceCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[5.0.0]:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u32 || ReferenceCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KLinkedListNode || Intrusive list, links to other instances of the same class (managed by a KObjectAllocator).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[6.0.0]:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u32 || ReferenceCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || ptr || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KSynchronizationObject =&lt;br /&gt;
Size: 0x28&lt;br /&gt;
&lt;br /&gt;
[5.0.0] Size: 0x38&lt;br /&gt;
[6.0.0] Size: 0x48&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KLinkedList]] || ThreadSyncList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KMutex =&lt;br /&gt;
Size: 0x8&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || OwnerTag&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KRecursiveLock =&lt;br /&gt;
Size: 0x18&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KThread]] * || Owner&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s32 || Count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= KLockedList =&lt;br /&gt;
Size: 0x28&lt;br /&gt;
&lt;br /&gt;
[5.0.0]? Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || Count&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KLinkedListNode]] || List&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || MaxCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[5.0.0]?:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]] || List&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || MaxCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KLinkedListNode =&lt;br /&gt;
Size: 0x10&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]]* || Prev&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KLinkedListNode]]* || Next&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KLinkedListEntry =&lt;br /&gt;
Size: 0x10 + &amp;lt;code&amp;gt;sizeof(T)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]] || NodeFor__List&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || T || Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KLinkedList =&lt;br /&gt;
Size: 0x18&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || Count &lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KLinkedListNode]] || Bounds (first, last)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KThread =&lt;br /&gt;
[1.0.0] Size: 0x620&lt;br /&gt;
[5.0.0]? Size: 0x6C0&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]], [[#KSchedulerObject0]], [[#KSchedulerObject1]], [[#KSchedulerObject2]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || KSchedulerObject0 || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || KSchedulerObject1 || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || KSchedulerObject2 || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || KThreadContext || Context&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F0 || u64 || CoreMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F8 || u64 || CoreMaskOverride&lt;br /&gt;
|-&lt;br /&gt;
| 0x300 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x308 || u64 || TotalTimeRunning&lt;br /&gt;
|-&lt;br /&gt;
| 0x310 || [[#KSynchronizationObject]]* || SignalledObjectPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x318 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x320 || u64 || CondVar_CondVarUserAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x328 || u64 || Entrypoint&lt;br /&gt;
|-&lt;br /&gt;
| 0x330 || u64 || CondVar_MutexUserAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x338 || [[#KProcess]]* || ProcessPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x340 || void* || KernelThreadStack&lt;br /&gt;
|-&lt;br /&gt;
| 0x348 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x350 || void* || TlsKernelPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x358 || void* || TlsPhysicalPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x360 || [[#KSynchronizationObject]]*[0x40] || SyncObjects&lt;br /&gt;
|-&lt;br /&gt;
| 0x560 || [[#KThread]]* || CondVar_NextThreadPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x568 || [[#KThread]]* || CondVar_PrevThreadPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x570 || [[#KSynchronizationObject]]* || SignalledObjectPtr?&lt;br /&gt;
|-&lt;br /&gt;
| 0x578 || KLinkedListNode ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x588 || KLinkedListNode ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x598 || KLinkedListNode || NodeFor__ThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A8 || KLinkedListNode || NodeFor__ThreadsOnSameCore&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C0 || [[#KThread]]* || CondVar_SelfPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D0 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E0 || u32 || CondVar_WaitThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E4 || u32 || SchedulingFlags_Default&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E8 || u32 || WaitSync_RetVal&lt;br /&gt;
|-&lt;br /&gt;
| 0x5EC || u32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F0 || u32 || ActualPriority&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F4 || u32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F8 || u32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5FC || u32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x600 || u32 || WantedPriority&lt;br /&gt;
|-&lt;br /&gt;
| 0x604 || u32 || CpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 0x608 || u8 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x609 || u8 || ShallBeTerminated&lt;br /&gt;
|-&lt;br /&gt;
| 0x60A || u8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x60B || u8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x60C || u8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x60D || u8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x60E || u8 || HasExited&lt;br /&gt;
|-&lt;br /&gt;
| 0x60F || u8 || HasCpuCoreOverride&lt;br /&gt;
|-&lt;br /&gt;
| ... || ... || ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KProcess =&lt;br /&gt;
[1.0.0] Size: 0x5B0&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x2480&lt;br /&gt;
&lt;br /&gt;
[3.0.0] Size: 0x2580&lt;br /&gt;
&lt;br /&gt;
[5.0.0] Size: 0x4600&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || KProcessTerminationMessage || Sent to mailbox 0 when self-terminating.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KMemoryManager]] || MemoryManager&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 || u64 || TotalMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0xF8 || [[#KLinkedList]]&amp;lt;[[#KTlsPageManager]]*&amp;gt;&amp;gt; || TlsPagesList&lt;br /&gt;
|-&lt;br /&gt;
| 0x110 || s32 || DefaultCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 0x118 || [[#KDebug]]* || Debug&lt;br /&gt;
|-&lt;br /&gt;
| 0x120 || [[#KResourceLimit]]* || ResourceLimit&lt;br /&gt;
|-&lt;br /&gt;
| 0x128 || u32 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x130 || [[#KMutex]] || ProcessMutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x138 || [[#KMutex]] || ThreadingMutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x140 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ThreadArbiterList&lt;br /&gt;
|-&lt;br /&gt;
| 0x150 || KLinkedListNode ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x160 || u64[4] || RandomEntropy&lt;br /&gt;
|-&lt;br /&gt;
| 0x180 || u8 || HasStateChanged&lt;br /&gt;
|-&lt;br /&gt;
| 0x181 || u8 || HasInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 0x182 || u8 || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x183 || u8[12+1] || ProcessName&lt;br /&gt;
|-&lt;br /&gt;
| 0x190 || u16 || NumberOfCreatedThreads&lt;br /&gt;
|-&lt;br /&gt;
| 0x192 || u16 || ThreadingRelatedInitiallyZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x194 || u32 || ProcessFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0x198 || [[#KProcessCapabilities]] || Capabilities&lt;br /&gt;
|-&lt;br /&gt;
| 0x248 || u64 || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x250 || u64 || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x258 || u64 || CreatedTickstamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x260 || u64 || Entrypoint&lt;br /&gt;
|-&lt;br /&gt;
| 0x268 || u64 || CodeMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x270 || u64 || DynamicMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x278 || u64 || MaxTotalMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x280 || u32 || ProcessCategory (0: regular title, 1: kernel built-in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x288 || [[#KProcessHandleTable]] || HandleTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x528 || void* || UsermodeExceptionTlsArea&lt;br /&gt;
|-&lt;br /&gt;
| 0x530 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ExceptionThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x540 || [[#KThread]]* || ExceptionThread&lt;br /&gt;
|-&lt;br /&gt;
| 0x548 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x558 || bool || HasStarted&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C || u32 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x560 || u64[2] || UnusedZeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x570 || u64 || TotalTimeRunning&lt;br /&gt;
|-&lt;br /&gt;
| 0x578 || u64[5] || UnusedZeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A0 || u64 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A8 || u64 || UnusedZero&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || KProcessTerminationMessage || Sent to mailbox 0 when self-terminating.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KMemoryManager]] || MemoryManager&lt;br /&gt;
|-&lt;br /&gt;
| 0x100 || u64 || TotalMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x108 || [[#KLinkedList]]&amp;lt;[[#KTlsPageManager]]*&amp;gt; || TlsPagesList&lt;br /&gt;
|-&lt;br /&gt;
| 0x120 || s32 || DefaultCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 0x128 || [[#KDebug]]* || Debug&lt;br /&gt;
|-&lt;br /&gt;
| 0x130 || [[#KResourceLimit]]* || ResourceLimit&lt;br /&gt;
|-&lt;br /&gt;
| 0x138 || u32 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x140 || [[#KMutex]] || ProcessMutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || [[#KMutex]] || ThreadingMutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x150 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ThreadArbiterList&lt;br /&gt;
|-&lt;br /&gt;
| 0x160 || KLinkedListNode ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x170 || u64[4] || RandomEntropy&lt;br /&gt;
|-&lt;br /&gt;
| 0x190 || u8 || HasStateChanged&lt;br /&gt;
|-&lt;br /&gt;
| 0x191 || u8 || HasInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 0x192 || u8 || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x193 || u8[12+1] || ProcessName&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A0 || u16 || NumberOfCreatedThreads&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A2 || u16 || ThreadingRelatedInitiallyZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A4 || u32 || ProcessFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A8 || [[#KProcessCapabilities]] || Capabilities&lt;br /&gt;
|-&lt;br /&gt;
| 0x258 || u64 || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x260 || u64 || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x268 || u64 || CreatedTickstamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x270 || u64 || Entrypoint&lt;br /&gt;
|-&lt;br /&gt;
| 0x278 || u64 || CodeMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x280 || u64 || DynamicMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x288 || u64 || MaxTotalMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x290 || u32 || ProcessCategory (0: regular title, 1: kernel built-in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x298 || u64[5] || Unused [?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C0 || [[#KProcessHandleTable]] || HandleTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2380 || void* || UsermodeExceptionTlsArea&lt;br /&gt;
|-&lt;br /&gt;
| 0x2388 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ExceptionThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x2398 || [[#KThread]]* || ExceptionThread&lt;br /&gt;
|-&lt;br /&gt;
| 0x23A0 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x23B0 || [[#KLinkedListNode]]&amp;lt;[[#KSharedMemoryRef]] *&amp;gt; || MappedSharedMemoriesList&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C0 || bool || HasStarted&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C1 || bool || HasException&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C4 || u32 || ExceptionEnum0&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C8 || u64 || ExceptionEnum1&lt;br /&gt;
|-&lt;br /&gt;
| 0x23D0 || u64 || ExceptionThreadUnkInfo0&lt;br /&gt;
|-&lt;br /&gt;
| 0x23D8 || u64 || BreakArg0&lt;br /&gt;
|-&lt;br /&gt;
| 0x23E0 || u64 || BreakArg1&lt;br /&gt;
|-&lt;br /&gt;
| 0x23E8 || u64 || BreakArg2&lt;br /&gt;
|-&lt;br /&gt;
| 0x23F0 || u64 || ExceptionThreadUnkInfo1&lt;br /&gt;
|-&lt;br /&gt;
| 0x23F8 || u32 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2400 || u64[8] || UnusedZeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2440 || u64 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2448 || u64 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2450 || u64[6] || Unused [?]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KTlsPageManager ==&lt;br /&gt;
Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || TlsPagePtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KProcess*]] || ProcessPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || UsageCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || u8[8] || IsSlotFree&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KProcessCapabilities ==&lt;br /&gt;
Size: 0xB0&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u8[16] || SvcAccessMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u8[128] || IrqAccessMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || u64 || AllowedCpuIdBitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || u64 || AllowedThreadPrioBitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || u32 || DebuggingFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4 || u32 || HandleTableSize&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || u32 || KernelReleaseVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || u32 || ApplicationType&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KProcessHandleTable ==&lt;br /&gt;
[1.0.0] Size: 0x2A0&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x20C0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KHandleEntry]]* || TablePtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KHandleEntry]]* || NextFreeEntry&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KHandleEntry]][40] || InternalTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x290 || u16 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x292 || u16 || MaxUsageAtOnce&lt;br /&gt;
|-&lt;br /&gt;
| 0x294 || u16 || IdCounter&lt;br /&gt;
|-&lt;br /&gt;
| 0x296 || u16 || NumActiveSlots&lt;br /&gt;
|-&lt;br /&gt;
| 0x298 || [[#KSpinLock]] || Lock&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KHandleEntry]]* || TablePtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KHandleEntry]]* || NextFreeEntry&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KHandleEntry]][1024] || InternalTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2010 || u16 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x2012 || u16 || MaxUsageAtOnce&lt;br /&gt;
|-&lt;br /&gt;
| 0x2014 || u16 || IdCounter&lt;br /&gt;
|-&lt;br /&gt;
| 0x2016 || u16 || NumActiveSlots&lt;br /&gt;
|-&lt;br /&gt;
| 0x2040 || [[#KSpinLock]] || Lock&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KHandleEntry ===&lt;br /&gt;
[1.0.0] Size: 0x10&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 8&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u16 || HandleId&lt;br /&gt;
|-&lt;br /&gt;
| 2 || u8 || ObjectType&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KAutoObject]]* || Object&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u16 || HandleId&lt;br /&gt;
|-&lt;br /&gt;
| 2 || u8 || ObjectType&lt;br /&gt;
|-&lt;br /&gt;
| 4 || u32 || ObjectCompressedPtr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KSpinLock ===&lt;br /&gt;
[1.0.0] Size: 0x1&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x40&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u8 || IsBusy&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u16 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u16 ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KSharedMemoryRef ==&lt;br /&gt;
[2.0.0] Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]]&amp;lt;[[#KSharedMemoryRef]] *&amp;gt; || NodeFor__MappedSharedMemoriesList&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KSharedMemory*]] || SharedMem&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || InitiallyZero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KMemoryManager =&lt;br /&gt;
[1.0.0] Size: 0xB8&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0xC8&lt;br /&gt;
&lt;br /&gt;
[5.0.0] Size: 0xF8?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || AddrSpaceMinAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || AddrSpaceMaxAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || HeapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || HeapCurAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || MapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u64 || MapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u64 || HeapMaxAllocation&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || [[#KPageTable]] || PageTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || [[#KMemoryBlockManager]] || MemoryBlockManager&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || bool || IsKernel&lt;br /&gt;
|-&lt;br /&gt;
| 0x79 || bool || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || bool || IsAddrSpace36Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || bool || HasAslr&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || u32 || Is_0x59_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || u32 || Is_0x5A_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x84 || u32 || Is_0x58_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x88 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || u64 || TranslationTableBaseRegister0&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || u64 || TranslationControlRegister&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || u8 || AsidTagValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || AddrSpaceMinAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || AddrSpaceMaxAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || HeapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || HeapCurAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || MapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u64 || MapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u64 || NewMapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || u64 || NewMapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || u64 || TlsIoRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || u64 || TlsIoRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || u64 || HeapMaxAllocation&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || [[#KPageTable]] || PageTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || [[#KMemoryBlockManager]] || MemoryBlockManager&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || u32 || AddressSpaceWidth (32/36/39)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C || bool || IsKernel&lt;br /&gt;
|-&lt;br /&gt;
| 0x9D || bool || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x9E || bool || HasAslr&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || u32 || PoolPartition&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4 || u32 || Is_0x5A_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || u32 || Is_0x59_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || u32 || Is_0x58_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || u64 || TranslationTableBaseRegister0&lt;br /&gt;
|-&lt;br /&gt;
| 0xB8 || u64 || TranslationControlRegister&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || u32 || AsidTagValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 5.0.0 Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || AddrSpaceMinAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || AddrSpaceMaxAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || HeapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || HeapCurAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || MapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u64 || MapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u64 || NewMapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || u64 || NewMapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || u64 || TlsIoRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || u64 || TlsIoRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || u64 || HeapMaxAllocation&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0x70 ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || [[#KPageTable]] || PageTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || [[#KMemoryBlockManager]] || MemoryBlockManager&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || u32 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || u32 || AddressSpaceWidth (32/36/39)&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || [[#KLinkedList]]? || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC8 ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ptr || &lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || u64 || TranslationTableBaseRegister0 val&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || u64 || TranslationControlRegister val&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 || u32 || AsidTagValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KPageTable ==&lt;br /&gt;
Size: 0x10&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || RawPageTablePtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || bool ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || u32 || AddrSpaceSizeInGb&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KMemoryBlockManager ==&lt;br /&gt;
Size: 0x18&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KMemoryBlock]]* || MemoryBlockList&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || MaxAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || MinAddr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KMemoryBlock ==&lt;br /&gt;
Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]]&amp;lt;[[#KMemoryBlock]] *&amp;gt; || NodeFor__MemoryBlockList&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || NumOfPages&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u32 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || u16 || IpcRefCount [?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || u16 || DeviceMapRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u8 || Permission&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || u8 || UnkAttribute&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || u8 || Attribute&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KMemoryBlockInfo ==&lt;br /&gt;
Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || u8 || Permission&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || u8 || Attribute&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || u8 || UnkAttribute&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u16 || IpcRefCount [?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || u16 || DeviceMapRefCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KTransferMemory =&lt;br /&gt;
Size: 0x48&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KMemoryBlockList || Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KProcess]]* || OwnerProcess&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || KMutex || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || int || Permission&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || bool || HasInited&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || bool || IsMapped&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KSharedMemory =&lt;br /&gt;
[1.0.0] Size: 0x40&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x48&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KMemoryBlockList || Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KProcess]]* || OwnerProcess&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || int || LocalPermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || int || RemotePermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KMemoryBlockList || Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KResourceLimit]]* || OwnerResourceLimit&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || OwnerProcessPid&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || int || LocalPermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || int || RemotePermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= KJitMemory =&lt;br /&gt;
[4.0.0+] Size: 0x58&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || KMemoryBlockList || Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KProcess]]* || SrcProcessPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || u8 || HasInit&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || u8 || HasMappedSlave&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || u8 || HasMappedMaster&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KPort =&lt;br /&gt;
Size: 0xA8&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KServerPort]] || ServerSide&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || [[#KClientPort]] || ClientSide&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || bool || HasInited&lt;br /&gt;
|-&lt;br /&gt;
| 0xA1 || bool || IsLight&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KServerPort ==&lt;br /&gt;
Size: 0x50&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KLinkedListNode]] || IncomingConnections&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KLinkedListNode]] || IncomingLightConnections&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KPort]]* || Parent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KClientPort ==&lt;br /&gt;
Size: 0x38&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u32 || NumSessions&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || u32 || MaxSessions&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[#KPort]]* || Parent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KSession =&lt;br /&gt;
Size: 0xB0&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KServerSession]] || ServerSide&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || [[#KClientSession]] || ClientSide&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KServerSession ==&lt;br /&gt;
Size: 0x60&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || KLinkedListNode ||  NodeFor__IncomingConnections&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KSession*]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || KLinkedListNode&amp;lt;[[#KSessionRequest]]*&amp;gt; || RequestList&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || [[#KSessionRequest]]* || ActiveRequest&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== KSessionRequest ===&lt;br /&gt;
Size: 0x158&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KLinkedListNode ||  NodeFor__RequestList&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KBufferDescriptor]][8] || BufferTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x120 || [[#KBufferDescriptor]]* || ExternalBufferTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x128 || u8 || NumSendBuffers&lt;br /&gt;
|-&lt;br /&gt;
| 0x129 || u8 || NumRecvBuffers&lt;br /&gt;
|-&lt;br /&gt;
| 0x12A || u8 || NumExchBuffers&lt;br /&gt;
|-&lt;br /&gt;
| 0x130 || [[#KThread]]* || SenderThread&lt;br /&gt;
|-&lt;br /&gt;
| 0x138 || u64 || InitiallyZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x140 || [[#KWritableEvent]]* || ForAsyncEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || u64 || CustomCmdbufAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x150 || u64 || CustomCmdbufSize&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== KBufferDescriptor ===&lt;br /&gt;
Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || UserVirtAddr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || BufferMemoryState&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KClientSession ==&lt;br /&gt;
Size: 0x38&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KSession]]* || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || bool || HasInited&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KClientPort]]* || ParentPort&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[#KProcess]]* || CreatorProcess&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KLightSession =&lt;br /&gt;
Size: 0xA8&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KLightSessionServer]] || ServerSide&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || [[#KLightSessionClient]] || ClientSide&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KLightServerSession ==&lt;br /&gt;
Size: 0x58&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KLinkedListNode || NodeFor__IncomingLightConnections&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KLightSession]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64[6] ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KLightClientSession ==&lt;br /&gt;
Size: 0x38&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KLightSession]]* || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || bool || HasInited&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KClientPort]]* || Port&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[#KProcess]]* || CreatorProcess&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KEvent =&lt;br /&gt;
Size: 0x70&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KReadableEvent]] || ReadableEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KWritableEvent]] || WritableEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || [[#KProcess]]* || Creator&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KReadableEvent ==&lt;br /&gt;
Size: 0x38&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationEvent]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || bool ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[#KEvent]]* || Parent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KWritableEvent ==&lt;br /&gt;
Size: 0x18&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KEvent]]* || Parent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KInterruptEvent ==&lt;br /&gt;
[1.0.0] Size: 0x50&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x48&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KReadableEvent]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KReadableEvent]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KInterruptReceiver]] || Receiver&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || u32 || IrqId (or -1)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KReadableEvent]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KInterruptReceiver]]* || Receiver&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u32 || IrqId (or -1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || bool || IsIrqRegistered&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KInterruptReceiver ===&lt;br /&gt;
[1.0.0] Size: 0x10&lt;br /&gt;
[2.0.0] Size: 0x20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || InitiallyZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KInterruptEvent]]* || IrqEventPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || s32 || IrqId&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= KDeviceAddressSpace =&lt;br /&gt;
Size: 0x70&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#KSmmuManager]] || Manager&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || u64 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1.0.0] It was called KAddressSpace.&lt;br /&gt;
&lt;br /&gt;
== KSmmuManager ==&lt;br /&gt;
Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u8[4] || PageTableAsids&lt;br /&gt;
|-&lt;br /&gt;
| 8 || void*[4] || PageDirectories&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || AttachedDevicesMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u32 || RegVal32Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || u32 || RegVal32BitEmpty&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u32 || RegVal36Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || u32 || RegVal36BitEmpty&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KResourceLimit =&lt;br /&gt;
Size: 0x68&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64[5] || CurrentValue&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u64[5] || LimitValue&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || [[#KMutex]] || Mutex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KPoolManager =&lt;br /&gt;
[1.0.0] Size: 0x380&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x450&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KPoolAllocator]][3] || Allocator&lt;br /&gt;
|-&lt;br /&gt;
| 0x348 || [[#KPoolRefManager]] || RefManager&lt;br /&gt;
|-&lt;br /&gt;
| 0x368 || u64 || AllocationCounter&lt;br /&gt;
|-&lt;br /&gt;
| 0x370 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x378 || [[#KMutex]] || Mutex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KPoolAllocator]] || Allocator0&lt;br /&gt;
|-&lt;br /&gt;
| 0x220 || [[#KPartitionInfo]]* || PartitionInfo0&lt;br /&gt;
|-&lt;br /&gt;
| 0x228 || [[#KPoolAllocator]] || Allocator1&lt;br /&gt;
|-&lt;br /&gt;
| 0x448 || [[#KPartitionInfo]]* || PartitionInfo1&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KPoolAllocator ==&lt;br /&gt;
[1.0.0] Size: 0x118&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x220&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || MemoryBase&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || MemorySize&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || s32 || NumPools&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#KPool]][8] || Pools&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || MemoryBase&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || MemorySize&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KPool]][8] || Pools&lt;br /&gt;
|-&lt;br /&gt;
| 0x210 || s32 || NumPools&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KPool ===&lt;br /&gt;
[1.0.0] Size: 0x20&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x40&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || KPoolHeader* || FirstFreeChunk&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || void* || SingletonTableEntryPtr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || KPoolHeader* || FirstFreeChunk&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || void* || SingletonTableEntryPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KPool]]* || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64[2] || DmaProtectionKey&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KPoolRefManager ==&lt;br /&gt;
[1.0.0] Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KPoolManager]]* || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 8 || void* || PoolBase&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || MaxPage&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u16* || RefCountTable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KObjectAllocator =&lt;br /&gt;
Size: 0x50&lt;br /&gt;
[5.0.0]? Size: 0x48&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLockedList]] || LockedList &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KSlabHeap]] || SlabHeap &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= KSlabHeap =&lt;br /&gt;
Size: 0x28&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || FreeListHead &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || u64 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || void* || HeapPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || TotalHeapSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || SingleObjectSize&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
5.0.0 (?):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || FreeListHead &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || u64 || SingleObjectSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || void* || HeapPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || void* || Start (equal to HeapPtr on init)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || void* || End&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KPageTableAllocator =&lt;br /&gt;
Size: 0x30&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u16* || RefCountTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || void* || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KIrqManager =&lt;br /&gt;
[1.0.0] Size: 0x1608&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KIrqEntry]][32] || Core0Irq&lt;br /&gt;
|-&lt;br /&gt;
| 0x200 || [[#KIrqEntry]][32] || Core1Irq&lt;br /&gt;
|-&lt;br /&gt;
| 0x400 || [[#KIrqEntry]][32] || Core2Irq&lt;br /&gt;
|-&lt;br /&gt;
| 0x600 || [[#KIrqEntry]][32] || Core3Irq&lt;br /&gt;
|-&lt;br /&gt;
| 0x800 || [[#KIrqEntry]][224] || SharedIrqs&lt;br /&gt;
|-&lt;br /&gt;
| 0x1600 || [[#KMutex]] || Mutex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KIrqEntry ==&lt;br /&gt;
[1.0.0] Size: 0x10&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KIrqReciever*]] || Receiver&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u8 || State0&lt;br /&gt;
|-&lt;br /&gt;
| 9 || u8 || State1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KDebug =&lt;br /&gt;
Size: 0x50&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KLinkedListNode]]&amp;lt;[[#KDebugEvent]]&amp;gt; || EventList&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u32 || Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || [[#KProcess]]* || ProcessPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KMutex]] || Mutex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KDebugEvent ==&lt;br /&gt;
Size: 0x60&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]]&amp;lt;[[#KDebugEvent]] *&amp;gt; || NodeFor__EventList&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || EventType&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || u32 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u32 || Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || u16 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || bool ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || ... || ...&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Kernel&amp;diff=5048</id>
		<title>Kernel</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Kernel&amp;diff=5048"/>
		<updated>2018-09-23T01:43:25Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: /* KAutoObject */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KAutoObject =&lt;br /&gt;
Size: 0x10&lt;br /&gt;
&lt;br /&gt;
[5.0.0] Size: 0x20&lt;br /&gt;
[6.0.0] Size: 0x30&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u32 || ReferenceCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[5.0.0]:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u32 || ReferenceCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KLinkedListNode || Intrusive list, links to other instances of the same class (managed by a KObjectAllocator).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[6.0.0]:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u32 || ReferenceCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || ptr || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KSynchronizationObject =&lt;br /&gt;
Size: 0x28&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KLinkedList]] || ThreadSyncList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KMutex =&lt;br /&gt;
Size: 0x8&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || OwnerTag&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KRecursiveLock =&lt;br /&gt;
Size: 0x18&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KThread]] * || Owner&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s32 || Count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= KLockedList =&lt;br /&gt;
Size: 0x28&lt;br /&gt;
&lt;br /&gt;
[5.0.0]? Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || Count&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KLinkedListNode]] || List&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || MaxCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[5.0.0]?:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]] || List&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || MaxCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KLinkedListNode =&lt;br /&gt;
Size: 0x10&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]]* || Prev&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KLinkedListNode]]* || Next&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KLinkedListEntry =&lt;br /&gt;
Size: 0x10 + &amp;lt;code&amp;gt;sizeof(T)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]] || NodeFor__List&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || T || Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KLinkedList =&lt;br /&gt;
Size: 0x18&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || Count &lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KLinkedListNode]] || Bounds (first, last)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KThread =&lt;br /&gt;
[1.0.0] Size: 0x620&lt;br /&gt;
[5.0.0]? Size: 0x6C0&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]], [[#KSchedulerObject0]], [[#KSchedulerObject1]], [[#KSchedulerObject2]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || KSchedulerObject0 || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || KSchedulerObject1 || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || KSchedulerObject2 || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || KThreadContext || Context&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F0 || u64 || CoreMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F8 || u64 || CoreMaskOverride&lt;br /&gt;
|-&lt;br /&gt;
| 0x300 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x308 || u64 || TotalTimeRunning&lt;br /&gt;
|-&lt;br /&gt;
| 0x310 || [[#KSynchronizationObject]]* || SignalledObjectPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x318 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x320 || u64 || CondVar_CondVarUserAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x328 || u64 || Entrypoint&lt;br /&gt;
|-&lt;br /&gt;
| 0x330 || u64 || CondVar_MutexUserAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x338 || [[#KProcess]]* || ProcessPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x340 || void* || KernelThreadStack&lt;br /&gt;
|-&lt;br /&gt;
| 0x348 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x350 || void* || TlsKernelPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x358 || void* || TlsPhysicalPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x360 || [[#KSynchronizationObject]]*[0x40] || SyncObjects&lt;br /&gt;
|-&lt;br /&gt;
| 0x560 || [[#KThread]]* || CondVar_NextThreadPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x568 || [[#KThread]]* || CondVar_PrevThreadPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x570 || [[#KSynchronizationObject]]* || SignalledObjectPtr?&lt;br /&gt;
|-&lt;br /&gt;
| 0x578 || KLinkedListNode ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x588 || KLinkedListNode ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x598 || KLinkedListNode || NodeFor__ThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A8 || KLinkedListNode || NodeFor__ThreadsOnSameCore&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C0 || [[#KThread]]* || CondVar_SelfPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D0 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E0 || u32 || CondVar_WaitThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E4 || u32 || SchedulingFlags_Default&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E8 || u32 || WaitSync_RetVal&lt;br /&gt;
|-&lt;br /&gt;
| 0x5EC || u32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F0 || u32 || ActualPriority&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F4 || u32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F8 || u32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5FC || u32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x600 || u32 || WantedPriority&lt;br /&gt;
|-&lt;br /&gt;
| 0x604 || u32 || CpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 0x608 || u8 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x609 || u8 || ShallBeTerminated&lt;br /&gt;
|-&lt;br /&gt;
| 0x60A || u8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x60B || u8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x60C || u8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x60D || u8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x60E || u8 || HasExited&lt;br /&gt;
|-&lt;br /&gt;
| 0x60F || u8 || HasCpuCoreOverride&lt;br /&gt;
|-&lt;br /&gt;
| ... || ... || ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KProcess =&lt;br /&gt;
[1.0.0] Size: 0x5B0&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x2480&lt;br /&gt;
&lt;br /&gt;
[3.0.0] Size: 0x2580&lt;br /&gt;
&lt;br /&gt;
[5.0.0] Size: 0x4600&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || KProcessTerminationMessage || Sent to mailbox 0 when self-terminating.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KMemoryManager]] || MemoryManager&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 || u64 || TotalMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0xF8 || [[#KLinkedList]]&amp;lt;[[#KTlsPageManager]]*&amp;gt;&amp;gt; || TlsPagesList&lt;br /&gt;
|-&lt;br /&gt;
| 0x110 || s32 || DefaultCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 0x118 || [[#KDebug]]* || Debug&lt;br /&gt;
|-&lt;br /&gt;
| 0x120 || [[#KResourceLimit]]* || ResourceLimit&lt;br /&gt;
|-&lt;br /&gt;
| 0x128 || u32 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x130 || [[#KMutex]] || ProcessMutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x138 || [[#KMutex]] || ThreadingMutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x140 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ThreadArbiterList&lt;br /&gt;
|-&lt;br /&gt;
| 0x150 || KLinkedListNode ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x160 || u64[4] || RandomEntropy&lt;br /&gt;
|-&lt;br /&gt;
| 0x180 || u8 || HasStateChanged&lt;br /&gt;
|-&lt;br /&gt;
| 0x181 || u8 || HasInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 0x182 || u8 || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x183 || u8[12+1] || ProcessName&lt;br /&gt;
|-&lt;br /&gt;
| 0x190 || u16 || NumberOfCreatedThreads&lt;br /&gt;
|-&lt;br /&gt;
| 0x192 || u16 || ThreadingRelatedInitiallyZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x194 || u32 || ProcessFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0x198 || [[#KProcessCapabilities]] || Capabilities&lt;br /&gt;
|-&lt;br /&gt;
| 0x248 || u64 || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x250 || u64 || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x258 || u64 || CreatedTickstamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x260 || u64 || Entrypoint&lt;br /&gt;
|-&lt;br /&gt;
| 0x268 || u64 || CodeMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x270 || u64 || DynamicMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x278 || u64 || MaxTotalMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x280 || u32 || ProcessCategory (0: regular title, 1: kernel built-in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x288 || [[#KProcessHandleTable]] || HandleTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x528 || void* || UsermodeExceptionTlsArea&lt;br /&gt;
|-&lt;br /&gt;
| 0x530 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ExceptionThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x540 || [[#KThread]]* || ExceptionThread&lt;br /&gt;
|-&lt;br /&gt;
| 0x548 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x558 || bool || HasStarted&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C || u32 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x560 || u64[2] || UnusedZeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x570 || u64 || TotalTimeRunning&lt;br /&gt;
|-&lt;br /&gt;
| 0x578 || u64[5] || UnusedZeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A0 || u64 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A8 || u64 || UnusedZero&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || KProcessTerminationMessage || Sent to mailbox 0 when self-terminating.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KMemoryManager]] || MemoryManager&lt;br /&gt;
|-&lt;br /&gt;
| 0x100 || u64 || TotalMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x108 || [[#KLinkedList]]&amp;lt;[[#KTlsPageManager]]*&amp;gt; || TlsPagesList&lt;br /&gt;
|-&lt;br /&gt;
| 0x120 || s32 || DefaultCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 0x128 || [[#KDebug]]* || Debug&lt;br /&gt;
|-&lt;br /&gt;
| 0x130 || [[#KResourceLimit]]* || ResourceLimit&lt;br /&gt;
|-&lt;br /&gt;
| 0x138 || u32 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x140 || [[#KMutex]] || ProcessMutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || [[#KMutex]] || ThreadingMutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x150 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ThreadArbiterList&lt;br /&gt;
|-&lt;br /&gt;
| 0x160 || KLinkedListNode ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x170 || u64[4] || RandomEntropy&lt;br /&gt;
|-&lt;br /&gt;
| 0x190 || u8 || HasStateChanged&lt;br /&gt;
|-&lt;br /&gt;
| 0x191 || u8 || HasInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 0x192 || u8 || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x193 || u8[12+1] || ProcessName&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A0 || u16 || NumberOfCreatedThreads&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A2 || u16 || ThreadingRelatedInitiallyZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A4 || u32 || ProcessFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A8 || [[#KProcessCapabilities]] || Capabilities&lt;br /&gt;
|-&lt;br /&gt;
| 0x258 || u64 || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x260 || u64 || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x268 || u64 || CreatedTickstamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x270 || u64 || Entrypoint&lt;br /&gt;
|-&lt;br /&gt;
| 0x278 || u64 || CodeMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x280 || u64 || DynamicMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x288 || u64 || MaxTotalMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x290 || u32 || ProcessCategory (0: regular title, 1: kernel built-in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x298 || u64[5] || Unused [?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C0 || [[#KProcessHandleTable]] || HandleTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2380 || void* || UsermodeExceptionTlsArea&lt;br /&gt;
|-&lt;br /&gt;
| 0x2388 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ExceptionThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x2398 || [[#KThread]]* || ExceptionThread&lt;br /&gt;
|-&lt;br /&gt;
| 0x23A0 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x23B0 || [[#KLinkedListNode]]&amp;lt;[[#KSharedMemoryRef]] *&amp;gt; || MappedSharedMemoriesList&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C0 || bool || HasStarted&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C1 || bool || HasException&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C4 || u32 || ExceptionEnum0&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C8 || u64 || ExceptionEnum1&lt;br /&gt;
|-&lt;br /&gt;
| 0x23D0 || u64 || ExceptionThreadUnkInfo0&lt;br /&gt;
|-&lt;br /&gt;
| 0x23D8 || u64 || BreakArg0&lt;br /&gt;
|-&lt;br /&gt;
| 0x23E0 || u64 || BreakArg1&lt;br /&gt;
|-&lt;br /&gt;
| 0x23E8 || u64 || BreakArg2&lt;br /&gt;
|-&lt;br /&gt;
| 0x23F0 || u64 || ExceptionThreadUnkInfo1&lt;br /&gt;
|-&lt;br /&gt;
| 0x23F8 || u32 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2400 || u64[8] || UnusedZeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2440 || u64 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2448 || u64 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2450 || u64[6] || Unused [?]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KTlsPageManager ==&lt;br /&gt;
Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || TlsPagePtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KProcess*]] || ProcessPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || UsageCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || u8[8] || IsSlotFree&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KProcessCapabilities ==&lt;br /&gt;
Size: 0xB0&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u8[16] || SvcAccessMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u8[128] || IrqAccessMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || u64 || AllowedCpuIdBitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || u64 || AllowedThreadPrioBitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || u32 || DebuggingFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4 || u32 || HandleTableSize&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || u32 || KernelReleaseVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || u32 || ApplicationType&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KProcessHandleTable ==&lt;br /&gt;
[1.0.0] Size: 0x2A0&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x20C0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KHandleEntry]]* || TablePtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KHandleEntry]]* || NextFreeEntry&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KHandleEntry]][40] || InternalTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x290 || u16 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x292 || u16 || MaxUsageAtOnce&lt;br /&gt;
|-&lt;br /&gt;
| 0x294 || u16 || IdCounter&lt;br /&gt;
|-&lt;br /&gt;
| 0x296 || u16 || NumActiveSlots&lt;br /&gt;
|-&lt;br /&gt;
| 0x298 || [[#KSpinLock]] || Lock&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KHandleEntry]]* || TablePtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KHandleEntry]]* || NextFreeEntry&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KHandleEntry]][1024] || InternalTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2010 || u16 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x2012 || u16 || MaxUsageAtOnce&lt;br /&gt;
|-&lt;br /&gt;
| 0x2014 || u16 || IdCounter&lt;br /&gt;
|-&lt;br /&gt;
| 0x2016 || u16 || NumActiveSlots&lt;br /&gt;
|-&lt;br /&gt;
| 0x2040 || [[#KSpinLock]] || Lock&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KHandleEntry ===&lt;br /&gt;
[1.0.0] Size: 0x10&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 8&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u16 || HandleId&lt;br /&gt;
|-&lt;br /&gt;
| 2 || u8 || ObjectType&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KAutoObject]]* || Object&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u16 || HandleId&lt;br /&gt;
|-&lt;br /&gt;
| 2 || u8 || ObjectType&lt;br /&gt;
|-&lt;br /&gt;
| 4 || u32 || ObjectCompressedPtr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KSpinLock ===&lt;br /&gt;
[1.0.0] Size: 0x1&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x40&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u8 || IsBusy&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u16 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u16 ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KSharedMemoryRef ==&lt;br /&gt;
[2.0.0] Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]]&amp;lt;[[#KSharedMemoryRef]] *&amp;gt; || NodeFor__MappedSharedMemoriesList&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KSharedMemory*]] || SharedMem&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || InitiallyZero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KMemoryManager =&lt;br /&gt;
[1.0.0] Size: 0xB8&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0xC8&lt;br /&gt;
&lt;br /&gt;
[5.0.0] Size: 0xF8?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || AddrSpaceMinAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || AddrSpaceMaxAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || HeapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || HeapCurAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || MapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u64 || MapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u64 || HeapMaxAllocation&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || [[#KPageTable]] || PageTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || [[#KMemoryBlockManager]] || MemoryBlockManager&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || bool || IsKernel&lt;br /&gt;
|-&lt;br /&gt;
| 0x79 || bool || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || bool || IsAddrSpace36Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || bool || HasAslr&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || u32 || Is_0x59_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || u32 || Is_0x5A_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x84 || u32 || Is_0x58_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x88 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || u64 || TranslationTableBaseRegister0&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || u64 || TranslationControlRegister&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || u8 || AsidTagValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || AddrSpaceMinAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || AddrSpaceMaxAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || HeapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || HeapCurAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || MapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u64 || MapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u64 || NewMapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || u64 || NewMapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || u64 || TlsIoRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || u64 || TlsIoRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || u64 || HeapMaxAllocation&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || [[#KPageTable]] || PageTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || [[#KMemoryBlockManager]] || MemoryBlockManager&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || u32 || AddressSpaceWidth (32/36/39)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C || bool || IsKernel&lt;br /&gt;
|-&lt;br /&gt;
| 0x9D || bool || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x9E || bool || HasAslr&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || u32 || PoolPartition&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4 || u32 || Is_0x5A_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || u32 || Is_0x59_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || u32 || Is_0x58_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || u64 || TranslationTableBaseRegister0&lt;br /&gt;
|-&lt;br /&gt;
| 0xB8 || u64 || TranslationControlRegister&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || u32 || AsidTagValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 5.0.0 Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || AddrSpaceMinAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || AddrSpaceMaxAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || HeapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || HeapCurAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || MapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u64 || MapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u64 || NewMapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || u64 || NewMapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || u64 || TlsIoRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || u64 || TlsIoRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || u64 || HeapMaxAllocation&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0x70 ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || [[#KPageTable]] || PageTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || [[#KMemoryBlockManager]] || MemoryBlockManager&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || u32 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || u32 || AddressSpaceWidth (32/36/39)&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || [[#KLinkedList]]? || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC8 ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ptr || &lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || u64 || TranslationTableBaseRegister0 val&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || u64 || TranslationControlRegister val&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 || u32 || AsidTagValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KPageTable ==&lt;br /&gt;
Size: 0x10&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || RawPageTablePtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || bool ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || u32 || AddrSpaceSizeInGb&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KMemoryBlockManager ==&lt;br /&gt;
Size: 0x18&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KMemoryBlock]]* || MemoryBlockList&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || MaxAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || MinAddr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KMemoryBlock ==&lt;br /&gt;
Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]]&amp;lt;[[#KMemoryBlock]] *&amp;gt; || NodeFor__MemoryBlockList&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || NumOfPages&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u32 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || u16 || IpcRefCount [?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || u16 || DeviceMapRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u8 || Permission&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || u8 || UnkAttribute&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || u8 || Attribute&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KMemoryBlockInfo ==&lt;br /&gt;
Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || u8 || Permission&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || u8 || Attribute&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || u8 || UnkAttribute&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u16 || IpcRefCount [?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || u16 || DeviceMapRefCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KTransferMemory =&lt;br /&gt;
Size: 0x48&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KMemoryBlockList || Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KProcess]]* || OwnerProcess&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || KMutex || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || int || Permission&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || bool || HasInited&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || bool || IsMapped&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KSharedMemory =&lt;br /&gt;
[1.0.0] Size: 0x40&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x48&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KMemoryBlockList || Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KProcess]]* || OwnerProcess&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || int || LocalPermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || int || RemotePermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KMemoryBlockList || Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KResourceLimit]]* || OwnerResourceLimit&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || OwnerProcessPid&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || int || LocalPermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || int || RemotePermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= KJitMemory =&lt;br /&gt;
[4.0.0+] Size: 0x58&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || KMemoryBlockList || Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KProcess]]* || SrcProcessPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || u8 || HasInit&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || u8 || HasMappedSlave&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || u8 || HasMappedMaster&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KPort =&lt;br /&gt;
Size: 0xA8&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KServerPort]] || ServerSide&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || [[#KClientPort]] || ClientSide&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || bool || HasInited&lt;br /&gt;
|-&lt;br /&gt;
| 0xA1 || bool || IsLight&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KServerPort ==&lt;br /&gt;
Size: 0x50&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KLinkedListNode]] || IncomingConnections&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KLinkedListNode]] || IncomingLightConnections&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KPort]]* || Parent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KClientPort ==&lt;br /&gt;
Size: 0x38&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u32 || NumSessions&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || u32 || MaxSessions&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[#KPort]]* || Parent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KSession =&lt;br /&gt;
Size: 0xB0&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KServerSession]] || ServerSide&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || [[#KClientSession]] || ClientSide&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KServerSession ==&lt;br /&gt;
Size: 0x60&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || KLinkedListNode ||  NodeFor__IncomingConnections&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KSession*]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || KLinkedListNode&amp;lt;[[#KSessionRequest]]*&amp;gt; || RequestList&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || [[#KSessionRequest]]* || ActiveRequest&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== KSessionRequest ===&lt;br /&gt;
Size: 0x158&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KLinkedListNode ||  NodeFor__RequestList&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KBufferDescriptor]][8] || BufferTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x120 || [[#KBufferDescriptor]]* || ExternalBufferTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x128 || u8 || NumSendBuffers&lt;br /&gt;
|-&lt;br /&gt;
| 0x129 || u8 || NumRecvBuffers&lt;br /&gt;
|-&lt;br /&gt;
| 0x12A || u8 || NumExchBuffers&lt;br /&gt;
|-&lt;br /&gt;
| 0x130 || [[#KThread]]* || SenderThread&lt;br /&gt;
|-&lt;br /&gt;
| 0x138 || u64 || InitiallyZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x140 || [[#KWritableEvent]]* || ForAsyncEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || u64 || CustomCmdbufAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x150 || u64 || CustomCmdbufSize&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== KBufferDescriptor ===&lt;br /&gt;
Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || UserVirtAddr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || BufferMemoryState&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KClientSession ==&lt;br /&gt;
Size: 0x38&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KSession]]* || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || bool || HasInited&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KClientPort]]* || ParentPort&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[#KProcess]]* || CreatorProcess&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KLightSession =&lt;br /&gt;
Size: 0xA8&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KLightSessionServer]] || ServerSide&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || [[#KLightSessionClient]] || ClientSide&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KLightServerSession ==&lt;br /&gt;
Size: 0x58&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KLinkedListNode || NodeFor__IncomingLightConnections&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KLightSession]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64[6] ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KLightClientSession ==&lt;br /&gt;
Size: 0x38&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KLightSession]]* || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || bool || HasInited&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KClientPort]]* || Port&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[#KProcess]]* || CreatorProcess&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KEvent =&lt;br /&gt;
Size: 0x70&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KReadableEvent]] || ReadableEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KWritableEvent]] || WritableEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || [[#KProcess]]* || Creator&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KReadableEvent ==&lt;br /&gt;
Size: 0x38&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationEvent]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || bool ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[#KEvent]]* || Parent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KWritableEvent ==&lt;br /&gt;
Size: 0x18&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KEvent]]* || Parent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KInterruptEvent ==&lt;br /&gt;
[1.0.0] Size: 0x50&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x48&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KReadableEvent]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KReadableEvent]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KInterruptReceiver]] || Receiver&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || u32 || IrqId (or -1)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KReadableEvent]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KInterruptReceiver]]* || Receiver&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u32 || IrqId (or -1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || bool || IsIrqRegistered&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KInterruptReceiver ===&lt;br /&gt;
[1.0.0] Size: 0x10&lt;br /&gt;
[2.0.0] Size: 0x20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || InitiallyZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KInterruptEvent]]* || IrqEventPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || s32 || IrqId&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= KDeviceAddressSpace =&lt;br /&gt;
Size: 0x70&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#KSmmuManager]] || Manager&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || u64 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1.0.0] It was called KAddressSpace.&lt;br /&gt;
&lt;br /&gt;
== KSmmuManager ==&lt;br /&gt;
Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u8[4] || PageTableAsids&lt;br /&gt;
|-&lt;br /&gt;
| 8 || void*[4] || PageDirectories&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || AttachedDevicesMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u32 || RegVal32Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || u32 || RegVal32BitEmpty&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u32 || RegVal36Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || u32 || RegVal36BitEmpty&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KResourceLimit =&lt;br /&gt;
Size: 0x68&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64[5] || CurrentValue&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u64[5] || LimitValue&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || [[#KMutex]] || Mutex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KPoolManager =&lt;br /&gt;
[1.0.0] Size: 0x380&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x450&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KPoolAllocator]][3] || Allocator&lt;br /&gt;
|-&lt;br /&gt;
| 0x348 || [[#KPoolRefManager]] || RefManager&lt;br /&gt;
|-&lt;br /&gt;
| 0x368 || u64 || AllocationCounter&lt;br /&gt;
|-&lt;br /&gt;
| 0x370 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x378 || [[#KMutex]] || Mutex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KPoolAllocator]] || Allocator0&lt;br /&gt;
|-&lt;br /&gt;
| 0x220 || [[#KPartitionInfo]]* || PartitionInfo0&lt;br /&gt;
|-&lt;br /&gt;
| 0x228 || [[#KPoolAllocator]] || Allocator1&lt;br /&gt;
|-&lt;br /&gt;
| 0x448 || [[#KPartitionInfo]]* || PartitionInfo1&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KPoolAllocator ==&lt;br /&gt;
[1.0.0] Size: 0x118&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x220&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || MemoryBase&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || MemorySize&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || s32 || NumPools&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#KPool]][8] || Pools&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || MemoryBase&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || MemorySize&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KPool]][8] || Pools&lt;br /&gt;
|-&lt;br /&gt;
| 0x210 || s32 || NumPools&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KPool ===&lt;br /&gt;
[1.0.0] Size: 0x20&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x40&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || KPoolHeader* || FirstFreeChunk&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || void* || SingletonTableEntryPtr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || KPoolHeader* || FirstFreeChunk&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || void* || SingletonTableEntryPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KPool]]* || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64[2] || DmaProtectionKey&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KPoolRefManager ==&lt;br /&gt;
[1.0.0] Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KPoolManager]]* || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 8 || void* || PoolBase&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || MaxPage&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u16* || RefCountTable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KObjectAllocator =&lt;br /&gt;
Size: 0x50&lt;br /&gt;
[5.0.0]? Size: 0x48&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLockedList]] || LockedList &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KSlabHeap]] || SlabHeap &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= KSlabHeap =&lt;br /&gt;
Size: 0x28&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || FreeListHead &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || u64 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || void* || HeapPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || TotalHeapSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || SingleObjectSize&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
5.0.0 (?):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || FreeListHead &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || u64 || SingleObjectSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || void* || HeapPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || void* || Start (equal to HeapPtr on init)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || void* || End&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KPageTableAllocator =&lt;br /&gt;
Size: 0x30&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u16* || RefCountTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || void* || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KIrqManager =&lt;br /&gt;
[1.0.0] Size: 0x1608&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KIrqEntry]][32] || Core0Irq&lt;br /&gt;
|-&lt;br /&gt;
| 0x200 || [[#KIrqEntry]][32] || Core1Irq&lt;br /&gt;
|-&lt;br /&gt;
| 0x400 || [[#KIrqEntry]][32] || Core2Irq&lt;br /&gt;
|-&lt;br /&gt;
| 0x600 || [[#KIrqEntry]][32] || Core3Irq&lt;br /&gt;
|-&lt;br /&gt;
| 0x800 || [[#KIrqEntry]][224] || SharedIrqs&lt;br /&gt;
|-&lt;br /&gt;
| 0x1600 || [[#KMutex]] || Mutex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KIrqEntry ==&lt;br /&gt;
[1.0.0] Size: 0x10&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KIrqReciever*]] || Receiver&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u8 || State0&lt;br /&gt;
|-&lt;br /&gt;
| 9 || u8 || State1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KDebug =&lt;br /&gt;
Size: 0x50&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KLinkedListNode]]&amp;lt;[[#KDebugEvent]]&amp;gt; || EventList&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u32 || Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || [[#KProcess]]* || ProcessPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KMutex]] || Mutex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KDebugEvent ==&lt;br /&gt;
Size: 0x60&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]]&amp;lt;[[#KDebugEvent]] *&amp;gt; || NodeFor__EventList&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || EventType&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || u32 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u32 || Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || u16 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || bool ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || ... || ...&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Kernel&amp;diff=5047</id>
		<title>Kernel</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Kernel&amp;diff=5047"/>
		<updated>2018-09-23T01:22:53Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KAutoObject =&lt;br /&gt;
Size: 0x10&lt;br /&gt;
[5.0.0] Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u32 || ReferenceCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[5.0.0]:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u32 || ReferenceCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KLinkedListNode || Intrusive list, links to other instances of the same class (managed by a KObjectAllocator).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KSynchronizationObject =&lt;br /&gt;
Size: 0x28&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KLinkedList]] || ThreadSyncList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KMutex =&lt;br /&gt;
Size: 0x8&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || OwnerTag&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KRecursiveLock =&lt;br /&gt;
Size: 0x18&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KThread]] * || Owner&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s32 || Count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= KLockedList =&lt;br /&gt;
Size: 0x28&lt;br /&gt;
&lt;br /&gt;
[5.0.0]? Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || Count&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KLinkedListNode]] || List&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || MaxCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[5.0.0]?:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]] || List&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || MaxCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KLinkedListNode =&lt;br /&gt;
Size: 0x10&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]]* || Prev&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KLinkedListNode]]* || Next&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KLinkedListEntry =&lt;br /&gt;
Size: 0x10 + &amp;lt;code&amp;gt;sizeof(T)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]] || NodeFor__List&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || T || Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KLinkedList =&lt;br /&gt;
Size: 0x18&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || Count &lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KLinkedListNode]] || Bounds (first, last)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KThread =&lt;br /&gt;
[1.0.0] Size: 0x620&lt;br /&gt;
[5.0.0]? Size: 0x6C0&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]], [[#KSchedulerObject0]], [[#KSchedulerObject1]], [[#KSchedulerObject2]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || KSchedulerObject0 || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || KSchedulerObject1 || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || KSchedulerObject2 || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || KThreadContext || Context&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F0 || u64 || CoreMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F8 || u64 || CoreMaskOverride&lt;br /&gt;
|-&lt;br /&gt;
| 0x300 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x308 || u64 || TotalTimeRunning&lt;br /&gt;
|-&lt;br /&gt;
| 0x310 || [[#KSynchronizationObject]]* || SignalledObjectPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x318 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x320 || u64 || CondVar_CondVarUserAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x328 || u64 || Entrypoint&lt;br /&gt;
|-&lt;br /&gt;
| 0x330 || u64 || CondVar_MutexUserAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x338 || [[#KProcess]]* || ProcessPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x340 || void* || KernelThreadStack&lt;br /&gt;
|-&lt;br /&gt;
| 0x348 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x350 || void* || TlsKernelPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x358 || void* || TlsPhysicalPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x360 || [[#KSynchronizationObject]]*[0x40] || SyncObjects&lt;br /&gt;
|-&lt;br /&gt;
| 0x560 || [[#KThread]]* || CondVar_NextThreadPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x568 || [[#KThread]]* || CondVar_PrevThreadPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x570 || [[#KSynchronizationObject]]* || SignalledObjectPtr?&lt;br /&gt;
|-&lt;br /&gt;
| 0x578 || KLinkedListNode ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x588 || KLinkedListNode ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x598 || KLinkedListNode || NodeFor__ThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A8 || KLinkedListNode || NodeFor__ThreadsOnSameCore&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C0 || [[#KThread]]* || CondVar_SelfPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D0 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E0 || u32 || CondVar_WaitThreadHandle&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E4 || u32 || SchedulingFlags_Default&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E8 || u32 || WaitSync_RetVal&lt;br /&gt;
|-&lt;br /&gt;
| 0x5EC || u32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F0 || u32 || ActualPriority&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F4 || u32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F8 || u32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x5FC || u32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x600 || u32 || WantedPriority&lt;br /&gt;
|-&lt;br /&gt;
| 0x604 || u32 || CpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 0x608 || u8 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x609 || u8 || ShallBeTerminated&lt;br /&gt;
|-&lt;br /&gt;
| 0x60A || u8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x60B || u8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x60C || u8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x60D || u8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x60E || u8 || HasExited&lt;br /&gt;
|-&lt;br /&gt;
| 0x60F || u8 || HasCpuCoreOverride&lt;br /&gt;
|-&lt;br /&gt;
| ... || ... || ...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KProcess =&lt;br /&gt;
[1.0.0] Size: 0x5B0&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x2480&lt;br /&gt;
&lt;br /&gt;
[3.0.0] Size: 0x2580&lt;br /&gt;
&lt;br /&gt;
[5.0.0] Size: 0x4600&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || KProcessTerminationMessage || Sent to mailbox 0 when self-terminating.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KMemoryManager]] || MemoryManager&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 || u64 || TotalMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0xF8 || [[#KLinkedList]]&amp;lt;[[#KTlsPageManager]]*&amp;gt;&amp;gt; || TlsPagesList&lt;br /&gt;
|-&lt;br /&gt;
| 0x110 || s32 || DefaultCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 0x118 || [[#KDebug]]* || Debug&lt;br /&gt;
|-&lt;br /&gt;
| 0x120 || [[#KResourceLimit]]* || ResourceLimit&lt;br /&gt;
|-&lt;br /&gt;
| 0x128 || u32 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x130 || [[#KMutex]] || ProcessMutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x138 || [[#KMutex]] || ThreadingMutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x140 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ThreadArbiterList&lt;br /&gt;
|-&lt;br /&gt;
| 0x150 || KLinkedListNode ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x160 || u64[4] || RandomEntropy&lt;br /&gt;
|-&lt;br /&gt;
| 0x180 || u8 || HasStateChanged&lt;br /&gt;
|-&lt;br /&gt;
| 0x181 || u8 || HasInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 0x182 || u8 || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x183 || u8[12+1] || ProcessName&lt;br /&gt;
|-&lt;br /&gt;
| 0x190 || u16 || NumberOfCreatedThreads&lt;br /&gt;
|-&lt;br /&gt;
| 0x192 || u16 || ThreadingRelatedInitiallyZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x194 || u32 || ProcessFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0x198 || [[#KProcessCapabilities]] || Capabilities&lt;br /&gt;
|-&lt;br /&gt;
| 0x248 || u64 || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x250 || u64 || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x258 || u64 || CreatedTickstamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x260 || u64 || Entrypoint&lt;br /&gt;
|-&lt;br /&gt;
| 0x268 || u64 || CodeMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x270 || u64 || DynamicMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x278 || u64 || MaxTotalMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x280 || u32 || ProcessCategory (0: regular title, 1: kernel built-in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x288 || [[#KProcessHandleTable]] || HandleTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x528 || void* || UsermodeExceptionTlsArea&lt;br /&gt;
|-&lt;br /&gt;
| 0x530 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ExceptionThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x540 || [[#KThread]]* || ExceptionThread&lt;br /&gt;
|-&lt;br /&gt;
| 0x548 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x558 || bool || HasStarted&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C || u32 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x560 || u64[2] || UnusedZeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x570 || u64 || TotalTimeRunning&lt;br /&gt;
|-&lt;br /&gt;
| 0x578 || u64[5] || UnusedZeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A0 || u64 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A8 || u64 || UnusedZero&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || KProcessTerminationMessage || Sent to mailbox 0 when self-terminating.&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KMemoryManager]] || MemoryManager&lt;br /&gt;
|-&lt;br /&gt;
| 0x100 || u64 || TotalMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x108 || [[#KLinkedList]]&amp;lt;[[#KTlsPageManager]]*&amp;gt; || TlsPagesList&lt;br /&gt;
|-&lt;br /&gt;
| 0x120 || s32 || DefaultCpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 0x128 || [[#KDebug]]* || Debug&lt;br /&gt;
|-&lt;br /&gt;
| 0x130 || [[#KResourceLimit]]* || ResourceLimit&lt;br /&gt;
|-&lt;br /&gt;
| 0x138 || u32 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x140 || [[#KMutex]] || ProcessMutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || [[#KMutex]] || ThreadingMutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x150 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ThreadArbiterList&lt;br /&gt;
|-&lt;br /&gt;
| 0x160 || KLinkedListNode ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x170 || u64[4] || RandomEntropy&lt;br /&gt;
|-&lt;br /&gt;
| 0x190 || u8 || HasStateChanged&lt;br /&gt;
|-&lt;br /&gt;
| 0x191 || u8 || HasInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 0x192 || u8 || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x193 || u8[12+1] || ProcessName&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A0 || u16 || NumberOfCreatedThreads&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A2 || u16 || ThreadingRelatedInitiallyZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A4 || u32 || ProcessFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A8 || [[#KProcessCapabilities]] || Capabilities&lt;br /&gt;
|-&lt;br /&gt;
| 0x258 || u64 || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x260 || u64 || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x268 || u64 || CreatedTickstamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x270 || u64 || Entrypoint&lt;br /&gt;
|-&lt;br /&gt;
| 0x278 || u64 || CodeMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x280 || u64 || DynamicMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x288 || u64 || MaxTotalMemUsage&lt;br /&gt;
|-&lt;br /&gt;
| 0x290 || u32 || ProcessCategory (0: regular title, 1: kernel built-in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x298 || u64[5] || Unused [?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C0 || [[#KProcessHandleTable]] || HandleTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2380 || void* || UsermodeExceptionTlsArea&lt;br /&gt;
|-&lt;br /&gt;
| 0x2388 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ExceptionThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x2398 || [[#KThread]]* || ExceptionThread&lt;br /&gt;
|-&lt;br /&gt;
| 0x23A0 || [[#KLinkedListNode]]&amp;lt;[[#KThread]] *&amp;gt; || ThreadList&lt;br /&gt;
|-&lt;br /&gt;
| 0x23B0 || [[#KLinkedListNode]]&amp;lt;[[#KSharedMemoryRef]] *&amp;gt; || MappedSharedMemoriesList&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C0 || bool || HasStarted&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C1 || bool || HasException&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C4 || u32 || ExceptionEnum0&lt;br /&gt;
|-&lt;br /&gt;
| 0x23C8 || u64 || ExceptionEnum1&lt;br /&gt;
|-&lt;br /&gt;
| 0x23D0 || u64 || ExceptionThreadUnkInfo0&lt;br /&gt;
|-&lt;br /&gt;
| 0x23D8 || u64 || BreakArg0&lt;br /&gt;
|-&lt;br /&gt;
| 0x23E0 || u64 || BreakArg1&lt;br /&gt;
|-&lt;br /&gt;
| 0x23E8 || u64 || BreakArg2&lt;br /&gt;
|-&lt;br /&gt;
| 0x23F0 || u64 || ExceptionThreadUnkInfo1&lt;br /&gt;
|-&lt;br /&gt;
| 0x23F8 || u32 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2400 || u64[8] || UnusedZeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2440 || u64 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2448 || u64 || UnusedZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x2450 || u64[6] || Unused [?]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KTlsPageManager ==&lt;br /&gt;
Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || TlsPagePtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KProcess*]] || ProcessPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || UsageCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || u8[8] || IsSlotFree&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KProcessCapabilities ==&lt;br /&gt;
Size: 0xB0&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u8[16] || SvcAccessMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u8[128] || IrqAccessMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || u64 || AllowedCpuIdBitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || u64 || AllowedThreadPrioBitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || u32 || DebuggingFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4 || u32 || HandleTableSize&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || u32 || KernelReleaseVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || u32 || ApplicationType&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KProcessHandleTable ==&lt;br /&gt;
[1.0.0] Size: 0x2A0&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x20C0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KHandleEntry]]* || TablePtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KHandleEntry]]* || NextFreeEntry&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KHandleEntry]][40] || InternalTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x290 || u16 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x292 || u16 || MaxUsageAtOnce&lt;br /&gt;
|-&lt;br /&gt;
| 0x294 || u16 || IdCounter&lt;br /&gt;
|-&lt;br /&gt;
| 0x296 || u16 || NumActiveSlots&lt;br /&gt;
|-&lt;br /&gt;
| 0x298 || [[#KSpinLock]] || Lock&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KHandleEntry]]* || TablePtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KHandleEntry]]* || NextFreeEntry&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KHandleEntry]][1024] || InternalTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2010 || u16 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x2012 || u16 || MaxUsageAtOnce&lt;br /&gt;
|-&lt;br /&gt;
| 0x2014 || u16 || IdCounter&lt;br /&gt;
|-&lt;br /&gt;
| 0x2016 || u16 || NumActiveSlots&lt;br /&gt;
|-&lt;br /&gt;
| 0x2040 || [[#KSpinLock]] || Lock&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KHandleEntry ===&lt;br /&gt;
[1.0.0] Size: 0x10&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 8&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u16 || HandleId&lt;br /&gt;
|-&lt;br /&gt;
| 2 || u8 || ObjectType&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#KAutoObject]]* || Object&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u16 || HandleId&lt;br /&gt;
|-&lt;br /&gt;
| 2 || u8 || ObjectType&lt;br /&gt;
|-&lt;br /&gt;
| 4 || u32 || ObjectCompressedPtr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KSpinLock ===&lt;br /&gt;
[1.0.0] Size: 0x1&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x40&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u8 || IsBusy&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u16 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u16 ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KSharedMemoryRef ==&lt;br /&gt;
[2.0.0] Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]]&amp;lt;[[#KSharedMemoryRef]] *&amp;gt; || NodeFor__MappedSharedMemoriesList&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KSharedMemory*]] || SharedMem&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || InitiallyZero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KMemoryManager =&lt;br /&gt;
[1.0.0] Size: 0xB8&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0xC8&lt;br /&gt;
&lt;br /&gt;
[5.0.0] Size: 0xF8?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || AddrSpaceMinAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || AddrSpaceMaxAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || HeapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || HeapCurAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || MapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u64 || MapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u64 || HeapMaxAllocation&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || [[#KPageTable]] || PageTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || [[#KMemoryBlockManager]] || MemoryBlockManager&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || bool || IsKernel&lt;br /&gt;
|-&lt;br /&gt;
| 0x79 || bool || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || bool || IsAddrSpace36Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || bool || HasAslr&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || u32 || Is_0x59_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || u32 || Is_0x5A_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x84 || u32 || Is_0x58_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x88 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || u64 || TranslationTableBaseRegister0&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || u64 || TranslationControlRegister&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || u8 || AsidTagValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || AddrSpaceMinAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || AddrSpaceMaxAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || HeapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || HeapCurAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || MapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u64 || MapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u64 || NewMapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || u64 || NewMapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || u64 || TlsIoRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || u64 || TlsIoRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || u64 || HeapMaxAllocation&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || [[#KPageTable]] || PageTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || [[#KMemoryBlockManager]] || MemoryBlockManager&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || u32 || AddressSpaceWidth (32/36/39)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C || bool || IsKernel&lt;br /&gt;
|-&lt;br /&gt;
| 0x9D || bool || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x9E || bool || HasAslr&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || u32 || PoolPartition&lt;br /&gt;
|-&lt;br /&gt;
| 0xA4 || u32 || Is_0x5A_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || u32 || Is_0x59_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || u32 || Is_0x58_If_Cfg12_Bit0_ElseZero&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || u64 || TranslationTableBaseRegister0&lt;br /&gt;
|-&lt;br /&gt;
| 0xB8 || u64 || TranslationControlRegister&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || u32 || AsidTagValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 5.0.0 Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || AddrSpaceMinAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || AddrSpaceMaxAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || HeapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || HeapCurAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || MapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u64 || MapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u64 || NewMapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || u64 || NewMapRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || u64 || TlsIoRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || u64 || TlsIoRegionEndAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || u64 || HeapMaxAllocation&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0x70 ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || [[#KPageTable]] || PageTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || [[#KMemoryBlockManager]] || MemoryBlockManager&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || u32 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || u32 || AddressSpaceWidth (32/36/39)&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || [[#KLinkedList]]? || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC8 ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 ||  || &lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ptr || &lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || u64 || TranslationTableBaseRegister0 val&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || u64 || TranslationControlRegister val&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 || u32 || AsidTagValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KPageTable ==&lt;br /&gt;
Size: 0x10&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || RawPageTablePtr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || bool ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || u32 || AddrSpaceSizeInGb&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KMemoryBlockManager ==&lt;br /&gt;
Size: 0x18&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KMemoryBlock]]* || MemoryBlockList&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || MaxAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || MinAddr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KMemoryBlock ==&lt;br /&gt;
Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]]&amp;lt;[[#KMemoryBlock]] *&amp;gt; || NodeFor__MemoryBlockList&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || NumOfPages&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u32 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || u16 || IpcRefCount [?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || u16 || DeviceMapRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u8 || Permission&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || u8 || UnkAttribute&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || u8 || Attribute&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KMemoryBlockInfo ==&lt;br /&gt;
Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || State&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || u8 || Permission&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || u8 || Attribute&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || u8 || UnkAttribute&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u16 || IpcRefCount [?]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || u16 || DeviceMapRefCount&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KTransferMemory =&lt;br /&gt;
Size: 0x48&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KMemoryBlockList || Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KProcess]]* || OwnerProcess&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || KMutex || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || int || Permission&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || bool || HasInited&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || bool || IsMapped&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KSharedMemory =&lt;br /&gt;
[1.0.0] Size: 0x40&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x48&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KMemoryBlockList || Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KProcess]]* || OwnerProcess&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || int || LocalPermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || int || RemotePermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KMemoryBlockList || Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KResourceLimit]]* || OwnerResourceLimit&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || OwnerProcessPid&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || int || LocalPermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || int || RemotePermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= KJitMemory =&lt;br /&gt;
[4.0.0+] Size: 0x58&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || KMemoryBlockList || Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KProcess]]* || SrcProcessPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || u8 || HasInit&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || u8 || HasMappedSlave&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || u8 || HasMappedMaster&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KPort =&lt;br /&gt;
Size: 0xA8&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KServerPort]] || ServerSide&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || [[#KClientPort]] || ClientSide&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || bool || HasInited&lt;br /&gt;
|-&lt;br /&gt;
| 0xA1 || bool || IsLight&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KServerPort ==&lt;br /&gt;
Size: 0x50&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KLinkedListNode]] || IncomingConnections&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KLinkedListNode]] || IncomingLightConnections&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KPort]]* || Parent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KClientPort ==&lt;br /&gt;
Size: 0x38&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u32 || NumSessions&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || u32 || MaxSessions&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[#KPort]]* || Parent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KSession =&lt;br /&gt;
Size: 0xB0&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KServerSession]] || ServerSide&lt;br /&gt;
|-&lt;br /&gt;
| 0x70 || [[#KClientSession]] || ClientSide&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KServerSession ==&lt;br /&gt;
Size: 0x60&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || KLinkedListNode ||  NodeFor__IncomingConnections&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KSession*]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || KLinkedListNode&amp;lt;[[#KSessionRequest]]*&amp;gt; || RequestList&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || [[#KSessionRequest]]* || ActiveRequest&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== KSessionRequest ===&lt;br /&gt;
Size: 0x158&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KLinkedListNode ||  NodeFor__RequestList&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KBufferDescriptor]][8] || BufferTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x120 || [[#KBufferDescriptor]]* || ExternalBufferTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x128 || u8 || NumSendBuffers&lt;br /&gt;
|-&lt;br /&gt;
| 0x129 || u8 || NumRecvBuffers&lt;br /&gt;
|-&lt;br /&gt;
| 0x12A || u8 || NumExchBuffers&lt;br /&gt;
|-&lt;br /&gt;
| 0x130 || [[#KThread]]* || SenderThread&lt;br /&gt;
|-&lt;br /&gt;
| 0x138 || u64 || InitiallyZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x140 || [[#KWritableEvent]]* || ForAsyncEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x148 || u64 || CustomCmdbufAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x150 || u64 || CustomCmdbufSize&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== KBufferDescriptor ===&lt;br /&gt;
Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 || UserVirtAddr&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || BufferMemoryState&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KClientSession ==&lt;br /&gt;
Size: 0x38&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KSession]]* || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || bool || HasInited&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KClientPort]]* || ParentPort&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[#KProcess]]* || CreatorProcess&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KLightSession =&lt;br /&gt;
Size: 0xA8&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KLightSessionServer]] || ServerSide&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || [[#KLightSessionClient]] || ClientSide&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KLightServerSession ==&lt;br /&gt;
Size: 0x58&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || KLinkedListNode || NodeFor__IncomingLightConnections&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KLightSession]] || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64[6] ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KLightClientSession ==&lt;br /&gt;
Size: 0x38&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KLightSession]]* || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || bool || HasInited&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KClientPort]]* || Port&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[#KProcess]]* || CreatorProcess&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KEvent =&lt;br /&gt;
Size: 0x70&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KReadableEvent]] || ReadableEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KWritableEvent]] || WritableEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || [[#KProcess]]* || Creator&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KReadableEvent ==&lt;br /&gt;
Size: 0x38&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KSynchronizationEvent]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || bool ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || [[#KEvent]]* || Parent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KWritableEvent ==&lt;br /&gt;
Size: 0x18&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KEvent]]* || Parent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KInterruptEvent ==&lt;br /&gt;
[1.0.0] Size: 0x50&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x48&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KReadableEvent]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KReadableEvent]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KInterruptReceiver]] || Receiver&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || u32 || IrqId (or -1)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KReadableEvent]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || [[#KInterruptReceiver]]* || Receiver&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || u32 || IrqId (or -1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || bool || IsIrqRegistered&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KInterruptReceiver ===&lt;br /&gt;
[1.0.0] Size: 0x10&lt;br /&gt;
[2.0.0] Size: 0x20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || * || Vtable&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || InitiallyZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KInterruptEvent]]* || IrqEventPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || s32 || IrqId&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= KDeviceAddressSpace =&lt;br /&gt;
Size: 0x70&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KMutex]] || Mutex&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#KSmmuManager]] || Manager&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || u64 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || bool || HasInited&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1.0.0] It was called KAddressSpace.&lt;br /&gt;
&lt;br /&gt;
== KSmmuManager ==&lt;br /&gt;
Size: 0x40&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u8[4] || PageTableAsids&lt;br /&gt;
|-&lt;br /&gt;
| 8 || void*[4] || PageDirectories&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || AttachedDevicesMask&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u32 || RegVal32Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || u32 || RegVal32BitEmpty&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u32 || RegVal36Bit&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || u32 || RegVal36BitEmpty&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KResourceLimit =&lt;br /&gt;
Size: 0x68&lt;br /&gt;
&lt;br /&gt;
Inherits from: [[#KAutoObject]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KAutoObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64[5] || CurrentValue&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u64[5] || LimitValue&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || [[#KMutex]] || Mutex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KPoolManager =&lt;br /&gt;
[1.0.0] Size: 0x380&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x450&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KPoolAllocator]][3] || Allocator&lt;br /&gt;
|-&lt;br /&gt;
| 0x348 || [[#KPoolRefManager]] || RefManager&lt;br /&gt;
|-&lt;br /&gt;
| 0x368 || u64 || AllocationCounter&lt;br /&gt;
|-&lt;br /&gt;
| 0x370 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x378 || [[#KMutex]] || Mutex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KPoolAllocator]] || Allocator0&lt;br /&gt;
|-&lt;br /&gt;
| 0x220 || [[#KPartitionInfo]]* || PartitionInfo0&lt;br /&gt;
|-&lt;br /&gt;
| 0x228 || [[#KPoolAllocator]] || Allocator1&lt;br /&gt;
|-&lt;br /&gt;
| 0x448 || [[#KPartitionInfo]]* || PartitionInfo1&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KPoolAllocator ==&lt;br /&gt;
[1.0.0] Size: 0x118&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x220&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || MemoryBase&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || MemorySize&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || s32 || NumPools&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#KPool]][8] || Pools&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || MemoryBase&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || MemorySize&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#KPool]][8] || Pools&lt;br /&gt;
|-&lt;br /&gt;
| 0x210 || s32 || NumPools&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== KPool ===&lt;br /&gt;
[1.0.0] Size: 0x20&lt;br /&gt;
&lt;br /&gt;
[2.0.0] Size: 0x40&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 1.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || KPoolHeader* || FirstFreeChunk&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || void* || SingletonTableEntryPtr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block; vertical-align:top;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 2.0.0 Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || KPoolHeader* || FirstFreeChunk&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || void* || SingletonTableEntryPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || [[#KPool]]* || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64[2] || DmaProtectionKey&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KPoolRefManager ==&lt;br /&gt;
[1.0.0] Size: 0x20&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KPoolManager]]* || Parent&lt;br /&gt;
|-&lt;br /&gt;
| 8 || void* || PoolBase&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || MaxPage&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u16* || RefCountTable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KObjectAllocator =&lt;br /&gt;
Size: 0x50&lt;br /&gt;
[5.0.0]? Size: 0x48&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLockedList]] || LockedList &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KSlabHeap]] || SlabHeap &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= KSlabHeap =&lt;br /&gt;
Size: 0x28&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || FreeListHead &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || u64 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || void* || HeapPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || TotalHeapSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || SingleObjectSize&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
5.0.0 (?):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || void* || FreeListHead &lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || u64 || SingleObjectSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || void* || HeapPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || void* || Start (equal to HeapPtr on init)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || void* || End&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KPageTableAllocator =&lt;br /&gt;
Size: 0x30&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u16* || RefCountTable&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || void* || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KIrqManager =&lt;br /&gt;
[1.0.0] Size: 0x1608&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KIrqEntry]][32] || Core0Irq&lt;br /&gt;
|-&lt;br /&gt;
| 0x200 || [[#KIrqEntry]][32] || Core1Irq&lt;br /&gt;
|-&lt;br /&gt;
| 0x400 || [[#KIrqEntry]][32] || Core2Irq&lt;br /&gt;
|-&lt;br /&gt;
| 0x600 || [[#KIrqEntry]][32] || Core3Irq&lt;br /&gt;
|-&lt;br /&gt;
| 0x800 || [[#KIrqEntry]][224] || SharedIrqs&lt;br /&gt;
|-&lt;br /&gt;
| 0x1600 || [[#KMutex]] || Mutex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KIrqEntry ==&lt;br /&gt;
[1.0.0] Size: 0x10&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KIrqReciever*]] || Receiver&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u8 || State0&lt;br /&gt;
|-&lt;br /&gt;
| 9 || u8 || State1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= KDebug =&lt;br /&gt;
Size: 0x50&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KSynchronizationObject]] || Inheritance&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || [[#KLinkedListNode]]&amp;lt;[[#KDebugEvent]]&amp;gt; || EventList&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || u32 || Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || [[#KProcess]]* || ProcessPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || [[#KMutex]] || Mutex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== KDebugEvent ==&lt;br /&gt;
Size: 0x60&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#KLinkedListNode]]&amp;lt;[[#KDebugEvent]] *&amp;gt; || NodeFor__EventList&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u32 || EventType&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || u32 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u32 || Flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || u16 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || bool ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || ... || ...&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=6.0.0&amp;diff=5033</id>
		<title>6.0.0</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=6.0.0&amp;diff=5033"/>
		<updated>2018-09-20T15:31:46Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: 🤷&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Switch 6.0.0 system update was released on September 18, 2018. This Switch update was released for the following regions: ALL.&lt;br /&gt;
&lt;br /&gt;
Security flaws fixed: Yes.&lt;br /&gt;
&lt;br /&gt;
==Change-log==&lt;br /&gt;
[https://en-americas-support.nintendo.com/app/answers/detail/a_id/22525/p/897 Official] ALL change-log:&lt;br /&gt;
* Nintendo Switch Online* features and functionality have been added, including:&lt;br /&gt;
*  Save Data Cloud Backup &lt;br /&gt;
*   &lt;br /&gt;
*    User your internet connection to back up game save data for compatible games&lt;br /&gt;
*    Some games are not compatible with Save Data Cloud&lt;br /&gt;
*    To back up save data or download a previous backup, head to System Settings &amp;amp;gt; Data Management &amp;amp;gt; Save Data Cloud Backup&lt;br /&gt;
*   &lt;br /&gt;
*   *Nintendo Switch Online membership (sold separately) and Nintendo Account required for online play. Not available in all countries. Internet access required for online features. Save Data Cloud backup available in compatible games. Terms apply. To learn more, click here.&lt;br /&gt;
*  &lt;br /&gt;
* Added the following system functionality&lt;br /&gt;
*  Upload up to four Album screenshots at once on supported social network services&lt;br /&gt;
*   &lt;br /&gt;
*    Only one captured video can be uploaded at once&lt;br /&gt;
*   &lt;br /&gt;
*  &lt;br /&gt;
*  Select from six new Captain Toad icons for your user&lt;br /&gt;
*   &lt;br /&gt;
*    To edit your user icon, head to your My Page on the top left of the Home Menu &amp;amp;gt; Profile&lt;br /&gt;
*   &lt;br /&gt;
*  &lt;br /&gt;
*  Play your digital software and content on non-primary consoles by linking your Nintendo Account&lt;br /&gt;
*   &lt;br /&gt;
*    The term &amp;quot;active console&amp;quot; has been renamed &amp;quot;primary console&amp;quot; in Nintendo eShops&lt;br /&gt;
*    Playing software in multiple consoles has certain restrictions&lt;br /&gt;
*   &lt;br /&gt;
*  &lt;br /&gt;
*  Display of Nintendo Switch News articles will be limited to match the restricted software parental controls setting selections&lt;br /&gt;
*   &lt;br /&gt;
*    Please note that the restriction will only apply to News articles distributed after the release of version 6.0.0.&lt;br /&gt;
*   &lt;br /&gt;
*  &lt;br /&gt;
*  Change the layout of the USB keyboard to the desired language&lt;br /&gt;
*   &lt;br /&gt;
*    To change the language, head to the System Settings &amp;amp;gt; System &amp;amp;gt; USB Keyboard &lt;br /&gt;
*   &lt;br /&gt;
*  &lt;br /&gt;
* Removed the following system functionality&lt;br /&gt;
*  After installing the system update, it will no longer be possible to unlink your Nintendo Account from your Nintendo Switch user&lt;br /&gt;
* General system stability improvements to enhance the user&#039;s experience, including:&lt;br /&gt;
*  Compatibility improvements have been made for a controller licensed by Nintendo&lt;br /&gt;
&lt;br /&gt;
==System Titles==&lt;br /&gt;
* All sysmodules were updated.&lt;br /&gt;
* Most 8XX titles were updated.&lt;br /&gt;
* All applets except &amp;quot;error&amp;quot; and &amp;quot;cabinet&amp;quot; were updated.&lt;br /&gt;
* 1 new title was added: olsc-sysmodule.&lt;br /&gt;
* New services were added, see [[Services_API|here]].&lt;br /&gt;
&lt;br /&gt;
===[[USB_services|USB-sysmodule]]===&lt;br /&gt;
The only sysmodule with any changes for accessible IO in the [[NPDM]] was USB-sysmodule. The IO page for the [[Fuses|fuse registers]] is now accessible by this sysmodule.&lt;br /&gt;
&lt;br /&gt;
===olsc-sysmodule===&lt;br /&gt;
This new sysmodule handles cloud saves.&lt;br /&gt;
&lt;br /&gt;
===FIRM===&lt;br /&gt;
&lt;br /&gt;
====Secure Monitor====&lt;br /&gt;
&lt;br /&gt;
.rwdata was reduced in size from two pages to one page. Additionally:&lt;br /&gt;
&lt;br /&gt;
Changes were made relating to security engine usage:&lt;br /&gt;
* Many functions which previously used an inline GetSecurityEngine() call to get the security engine register address now take in a register base as an argument. This is presumably to facilitate moved Security Engine MMIO on the Mariko SoC.&lt;br /&gt;
* Keyslots 0-8, 0xA, 0xC-0xE now have flags 0x1FF set, and keyslot 0xB now additionally has flags 0x17F set.&lt;br /&gt;
* The Test Vector used to ensure keyslot contents do not change during wake-from-sleep now uses 256-bit AES instead of 128-bit AES (thus the high parts of the keyslot contents are now verified).&lt;br /&gt;
&lt;br /&gt;
Some changes were made to initial SoC setup:&lt;br /&gt;
* Additional magic numbers (0x83 = SKU ID, 0x2 = ?, 0x210 = Tegra 210) are now written into the GPU microcode in DRAM for runtime configuration.&lt;br /&gt;
* The warmboot firmware&#039;s firmware revision magic was changed from 0x6 to 0x87.&lt;br /&gt;
* The GPU microcode carveout setup was moved to later during initialization (after package2 has been fully loaded and verified).&lt;br /&gt;
* The IRAM addresses from which [[BootConfig]] warmboot firmware are loaded were changed.&lt;br /&gt;
&lt;br /&gt;
In addition, there were changes to the [[SMC]] interface:&lt;br /&gt;
&lt;br /&gt;
* SMCs which take in a keyslot parameter have been changed to allow use of up to 6 keyslots instead of 4.&lt;br /&gt;
* smcUnwrapRsaOaepWrappedTitleKey now takes in a &amp;quot;type&amp;quot; parameter, and the kek used in key generation is now selected from an array based on this parameter. (smcUnwrapAesWrappedTitlekey hardcodes type 0.)&lt;br /&gt;
* GetConfig(HardwareType) now returns 4 when it previously would have returned 3.&lt;br /&gt;
&lt;br /&gt;
Additionally, security flaws were addressed in smcCpuSuspend (aiming to further mitigate jamais vu/deja vu):&lt;br /&gt;
&lt;br /&gt;
* The number of devices checked to be held in reset at the time of smcCpuSuspend is called is now greatly increased.&lt;br /&gt;
* BPMP SC7 Entry Firmware is now only started &#039;&#039;after&#039;&#039; the following have been done, instead of before:&lt;br /&gt;
** TZRAM contents have been encrypted and MAC&#039;d with a random AES-256 key&lt;br /&gt;
** The PMC scratch registers where the MAC are stored have been verified not to be read or write-locked.&lt;br /&gt;
** The MAC is written into the PMC scratch registers, which are then write-locked.&lt;br /&gt;
** The PMC scratch registers are verified to have been write-locked.&lt;br /&gt;
** The PMC scratch registers are verified to contain the MAC TZ has written into them.&lt;br /&gt;
** The PMC scratch registers are read-locked.&lt;br /&gt;
** The PMC scratch registers are verified to be both read and write-locked.&lt;br /&gt;
** The BPMP&#039;s firmware is copied from TZRAM into IRAM&lt;br /&gt;
** memcmp(BPMP firmware in IRAM, BPMP firmware in TZRAM, sizeof(BPMP firmware)) is verified to be zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Kernel====&lt;br /&gt;
* Accidentially exported symbols have been renamed:&lt;br /&gt;
** Namespace &amp;lt;code&amp;gt;nn::kern::ARM64&amp;lt;/code&amp;gt; is now &amp;lt;code&amp;gt;nn::kern::arch::ARM64&amp;lt;/code&amp;gt;&lt;br /&gt;
** Namespace &amp;lt;code&amp;gt;nn::kern::NX&amp;lt;/code&amp;gt; is now &amp;lt;code&amp;gt;nn::kern::board::NX&amp;lt;/code&amp;gt; and now contains the class &amp;lt;code&amp;gt;KSystemControl&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;ResumeEntry&amp;lt;/code&amp;gt; is now a non-static method of &amp;lt;code&amp;gt;KSystemControl&amp;lt;/code&amp;gt;&lt;br /&gt;
* Kernel now reserves 1024 pages (1MB) of memory in SYSTEM memregion/pool for use by applets (1 at a time) for personal mmheap.&lt;br /&gt;
* Memory regions arrange changed, APPLET has 6MB less in all memory arranges.&lt;br /&gt;
* Maximum number of sessions and events both increased by 100.&lt;br /&gt;
* Kernel mmheap size decreased to 0x10DF000 bytes (was 0x1117000), the both KMemoryBlock pools&#039; capacity is unchanged, but less page tables can be allocated.&lt;br /&gt;
* Kernel now properly reports DRAM size in default reslimit.&lt;br /&gt;
* Two new svcGetInfoTypes: types 21 and 22. These are like type 6 and 7, but without the contiguous, in-security-carveout, personalmmheap allocation.&lt;br /&gt;
* KASLR was changed to invoke smcGetRandomBytes(8) each time, instead of using Mersenne Twister.&lt;br /&gt;
* Another layer of randomization has been added to slabheaps (before, it was just the order of slabheaps): an array of N (= 21 = number of slabheaps) random integers, in range (0, 0x200000) is now constructed, sorted via bubble sort; at each slabheap construction the heap offset is further incremented by &amp;lt;code&amp;gt;array[id+1]-array[id]&amp;lt;/code&amp;gt; , then page rounded.&lt;br /&gt;
* With the exception of KSessionRequest which is not in any KObjectAllocator, all KAutoObject types now use an intrusive rbtree instead of an intrusive list for their KObjectAllocator membership. Comparison key is PID for processes, thread ID for threads, address for others (using a new virtual method).&lt;br /&gt;
* A new anonymous KAutoObject type, which sole purpose is to hold a comparison key, is now used for thread lookup by ID.&lt;br /&gt;
* Breaking changes in svcGetFutureThreadInfo, which has potentially been renamed. Signature and use case have radically changed, it is now: &amp;lt;code&amp;gt;Result svcGetFutureThreadInfo(ThreadInfo *outThreadInfo, u64 *outTid, Handle debugHandle, s64 timeout)&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Huge scheduler force-pause and last thread reporting refactor:&lt;br /&gt;
** Scheduling flags are now u16 and force-pause flags are 3-nibble-long instead of 1.&lt;br /&gt;
** The requirements and mechanism for force-pausing (activity svc, debug, etc.) threads have been considerably simplified:&lt;br /&gt;
*** It used to delay the force-pause after end-of-svc, and used some convoluted mechanism.&lt;br /&gt;
*** The condition is now &amp;amp;quot;a thread is force-pausable iff no thread is waiting for a kernel mutex it is holding&amp;amp;quot;, mechanism is just ORRing scheduling status with force-pause flags now. Appropriate changes have been made to accomodate for this change.&lt;br /&gt;
*** Abovementionned convoluted mechanism has been refactored, too, but remains unused.&lt;br /&gt;
** When the scheduler selects a process&#039;s thread, it now stored the selected thread in an array in the KProcess, for information. It also stores in itself and in array in the selected KProcess the number of times it detected a core being idle before load balancing. Used by BreakDebugProcess.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* All threads created and started in kernel main() are started force-paused with flags=0x100. This fixes the hypotetical case where a compromised KIP would perform gmmuhax and dump the INI1 (which is stored in APPLICATION -- KIPs are only started after all of them have been loaded). They are unpaused after all KIPs have been created.&lt;br /&gt;
* GetThreadContext3 (unprivileged SVC) now dumps TPIDR_EL0.&lt;br /&gt;
* DebugActiveProcess now returns 0xFA01 if an attempt to debug the current process is made -- instead of possibly deadlocking&lt;br /&gt;
* GetDebugThreadContext and SetDebugThreadContext now return 0xF001 if flags &amp;amp;gt; 15. Additionally, their functionality is now restricted to threads that have been force-paused for debug, not just any kind of force-paused threads anymore.&lt;br /&gt;
* ContinueDebugEvent now returns 0xF001 if flags &amp;amp;gt; 15 as well.&lt;br /&gt;
* svcSleepSystem has been refactored. Instead of the initiator thread manually starting the sleep handler threads then storing a weak reference to itself, the handler threads are started in kernel init in main() immediately after their creation, and two mutexes are used: one for the initiator/covering svcSleepSystem, another for the handler threads. This likely fixes an UaF or race condition.&lt;br /&gt;
* If svcReturnFromException passes the exception the KDebug, ie. if the argument errorCode is not 0, and if the latter has DontCatchExceptions set, the process is terminated (unless errorCode is 0x10001).&lt;br /&gt;
* Performance improvements to svcInvalidateProcessDataCache.&lt;br /&gt;
* Redundant calls to smcGetConfig(12) have been reduced (12 calls -&amp;gt; 4 calls) during memory setup&lt;br /&gt;
&lt;br /&gt;
====FIRM Sysmodules====&lt;br /&gt;
All FIRM sysmodules were updated. Specific diffs for a few sysmodules are below:&lt;br /&gt;
&lt;br /&gt;
=====[[Loader services|Loader]]=====&lt;br /&gt;
* A single null byte stack overflow due to strcat usage was fixed in content path parsing. See [[Switch System Flaws]] for details.&lt;br /&gt;
* System Resource Size ([[NPDM]] +0x14) is now allowed to be non-zero for applets in addition to applications.&lt;br /&gt;
&lt;br /&gt;
=====[[Process Manager services|PM]]=====&lt;br /&gt;
Memory management initialization was greatly changed:&lt;br /&gt;
* PM no longer hardcodes five memory profiles, and no longer calls smcGetConfig to determine which profile to use.&lt;br /&gt;
* Instead, PM now uses [[SVC|svcGetResourceLimitLimitValue]] to determine how much space the kernel has allotted for Application + Applet regions and [[SVC|svcGetSystemInfo]] to determine the total physical memory available, and sets the System region size to (Total Memory Size - Application region size - Applet region size - 5 MiB).&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
System update report(s):&lt;br /&gt;
* [https://yls8.mtheall.com/ninupdates/reports.php?date=09-18-18_08-35-09&amp;amp;sys=hac]&lt;br /&gt;
&lt;br /&gt;
{{NavboxVersions}}&lt;br /&gt;
&lt;br /&gt;
[[Category:System versions]]&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Secure_Monitor&amp;diff=4996</id>
		<title>Secure Monitor</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Secure_Monitor&amp;diff=4996"/>
		<updated>2018-09-17T22:04:16Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: as seen on 5.0.1 kernel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Secure Monitor Calls =&lt;br /&gt;
&lt;br /&gt;
The secure monitor provides two top level handlers of which each provides a range of sub handlers.&lt;br /&gt;
&lt;br /&gt;
Secure Monitor Calls follow the ARM SMC calling convention up to a small change:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit number || Bit mask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 31 || 0x80000000 || Set to 0 means Yielding Call; Set to 1 means Fast Call.&lt;br /&gt;
|-&lt;br /&gt;
| 30 || 0x40000000 || Set to 0 means SMC32 convention; Set to 1 means SMC64.&lt;br /&gt;
|-&lt;br /&gt;
| 29-24 || 0x3F000000 || Service Call ranges.&lt;br /&gt;
|-&lt;br /&gt;
| 23-16 || 0x00FF0000 || Must be zero.&lt;br /&gt;
|-&lt;br /&gt;
| 15-8 || 0x0000FF00 || Argument type. This is different from the ARM SMC calling convention.&lt;br /&gt;
|-&lt;br /&gt;
| 7-0 || 0x000000FF || Function number within the range call type.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If bit &#039;&#039;n&#039;&#039; is set in the argument type then parameter X&#039;&#039;n&#039;&#039; is treated as a pointer and the kernel will setup address translation for it in [[SVC#svcCallSecureMonitor|svcCallSecureMonitor]].&lt;br /&gt;
&lt;br /&gt;
SMC arguments are passed using registers X0-X7 with X0 always sending the call sub-id and returning the result of the call.&lt;br /&gt;
&lt;br /&gt;
== ID 0 ==&lt;br /&gt;
Functions exposed to user-mode processes using [[SVC|svcCallSecureMonitor]].&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Sub-ID || Name || In || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000401 || SetConfig || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000002 || GetConfig (Same as ID 1, Sub-ID 4) || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000003 || CheckStatus || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000404 || GetResult || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000E05 || ExpMod || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000006 || GetRandomBytes (Same as ID 1, Sub-ID 5) || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000007 || [[#GenerateAesKek]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000008 || [[#LoadAesKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000009 || [[#CryptAes]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300000A || [[#GenerateSpecificAesKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300040B || [[#ComputeCmac]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-4.1.0] 0xC300100C || [[#LoadRsaOaepKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0xC300D60C || [[#EncryptRsaKeyForImport]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-4.1.0] 0xC300100D || [[#DecryptRsaPrivateKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0] 0xC300100D || [[#DecryptOrImportRsaKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-4.1.0] 0xC300100E || [[#LoadSecureExpModKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300060F || [[#SecureExpMod]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000610 || [[#UnwrapRsaOaepWrappedTitleKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000011 || [[#LoadTitleKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000012 || [2.0.0+] UnwrapAesWrappedTitleKey || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The overall concept here is the following:&lt;br /&gt;
* All key material (AES and RSA) is stored in userspace, but it&#039;s encrypted with random AES kek&#039;s (&amp;quot;key encryption keys&amp;quot;).&lt;br /&gt;
* Each kek is generated as a function of an access key (picked at random).&lt;br /&gt;
* The kek is generated differently depending on the [[#CryptoUsecase]] the key is used for.&lt;br /&gt;
** This means: Each key is &amp;quot;locked&amp;quot; to the [[#CryptoUsecase]] it was designated for.&lt;br /&gt;
** You can use a key for a different usecase, but you will only get garbage output.&lt;br /&gt;
* After the kek has been generated, it is wrapped with a session-specific key and given back to userspace.&lt;br /&gt;
** This means: Plaintext kek keys never leave TrustZone.&lt;br /&gt;
** Further, this means: Actual AES/RSA keys never leave TrustZone.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
The [[#enum_CryptoUsecase|CryptoUsecase_TitleKey]] represents a RSA wrapped AES key.&lt;br /&gt;
&lt;br /&gt;
=== GenerateAesKek ===&lt;br /&gt;
Takes an &amp;quot;access key&amp;quot; as input, an [[#enum_CryptoUsecase]].&lt;br /&gt;
&lt;br /&gt;
Returns a session-unique kek for said usecase.&lt;br /&gt;
&lt;br /&gt;
=== LoadAesKey ===&lt;br /&gt;
Takes a session kek created with [[#GenerateAesKek]], and a wrapped AES key.&lt;br /&gt;
&lt;br /&gt;
The session kek must have been created with [[#enum_CryptoUsecase|CryptoUsecase_Aes]].&lt;br /&gt;
&lt;br /&gt;
=== CryptAes ===&lt;br /&gt;
Encrypts/decrypts using Aes (CTR and CBC).&lt;br /&gt;
&lt;br /&gt;
Key must be set prior using one of the [[#LoadAesKey]], [[#GenerateSpecificAesKey]] or [[#LoadRsaWrappedAesKey]] commands.&lt;br /&gt;
&lt;br /&gt;
=== GenerateSpecificAesKey ===&lt;br /&gt;
Todo: This one seems unrelated to [[#enum_CryptoUsecase]].&lt;br /&gt;
&lt;br /&gt;
=== LoadRsaOaepKey ===&lt;br /&gt;
Takes a session kek created with [[#GenerateAesKek]], a wrapped AES key, and a wrapped RSA private key.&lt;br /&gt;
&lt;br /&gt;
The session kek must have been created with [[#enum_CryptoUsecase|CryptoUsecase_RsaOaep]].&lt;br /&gt;
&lt;br /&gt;
This function was removed in [[5.0.0]], and replaced with [[#EncryptRsaKeyForImport]].&lt;br /&gt;
&lt;br /&gt;
=== EncryptRsaKeyForImport ===&lt;br /&gt;
Takes in two session keks created with [[#GenerateAesKek]], two wrapped AES keys, an enum member, and a wrapped RSA private key.&lt;br /&gt;
&lt;br /&gt;
Decrypts and validates the wrapped RSA private key with the first kek/wrapped key, and re-encrypts it with the second if valid.&lt;br /&gt;
&lt;br /&gt;
The re-encrypted key is then passed to the user, for use with [[#DecryptOrImportRsaKey]].&lt;br /&gt;
&lt;br /&gt;
=== DecryptRsaPrivateKey ===&lt;br /&gt;
Takes a session kek created with [[#GenerateAesKek]], a wrapped AES key, an enum member, and a wrapped RSA private key.&lt;br /&gt;
&lt;br /&gt;
The session kek must have been created with [[#enum_CryptoUsecase|CryptoUsecase_RsaPrivate]].&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] The SMC handler when certain conditions pass and SMC_ID==0xC300100D now returns error 0x6 instead of calling the handler funcptr.&lt;br /&gt;
&lt;br /&gt;
=== DecryptOrImportRsaKey ===&lt;br /&gt;
&lt;br /&gt;
This function replaced [[#DecryptRsaPrivateKey]] in [[5.0.0]], adding an additional enum member argument.&lt;br /&gt;
&lt;br /&gt;
This SMC extends DecryptRsaPrivateKey&#039;s original functionality to enable importing private keys into the security engine instead of decrypting them, when certain enum members are passed.&lt;br /&gt;
&lt;br /&gt;
=== LoadSecureExpModKey ===&lt;br /&gt;
Takes a session kek created with [[#GenerateAesKek]], and a wrapped RSA key.&lt;br /&gt;
&lt;br /&gt;
The session kek must have been created with [[#enum_CryptoUsecase|CryptoUsecase_RsaSecureExpMod]].&lt;br /&gt;
&lt;br /&gt;
This function was removed in [[5.0.0]], and replaced with [[#EncryptRsaKeyForImport]].&lt;br /&gt;
&lt;br /&gt;
=== SecureExpMod ===&lt;br /&gt;
Performs an Exp Mod operation using an exponent previously loaded with the [[#LoadSecureExpModKey]] command.&lt;br /&gt;
&lt;br /&gt;
=== UnwrapRsaOaepWrappedTitleKey ===&lt;br /&gt;
Takes an Rsa-Oaep-wrapped TitleKey, an RSA Public Key, and a label hash.&lt;br /&gt;
&lt;br /&gt;
Performs an Exp Mod operation using an exponent previously loaded with the [[#LoadRsaOaepKey]] command, and then validates/extracts a Titlekey from the resulting message.&lt;br /&gt;
&lt;br /&gt;
Returns a session-unique AES key especially for use in [[#LoadTitleKey]].&lt;br /&gt;
&lt;br /&gt;
=== LoadTitleKey ===&lt;br /&gt;
Takes a session-unique AES key from [[#UnwrapAesWrappedTitleKey]] or [[#UnwrapRsaOaepWrappedTitleKey]].&lt;br /&gt;
&lt;br /&gt;
=== enum CryptoUsecase ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CryptoUsecase_Aes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CryptoUsecase_RsaPrivate&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CryptoUsecase_RsaSecureExpMod&lt;br /&gt;
|-&lt;br /&gt;
| 3 || CryptoUsecase_RsaOaep&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ID 1 ==&lt;br /&gt;
Functions exposed to the kernel internally.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Sub-ID || Name || In || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0xC4000001 || [[#CpuSuspend]] || X1=power_state, X2=entrypoint_addr, X3=context_id || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x84000002 || [[#CpuOff]] || None || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xC4000003 || [[#CpuOn]] || X1=target_cpu, X2=entrypoint_addr, X3=context_id, X4,X5,X6,X7=0 || X0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000004 || [[#GetConfig]] (Same as ID 0, Sub-ID 2) || W1=config_item, X2,X3,X4,X5,X6,X7=0 || X0=result, X1,X2,X3,X4=config_val&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000005 || [[#GetRandomBytes]] (Same as ID 0, Sub-ID 6) || X1=size, X2,X3,X4,X5,X6,X7=0 || X0=result, X1,X2,X3,X4,X5,X6,X7=rand_bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000006 || [[#Panic]] || W1=panic_color, X2,X3,X4,X5,X6,X7=0 || X0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000007 || [2.0.0+] [[#ConfigureCarveout]] || X1=carveout_index, X2=region_phys_addr, X3=region_size, X4,X5,X6,X7=0 || X0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000008 || [2.0.0+] [[#ReadWriteRegister]] || X1=reg_addr, W2=rw_mask, W3=in_val, X4,X5,X6,X7=0 || X0=result, W1=out_val&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CpuSuspend ===&lt;br /&gt;
Standard ARM PCSI SMC. Suspends the CPU (CPU0).&lt;br /&gt;
&lt;br /&gt;
The kernel calls this SMC on shutdown with &#039;&#039;&#039;power_state&#039;&#039;&#039; set to 0x0201001B (power level: 0x02==system; power type: 0x01==powerdown; ID: 0x1B).&lt;br /&gt;
&lt;br /&gt;
=== CpuOff ===&lt;br /&gt;
Standard ARM PCSI SMC. Turns off the CPU (CPU1, CPU2 or CPU3).&lt;br /&gt;
&lt;br /&gt;
=== CpuOn ===&lt;br /&gt;
Standard ARM PCSI SMC. Turns on the CPU (CPU1, CPU2 or CPU3).&lt;br /&gt;
&lt;br /&gt;
=== GetConfig ===&lt;br /&gt;
Takes a &#039;&#039;&#039;config_item&#039;&#039;&#039; and returns an associated &#039;&#039;&#039;config_val&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ConfigItem || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#DisableProgramVerification]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#DramId]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#SecurityEngineIrqNumber]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#Version]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#HardwareType]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#IsRetail]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#IsRecoveryBoot]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#DeviceId]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [1.0.0-4.0.0] [[#BootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#MemoryArrange]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#IsDebugMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#UnitConfiguration]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#IsChargerHiZModeEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [4.0.0+] [[#IsKiosk]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [5.0.0+] [[#NewHardwareType]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [5.0.0+] [[#NewKeyGeneration]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [5.0.0+] [[#Package2Hash]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DisableProgramVerification ====&lt;br /&gt;
[[Process Manager services|PM]] checks this item and if non-zero, calls fsp-pr SetEnabledProgramVerification(false).&lt;br /&gt;
&lt;br /&gt;
==== DramId ====&lt;br /&gt;
This is extracted directly from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0&lt;br /&gt;
|  DramId_EristaIcosaSamsung4gb&lt;br /&gt;
|-&lt;br /&gt;
|  1&lt;br /&gt;
|  DramId_EristaIcosaHynix4gb&lt;br /&gt;
|-&lt;br /&gt;
|  2&lt;br /&gt;
|  DramId_EristaIcosaMicron4gb&lt;br /&gt;
|-&lt;br /&gt;
|  3&lt;br /&gt;
|  Reserved&lt;br /&gt;
|-&lt;br /&gt;
|  4&lt;br /&gt;
|  DramId_EristaIcosaSamsung6gb&lt;br /&gt;
|-&lt;br /&gt;
|  5&lt;br /&gt;
|  [5.0.0+] Reserved&lt;br /&gt;
|-&lt;br /&gt;
|  6&lt;br /&gt;
|  [5.0.0+] Reserved&lt;br /&gt;
|-&lt;br /&gt;
|  7&lt;br /&gt;
|  [5.0.0+] DramId_MarikoIowax1x2Samsung4gb&lt;br /&gt;
|-&lt;br /&gt;
|  8&lt;br /&gt;
|  [5.0.0+] DramId_MarikoIowaSamsung4gb&lt;br /&gt;
|-&lt;br /&gt;
|  9&lt;br /&gt;
|  [5.0.0+] DramId_MarikoIowaSamsung8gb&lt;br /&gt;
|-&lt;br /&gt;
|  10&lt;br /&gt;
|  [5.0.0+] Reserved&lt;br /&gt;
|-&lt;br /&gt;
|  11&lt;br /&gt;
|  [5.0.0+] Reserved&lt;br /&gt;
|-&lt;br /&gt;
|  12&lt;br /&gt;
|  [5.0.0+] DramId_MarikoHoagSamsung4gb&lt;br /&gt;
|-&lt;br /&gt;
|  13&lt;br /&gt;
|  [5.0.0+] DramId_MarikoHoagSamsung8gb&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[PCV_services|PCV]] configures memory profiles based on DramId.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Platform&lt;br /&gt;
!  DramId&lt;br /&gt;
!  Version&lt;br /&gt;
|-&lt;br /&gt;
|  jetson-tx1&lt;br /&gt;
|  N/A&lt;br /&gt;
|  11_40800_01_V9.8.3_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abcb&lt;br /&gt;
|  EristaIcosaSamsung4gb&lt;br /&gt;
|  10_40800_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abcb&lt;br /&gt;
|  EristaIcosaMicron4gb&lt;br /&gt;
|  10_40800_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abcb&lt;br /&gt;
|  EristaIcosaHynix4gb&lt;br /&gt;
|  10_40800_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abca2&lt;br /&gt;
|  EristaIcosaSamsung4gb or EristaIcosaMicron4gb&lt;br /&gt;
|  10_40800_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abca2&lt;br /&gt;
|  EristaIcosaHynix4gb&lt;br /&gt;
|  10_40800_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abca2&lt;br /&gt;
|  EristaIcosaSamsung6gb&lt;br /&gt;
|  10_40800_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abca2&lt;br /&gt;
|  MarikoIowax1x2Samsung4gb&lt;br /&gt;
|  01_204000_NoCfgVersion_V0.3.1_V2.0&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abca2&lt;br /&gt;
|  MarikoIowaSamsung4gb or MarikoHoagSamsung4gb&lt;br /&gt;
|  01_204000_NoCfgVersion_V0.3.1_V2.0&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abca2&lt;br /&gt;
|  MarikoIowaSamsung8gb or MarikoHoagSamsung8gb&lt;br /&gt;
|  01_204000_NoCfgVersion_V0.4.2_V2.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
nx-abcb (Copper) is the SDEV unit. Among other differences, this has extra hardware to support HDMI output.&lt;br /&gt;
&lt;br /&gt;
nx-abca2 (Icosa) hardware types are variations of the retail form factor.&lt;br /&gt;
&lt;br /&gt;
==== SecurityEngineIrqNumber ====&lt;br /&gt;
SPL uses this for setting up the security engine IRQ.&lt;br /&gt;
&lt;br /&gt;
==== Version ====&lt;br /&gt;
The current [[Package2#Versions|Package1 Maxver Constant]] - 1.&lt;br /&gt;
&lt;br /&gt;
==== HardwareType ====&lt;br /&gt;
[1.0.0+] This item is obtained by checking bits 8 and 2 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]. It can be 0 (Icosa), 1 (Copper) or 3 (Invalid).&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] This item is obtained by checking bits 8, 2 and 16-19 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]. It can be 0 (Icosa), 1 (Copper), 3 (Mariko) or 4 (Invalid).&lt;br /&gt;
&lt;br /&gt;
A value of 2 (Hoag?) is always mapped to 4 (Invalid).&lt;br /&gt;
&lt;br /&gt;
==== IsRetail ====&lt;br /&gt;
This item is obtained by checking bits 9 and 0-1 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]. It can be 0 (Debug), 1 (Retail) or 2 (Invalid).&lt;br /&gt;
&lt;br /&gt;
==== IsRecoveryBoot ====&lt;br /&gt;
Used to determine if the system is booting from SafeMode firmware.&lt;br /&gt;
&lt;br /&gt;
==== DeviceId ====&lt;br /&gt;
[[NIM_services|NIM]] checks if this item matches the [[Settings_services|set:cal]] DeviceId with byte7 cleared. If they don&#039;t match, a panic is thrown.&lt;br /&gt;
&lt;br /&gt;
==== BootReason ====&lt;br /&gt;
Used to determine how the system booted.&lt;br /&gt;
&lt;br /&gt;
==== MemoryArrange ====&lt;br /&gt;
[[Process Manager services|PM]] uses this item for selecting the appropriate size for each [[SVC#LimitableResource|LimitableResource_Memory]].&lt;br /&gt;
&lt;br /&gt;
==== IsDebugMode ====&lt;br /&gt;
Kernel uses this to determine behavior of svcBreak positive arguments. It will break instead of just force-exiting the process which is what happens on retail.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] This is also used with certain debug [[SVC|SVCs]].&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] [[Loader services|RO]] checks this and if set then skipping NRR rsa signatures is allowed.&lt;br /&gt;
&lt;br /&gt;
The value of this field is loaded from [[BootConfig]] unsigned-config+0x10 u8 bit1.&lt;br /&gt;
&lt;br /&gt;
==== UnitConfiguration ====&lt;br /&gt;
Kernel reads this when setting up memory-related code. If bit0 is set, it will memset various allocated memory-regions with 0x58, 0x59, 0x5A (&#039;X&#039;, &#039;Y&#039;, &#039;Z&#039;) instead of zero. This allows Nintendo devs to find uninitialized memory bugs. If bit17-16 is 0b01, the kernel assumes 6GB of DRAM instead of 4GB.&lt;br /&gt;
&lt;br /&gt;
bit1 and bit2 are boolean values.&lt;br /&gt;
If bit15-8 is zero, kernel will loop forever without calling smcPanic, nonzero smcPanics with 0xf00 and then loops.&lt;br /&gt;
&lt;br /&gt;
==== IsChargerHiZModeEnabled ====&lt;br /&gt;
This tells if the TI Charger (bq24192) is active.&lt;br /&gt;
&lt;br /&gt;
==== NewKeyGeneration ====&lt;br /&gt;
This item is obtained from [[Fuse_registers#FUSE_RESERVED_ODM2|FUSE_RESERVED_ODM2]] if bit 11 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]] is set, [[Fuse_registers#FUSE_RESERVED_ODM0|FUSE_RESERVED_ODM0]] matches 0x8E61ECAE and [[Fuse_registers#FUSE_RESERVED_ODM1|FUSE_RESERVED_ODM1]] matches 0xF2BA3BB2.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] [[Filesystem services|FS]] can now use this value for the &#039;&#039;&#039;KeyGeneration&#039;&#039;&#039; parameter when calling [[#GenerateAesKek|GenerateAesKek]] during &amp;quot;GetBisEncryptionKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== IsKiosk ====&lt;br /&gt;
This item is bit 10 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]].&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] [[Settings_services|Settings]] uses this value to overwrite the quest flag from [[Settings_services#set:sys|GetQuestFlag]]. This is used to detect if a Switch is a kiosk unit for display at retail stores.&lt;br /&gt;
&lt;br /&gt;
==== NewHardwareType ====&lt;br /&gt;
This item is currently hardcoded to 0.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] [[PCV_services|PCV]] overrides the value from [[#HardwareType|HardwareType]] and configures PMIC devices with this item.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Devices&lt;br /&gt;
|-&lt;br /&gt;
|  0&lt;br /&gt;
|  max77620_sd0, max77621_cpu and max77621_gpu&lt;br /&gt;
|-&lt;br /&gt;
|  1&lt;br /&gt;
|  max77620_sd0, max77812_cpu and max77812_gpu&lt;br /&gt;
|-&lt;br /&gt;
|  2&lt;br /&gt;
|  max77620_sd0, max77812_cpu and max77812_gpu&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Package2Hash ====&lt;br /&gt;
This is a SHA-256 hash calculated over the [[Package2|package2]] image. Since the hash calculation is an optional step in pkg2ldr, this item is only valid in recovery mode. Otherwise, an error is returned instead.&lt;br /&gt;
&lt;br /&gt;
=== GetRandomBytes ===&lt;br /&gt;
Takes a &#039;&#039;&#039;size&#039;&#039;&#039; and returns &#039;&#039;&#039;rand_bytes&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The kernel limits &#039;&#039;&#039;size&#039;&#039;&#039; to 0x38 (for fitting in return registers).&lt;br /&gt;
&lt;br /&gt;
=== Panic ===&lt;br /&gt;
Issues a system panic.&lt;br /&gt;
&lt;br /&gt;
The kernel always calls this with &#039;&#039;&#039;panic_color&#039;&#039;&#039; set to 0xF00.&lt;br /&gt;
&lt;br /&gt;
=== ConfigureCarveout ===&lt;br /&gt;
Configures memory controller carveout regions.&lt;br /&gt;
&lt;br /&gt;
If &#039;&#039;&#039;carveout_index&#039;&#039;&#039; is 0, &#039;&#039;&#039;region_phys_addr&#039;&#039;&#039; and &#039;&#039;&#039;region_size&#039;&#039;&#039; are used to configure &#039;&#039;&#039;MC_SECURITY_CARVEOUT4&#039;&#039;&#039;.&lt;br /&gt;
If &#039;&#039;&#039;carveout_index&#039;&#039;&#039; is 1, &#039;&#039;&#039;region_phys_addr&#039;&#039;&#039; and &#039;&#039;&#039;region_size&#039;&#039;&#039; are used to configure &#039;&#039;&#039;MC_SECURITY_CARVEOUT5&#039;&#039;&#039;.&lt;br /&gt;
Any other &#039;&#039;&#039;carveout_index&#039;&#039;&#039; values are invalid.&lt;br /&gt;
&lt;br /&gt;
The kernel calls this with &#039;&#039;&#039;carveout_index&#039;&#039;&#039; set to 0, &#039;&#039;&#039;region_phys_addr&#039;&#039;&#039; set to 0x80060000 and &#039;&#039;&#039;region_size&#039;&#039;&#039; set to a dynamically calculated size which covers all the kernel and built-in sysmodules&#039; DRAM regions.&lt;br /&gt;
&lt;br /&gt;
=== ReadWriteRegister ===&lt;br /&gt;
Relays [[SVC#svcReadWriteRegister|svcReadWriteRegister]] to the Secure Monitor.&lt;br /&gt;
&lt;br /&gt;
= Errors =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Invalid input&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Busy&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Secure_Monitor&amp;diff=4995</id>
		<title>Secure Monitor</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Secure_Monitor&amp;diff=4995"/>
		<updated>2018-09-17T21:56:58Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: Moved config vals from SPL_services&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Secure Monitor Calls =&lt;br /&gt;
&lt;br /&gt;
The secure monitor provides two top level handlers of which each provides a range of sub handlers.&lt;br /&gt;
&lt;br /&gt;
Secure Monitor Calls follow the ARM SMC calling convention up to a small change:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit number || Bit mask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 31 || 0x80000000 || Set to 0 means Yielding Call; Set to 1 means Fast Call.&lt;br /&gt;
|-&lt;br /&gt;
| 30 || 0x40000000 || Set to 0 means SMC32 convention; Set to 1 means SMC64.&lt;br /&gt;
|-&lt;br /&gt;
| 29-24 || 0x3F000000 || Service Call ranges.&lt;br /&gt;
|-&lt;br /&gt;
| 23-16 || 0x00FF0000 || Must be zero.&lt;br /&gt;
|-&lt;br /&gt;
| 15-8 || 0x0000FF00 || Argument type. This is different from the ARM SMC calling convention.&lt;br /&gt;
|-&lt;br /&gt;
| 7-0 || 0x000000FF || Function number within the range call type.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If bit &#039;&#039;n&#039;&#039; is set in the argument type then parameter X&#039;&#039;n&#039;&#039; is treated as a pointer and the kernel will setup address translation for it in [[SVC#svcCallSecureMonitor|svcCallSecureMonitor]].&lt;br /&gt;
&lt;br /&gt;
SMC arguments are passed using registers X0-X7 with X0 always sending the call sub-id and returning the result of the call.&lt;br /&gt;
&lt;br /&gt;
== ID 0 ==&lt;br /&gt;
Functions exposed to user-mode processes using [[SVC|svcCallSecureMonitor]].&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Sub-ID || Name || In || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000401 || SetConfig || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000002 || GetConfig (Same as ID 1, Sub-ID 4) || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000003 || CheckStatus || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000404 || GetResult || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000E05 || ExpMod || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000006 || GetRandomBytes (Same as ID 1, Sub-ID 5) || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000007 || [[#GenerateAesKek]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000008 || [[#LoadAesKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000009 || [[#CryptAes]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300000A || [[#GenerateSpecificAesKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300040B || [[#ComputeCmac]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-4.1.0] 0xC300100C || [[#LoadRsaOaepKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0xC300D60C || [[#EncryptRsaKeyForImport]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-4.1.0] 0xC300100D || [[#DecryptRsaPrivateKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0] 0xC300100D || [[#DecryptOrImportRsaKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-4.1.0] 0xC300100E || [[#LoadSecureExpModKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300060F || [[#SecureExpMod]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000610 || [[#UnwrapRsaOaepWrappedTitleKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000011 || [[#LoadTitleKey]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000012 || [2.0.0+] UnwrapAesWrappedTitleKey || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The overall concept here is the following:&lt;br /&gt;
* All key material (AES and RSA) is stored in userspace, but it&#039;s encrypted with random AES kek&#039;s (&amp;quot;key encryption keys&amp;quot;).&lt;br /&gt;
* Each kek is generated as a function of an access key (picked at random).&lt;br /&gt;
* The kek is generated differently depending on the [[#CryptoUsecase]] the key is used for.&lt;br /&gt;
** This means: Each key is &amp;quot;locked&amp;quot; to the [[#CryptoUsecase]] it was designated for.&lt;br /&gt;
** You can use a key for a different usecase, but you will only get garbage output.&lt;br /&gt;
* After the kek has been generated, it is wrapped with a session-specific key and given back to userspace.&lt;br /&gt;
** This means: Plaintext kek keys never leave TrustZone.&lt;br /&gt;
** Further, this means: Actual AES/RSA keys never leave TrustZone.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
The [[#enum_CryptoUsecase|CryptoUsecase_TitleKey]] represents a RSA wrapped AES key.&lt;br /&gt;
&lt;br /&gt;
=== GenerateAesKek ===&lt;br /&gt;
Takes an &amp;quot;access key&amp;quot; as input, an [[#enum_CryptoUsecase]].&lt;br /&gt;
&lt;br /&gt;
Returns a session-unique kek for said usecase.&lt;br /&gt;
&lt;br /&gt;
=== LoadAesKey ===&lt;br /&gt;
Takes a session kek created with [[#GenerateAesKek]], and a wrapped AES key.&lt;br /&gt;
&lt;br /&gt;
The session kek must have been created with [[#enum_CryptoUsecase|CryptoUsecase_Aes]].&lt;br /&gt;
&lt;br /&gt;
=== CryptAes ===&lt;br /&gt;
Encrypts/decrypts using Aes (CTR and CBC).&lt;br /&gt;
&lt;br /&gt;
Key must be set prior using one of the [[#LoadAesKey]], [[#GenerateSpecificAesKey]] or [[#LoadRsaWrappedAesKey]] commands.&lt;br /&gt;
&lt;br /&gt;
=== GenerateSpecificAesKey ===&lt;br /&gt;
Todo: This one seems unrelated to [[#enum_CryptoUsecase]].&lt;br /&gt;
&lt;br /&gt;
=== LoadRsaOaepKey ===&lt;br /&gt;
Takes a session kek created with [[#GenerateAesKek]], a wrapped AES key, and a wrapped RSA private key.&lt;br /&gt;
&lt;br /&gt;
The session kek must have been created with [[#enum_CryptoUsecase|CryptoUsecase_RsaOaep]].&lt;br /&gt;
&lt;br /&gt;
This function was removed in [[5.0.0]], and replaced with [[#EncryptRsaKeyForImport]].&lt;br /&gt;
&lt;br /&gt;
=== EncryptRsaKeyForImport ===&lt;br /&gt;
Takes in two session keks created with [[#GenerateAesKek]], two wrapped AES keys, an enum member, and a wrapped RSA private key.&lt;br /&gt;
&lt;br /&gt;
Decrypts and validates the wrapped RSA private key with the first kek/wrapped key, and re-encrypts it with the second if valid.&lt;br /&gt;
&lt;br /&gt;
The re-encrypted key is then passed to the user, for use with [[#DecryptOrImportRsaKey]].&lt;br /&gt;
&lt;br /&gt;
=== DecryptRsaPrivateKey ===&lt;br /&gt;
Takes a session kek created with [[#GenerateAesKek]], a wrapped AES key, an enum member, and a wrapped RSA private key.&lt;br /&gt;
&lt;br /&gt;
The session kek must have been created with [[#enum_CryptoUsecase|CryptoUsecase_RsaPrivate]].&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] The SMC handler when certain conditions pass and SMC_ID==0xC300100D now returns error 0x6 instead of calling the handler funcptr.&lt;br /&gt;
&lt;br /&gt;
=== DecryptOrImportRsaKey ===&lt;br /&gt;
&lt;br /&gt;
This function replaced [[#DecryptRsaPrivateKey]] in [[5.0.0]], adding an additional enum member argument.&lt;br /&gt;
&lt;br /&gt;
This SMC extends DecryptRsaPrivateKey&#039;s original functionality to enable importing private keys into the security engine instead of decrypting them, when certain enum members are passed.&lt;br /&gt;
&lt;br /&gt;
=== LoadSecureExpModKey ===&lt;br /&gt;
Takes a session kek created with [[#GenerateAesKek]], and a wrapped RSA key.&lt;br /&gt;
&lt;br /&gt;
The session kek must have been created with [[#enum_CryptoUsecase|CryptoUsecase_RsaSecureExpMod]].&lt;br /&gt;
&lt;br /&gt;
This function was removed in [[5.0.0]], and replaced with [[#EncryptRsaKeyForImport]].&lt;br /&gt;
&lt;br /&gt;
=== SecureExpMod ===&lt;br /&gt;
Performs an Exp Mod operation using an exponent previously loaded with the [[#LoadSecureExpModKey]] command.&lt;br /&gt;
&lt;br /&gt;
=== UnwrapRsaOaepWrappedTitleKey ===&lt;br /&gt;
Takes an Rsa-Oaep-wrapped TitleKey, an RSA Public Key, and a label hash.&lt;br /&gt;
&lt;br /&gt;
Performs an Exp Mod operation using an exponent previously loaded with the [[#LoadRsaOaepKey]] command, and then validates/extracts a Titlekey from the resulting message.&lt;br /&gt;
&lt;br /&gt;
Returns a session-unique AES key especially for use in [[#LoadTitleKey]].&lt;br /&gt;
&lt;br /&gt;
=== LoadTitleKey ===&lt;br /&gt;
Takes a session-unique AES key from [[#UnwrapAesWrappedTitleKey]] or [[#UnwrapRsaOaepWrappedTitleKey]].&lt;br /&gt;
&lt;br /&gt;
=== enum CryptoUsecase ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CryptoUsecase_Aes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CryptoUsecase_RsaPrivate&lt;br /&gt;
|-&lt;br /&gt;
| 2 || CryptoUsecase_RsaSecureExpMod&lt;br /&gt;
|-&lt;br /&gt;
| 3 || CryptoUsecase_RsaOaep&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ID 1 ==&lt;br /&gt;
Functions exposed to the kernel internally.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Sub-ID || Name || In || Out&lt;br /&gt;
|-&lt;br /&gt;
| 0xC4000001 || [[#CpuSuspend]] || X1=power_state, X2=entrypoint_addr, X3=context_id || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x84000002 || [[#CpuOff]] || None || None&lt;br /&gt;
|-&lt;br /&gt;
| 0xC4000003 || [[#CpuOn]] || X1=target_cpu, X2=entrypoint_addr, X3=context_id, X4,X5,X6,X7=0 || X0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000004 || [[#GetConfig]] (Same as ID 0, Sub-ID 2) || W1=config_item, X2,X3,X4,X5,X6,X7=0 || X0=result, X1,X2,X3,X4=config_val&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000005 || [[#GetRandomBytes]] (Same as ID 0, Sub-ID 6) || X1=size, X2,X3,X4,X5,X6,X7=0 || X0=result, X1,X2,X3,X4,X5,X6,X7=rand_bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000006 || [[#Panic]] || W1=panic_color, X2,X3,X4,X5,X6,X7=0 || X0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000007 || [2.0.0+] [[#ConfigureCarveout]] || X1=carveout_index, X2=region_phys_addr, X3=region_size, X4,X5,X6,X7=0 || X0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000008 || [2.0.0+] [[#ReadWriteRegister]] || X1=reg_addr, W2=rw_mask, W3=in_val, X4,X5,X6,X7=0 || X0=result, W1=out_val&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CpuSuspend ===&lt;br /&gt;
Standard ARM PCSI SMC. Suspends the CPU (CPU0).&lt;br /&gt;
&lt;br /&gt;
The kernel calls this SMC on shutdown with &#039;&#039;&#039;power_state&#039;&#039;&#039; set to 0x0201001B (power level: 0x02==system; power type: 0x01==powerdown; ID: 0x1B).&lt;br /&gt;
&lt;br /&gt;
=== CpuOff ===&lt;br /&gt;
Standard ARM PCSI SMC. Turns off the CPU (CPU1, CPU2 or CPU3).&lt;br /&gt;
&lt;br /&gt;
=== CpuOn ===&lt;br /&gt;
Standard ARM PCSI SMC. Turns on the CPU (CPU1, CPU2 or CPU3).&lt;br /&gt;
&lt;br /&gt;
=== GetConfig ===&lt;br /&gt;
Takes a &#039;&#039;&#039;config_item&#039;&#039;&#039; and returns an associated &#039;&#039;&#039;config_val&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ConfigItem || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#DisableProgramVerification]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#DramId]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#SecurityEngineIrqNumber]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#Version]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#HardwareType]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#IsRetail]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#IsRecoveryBoot]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#DeviceId]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [1.0.0-4.0.0] [[#BootReason]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#MemoryArrange]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#IsDebugMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#KernelMemoryConfiguration]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#IsChargerHiZModeEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [4.0.0+] [[#IsKiosk]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [5.0.0+] [[#NewHardwareType]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [5.0.0+] [[#NewKeyGeneration]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [5.0.0+] [[#Package2Hash]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DisableProgramVerification ====&lt;br /&gt;
[[Process Manager services|PM]] checks this item and if non-zero, calls fsp-pr SetEnabledProgramVerification(false).&lt;br /&gt;
&lt;br /&gt;
==== DramId ====&lt;br /&gt;
This is extracted directly from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0&lt;br /&gt;
|  DramId_EristaIcosaSamsung4gb&lt;br /&gt;
|-&lt;br /&gt;
|  1&lt;br /&gt;
|  DramId_EristaIcosaHynix4gb&lt;br /&gt;
|-&lt;br /&gt;
|  2&lt;br /&gt;
|  DramId_EristaIcosaMicron4gb&lt;br /&gt;
|-&lt;br /&gt;
|  3&lt;br /&gt;
|  Reserved&lt;br /&gt;
|-&lt;br /&gt;
|  4&lt;br /&gt;
|  DramId_EristaIcosaSamsung6gb&lt;br /&gt;
|-&lt;br /&gt;
|  5&lt;br /&gt;
|  [5.0.0+] Reserved&lt;br /&gt;
|-&lt;br /&gt;
|  6&lt;br /&gt;
|  [5.0.0+] Reserved&lt;br /&gt;
|-&lt;br /&gt;
|  7&lt;br /&gt;
|  [5.0.0+] DramId_MarikoIowax1x2Samsung4gb&lt;br /&gt;
|-&lt;br /&gt;
|  8&lt;br /&gt;
|  [5.0.0+] DramId_MarikoIowaSamsung4gb&lt;br /&gt;
|-&lt;br /&gt;
|  9&lt;br /&gt;
|  [5.0.0+] DramId_MarikoIowaSamsung8gb&lt;br /&gt;
|-&lt;br /&gt;
|  10&lt;br /&gt;
|  [5.0.0+] Reserved&lt;br /&gt;
|-&lt;br /&gt;
|  11&lt;br /&gt;
|  [5.0.0+] Reserved&lt;br /&gt;
|-&lt;br /&gt;
|  12&lt;br /&gt;
|  [5.0.0+] DramId_MarikoHoagSamsung4gb&lt;br /&gt;
|-&lt;br /&gt;
|  13&lt;br /&gt;
|  [5.0.0+] DramId_MarikoHoagSamsung8gb&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[PCV_services|PCV]] configures memory profiles based on DramId.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Platform&lt;br /&gt;
!  DramId&lt;br /&gt;
!  Version&lt;br /&gt;
|-&lt;br /&gt;
|  jetson-tx1&lt;br /&gt;
|  N/A&lt;br /&gt;
|  11_40800_01_V9.8.3_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abcb&lt;br /&gt;
|  EristaIcosaSamsung4gb&lt;br /&gt;
|  10_40800_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abcb&lt;br /&gt;
|  EristaIcosaMicron4gb&lt;br /&gt;
|  10_40800_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abcb&lt;br /&gt;
|  EristaIcosaHynix4gb&lt;br /&gt;
|  10_40800_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abca2&lt;br /&gt;
|  EristaIcosaSamsung4gb or EristaIcosaMicron4gb&lt;br /&gt;
|  10_40800_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abca2&lt;br /&gt;
|  EristaIcosaHynix4gb&lt;br /&gt;
|  10_40800_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abca2&lt;br /&gt;
|  EristaIcosaSamsung6gb&lt;br /&gt;
|  10_40800_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abca2&lt;br /&gt;
|  MarikoIowax1x2Samsung4gb&lt;br /&gt;
|  01_204000_NoCfgVersion_V0.3.1_V2.0&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abca2&lt;br /&gt;
|  MarikoIowaSamsung4gb or MarikoHoagSamsung4gb&lt;br /&gt;
|  01_204000_NoCfgVersion_V0.3.1_V2.0&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abca2&lt;br /&gt;
|  MarikoIowaSamsung8gb or MarikoHoagSamsung8gb&lt;br /&gt;
|  01_204000_NoCfgVersion_V0.4.2_V2.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
nx-abcb (Copper) is the SDEV unit. Among other differences, this has extra hardware to support HDMI output.&lt;br /&gt;
&lt;br /&gt;
nx-abca2 (Icosa) hardware types are variations of the retail form factor.&lt;br /&gt;
&lt;br /&gt;
==== SecurityEngineIrqNumber ====&lt;br /&gt;
SPL uses this for setting up the security engine IRQ.&lt;br /&gt;
&lt;br /&gt;
==== Version ====&lt;br /&gt;
The current [[Package2#Versions|Package1 Maxver Constant]] - 1.&lt;br /&gt;
&lt;br /&gt;
==== HardwareType ====&lt;br /&gt;
[1.0.0+] This item is obtained by checking bits 8 and 2 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]. It can be 0 (Icosa), 1 (Copper) or 3 (Invalid).&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] This item is obtained by checking bits 8, 2 and 16-19 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]. It can be 0 (Icosa), 1 (Copper), 3 (Mariko) or 4 (Invalid).&lt;br /&gt;
&lt;br /&gt;
A value of 2 (Hoag?) is always mapped to 4 (Invalid).&lt;br /&gt;
&lt;br /&gt;
==== IsRetail ====&lt;br /&gt;
This item is obtained by checking bits 9 and 0-1 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]. It can be 0 (Debug), 1 (Retail) or 2 (Invalid).&lt;br /&gt;
&lt;br /&gt;
==== IsRecoveryBoot ====&lt;br /&gt;
Used to determine if the system is booting from SafeMode firmware.&lt;br /&gt;
&lt;br /&gt;
==== DeviceId ====&lt;br /&gt;
[[NIM_services|NIM]] checks if this item matches the [[Settings_services|set:cal]] DeviceId with byte7 cleared. If they don&#039;t match, a panic is thrown.&lt;br /&gt;
&lt;br /&gt;
==== BootReason ====&lt;br /&gt;
Used to determine how the system booted.&lt;br /&gt;
&lt;br /&gt;
==== MemoryArrange ====&lt;br /&gt;
[[Process Manager services|PM]] uses this item for selecting the appropriate size for each [[SVC#LimitableResource|LimitableResource_Memory]].&lt;br /&gt;
&lt;br /&gt;
==== IsDebugMode ====&lt;br /&gt;
Kernel uses this to determine behavior of svcBreak positive arguments. It will break instead of just force-exiting the process which is what happens on retail.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] This is also used with certain debug [[SVC|SVCs]].&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] [[Loader services|RO]] checks this and if set then skipping NRR rsa signatures is allowed.&lt;br /&gt;
&lt;br /&gt;
The value of this field is loaded from [[BootConfig]] unsigned-config+0x10 u8 bit1.&lt;br /&gt;
&lt;br /&gt;
==== KernelMemoryConfiguration ====&lt;br /&gt;
Kernel reads this when setting up memory-related code. If bit0 is set, it will memset various allocated memory-regions with 0x58, 0x59, 0x5A (&#039;X&#039;, &#039;Y&#039;, &#039;Z&#039;) instead of zero. This allows Nintendo devs to find uninitialized memory bugs. If bit17-16 is 0b01, the kernel assumes 6GB of DRAM instead of 4GB.&lt;br /&gt;
&lt;br /&gt;
==== IsChargerHiZModeEnabled ====&lt;br /&gt;
This tells if the TI Charger (bq24192) is active.&lt;br /&gt;
&lt;br /&gt;
==== NewKeyGeneration ====&lt;br /&gt;
This item is obtained from [[Fuse_registers#FUSE_RESERVED_ODM2|FUSE_RESERVED_ODM2]] if bit 11 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]] is set, [[Fuse_registers#FUSE_RESERVED_ODM0|FUSE_RESERVED_ODM0]] matches 0x8E61ECAE and [[Fuse_registers#FUSE_RESERVED_ODM1|FUSE_RESERVED_ODM1]] matches 0xF2BA3BB2.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] [[Filesystem services|FS]] can now use this value for the &#039;&#039;&#039;KeyGeneration&#039;&#039;&#039; parameter when calling [[#GenerateAesKek|GenerateAesKek]] during &amp;quot;GetBisEncryptionKey&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== IsKiosk ====&lt;br /&gt;
This item is bit 10 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]].&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] [[Settings_services|Settings]] uses this value to overwrite the quest flag from [[Settings_services#set:sys|GetQuestFlag]]. This is used to detect if a Switch is a kiosk unit for display at retail stores.&lt;br /&gt;
&lt;br /&gt;
==== NewHardwareType ====&lt;br /&gt;
This item is currently hardcoded to 0.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] [[PCV_services|PCV]] overrides the value from [[#HardwareType|HardwareType]] and configures PMIC devices with this item.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Devices&lt;br /&gt;
|-&lt;br /&gt;
|  0&lt;br /&gt;
|  max77620_sd0, max77621_cpu and max77621_gpu&lt;br /&gt;
|-&lt;br /&gt;
|  1&lt;br /&gt;
|  max77620_sd0, max77812_cpu and max77812_gpu&lt;br /&gt;
|-&lt;br /&gt;
|  2&lt;br /&gt;
|  max77620_sd0, max77812_cpu and max77812_gpu&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Package2Hash ====&lt;br /&gt;
This is a SHA-256 hash calculated over the [[Package2|package2]] image. Since the hash calculation is an optional step in pkg2ldr, this item is only valid in recovery mode. Otherwise, an error is returned instead.&lt;br /&gt;
&lt;br /&gt;
=== GetRandomBytes ===&lt;br /&gt;
Takes a &#039;&#039;&#039;size&#039;&#039;&#039; and returns &#039;&#039;&#039;rand_bytes&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The kernel limits &#039;&#039;&#039;size&#039;&#039;&#039; to 0x38 (for fitting in return registers).&lt;br /&gt;
&lt;br /&gt;
=== Panic ===&lt;br /&gt;
Issues a system panic.&lt;br /&gt;
&lt;br /&gt;
The kernel always calls this with &#039;&#039;&#039;panic_color&#039;&#039;&#039; set to 0xF00.&lt;br /&gt;
&lt;br /&gt;
=== ConfigureCarveout ===&lt;br /&gt;
Configures memory controller carveout regions.&lt;br /&gt;
&lt;br /&gt;
If &#039;&#039;&#039;carveout_index&#039;&#039;&#039; is 0, &#039;&#039;&#039;region_phys_addr&#039;&#039;&#039; and &#039;&#039;&#039;region_size&#039;&#039;&#039; are used to configure &#039;&#039;&#039;MC_SECURITY_CARVEOUT4&#039;&#039;&#039;.&lt;br /&gt;
If &#039;&#039;&#039;carveout_index&#039;&#039;&#039; is 1, &#039;&#039;&#039;region_phys_addr&#039;&#039;&#039; and &#039;&#039;&#039;region_size&#039;&#039;&#039; are used to configure &#039;&#039;&#039;MC_SECURITY_CARVEOUT5&#039;&#039;&#039;.&lt;br /&gt;
Any other &#039;&#039;&#039;carveout_index&#039;&#039;&#039; values are invalid.&lt;br /&gt;
&lt;br /&gt;
The kernel calls this with &#039;&#039;&#039;carveout_index&#039;&#039;&#039; set to 0, &#039;&#039;&#039;region_phys_addr&#039;&#039;&#039; set to 0x80060000 and &#039;&#039;&#039;region_size&#039;&#039;&#039; set to a dynamically calculated size which covers all the kernel and built-in sysmodules&#039; DRAM regions.&lt;br /&gt;
&lt;br /&gt;
=== ReadWriteRegister ===&lt;br /&gt;
Relays [[SVC#svcReadWriteRegister|svcReadWriteRegister]] to the Secure Monitor.&lt;br /&gt;
&lt;br /&gt;
= Errors =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Invalid input&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Busy&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=SPL_services&amp;diff=4994</id>
		<title>SPL services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=SPL_services&amp;diff=4994"/>
		<updated>2018-09-17T21:56:16Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: /* GetConfig */ moving this over to SMC&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;SPL is responsible for handling all cryptographic operations within the system and relaying them to the [[#SMC|Secure Monitor]] when necessary.&lt;br /&gt;
&lt;br /&gt;
During [1.0.0-3.0.2], the only existing services were &amp;quot;csrng&amp;quot; and &amp;quot;spl:&amp;quot;. However, in [4.0.0+] the &amp;quot;spl:&amp;quot; service was refactored and split into new services with different permission levels. Each service exposes the IPC command list differently in order to prevent cryptographic operations to take place in the wrong context.&lt;br /&gt;
&lt;br /&gt;
= csrng =&lt;br /&gt;
This is &amp;quot;nn::spl::detail::IRandomInterface&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 || [[#GetRandomBytes]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetRandomBytes ==&lt;br /&gt;
Takes a type-6 buffer and fills it with random data from [[SMC#GetRandomBytes|GetRandomBytes SMC]]. Same command for &amp;quot;spl:&amp;quot; and &amp;quot;csrng&amp;quot; services.&lt;br /&gt;
&lt;br /&gt;
= spl:, spl:mig, spl:fs, spl:ssl, spl:es, spl:manu =&lt;br /&gt;
These are &amp;quot;nn::spl::detail::IGeneralInterface&amp;quot;, &amp;quot;nn::spl::detail::ICryptoInterface&amp;quot;, &amp;quot;nn::spl::detail::IFsInterface&amp;quot;, &amp;quot;nn::spl::detail::ISslInterface&amp;quot;, &amp;quot;nn::spl::detail::IEsInterface&amp;quot; and &amp;quot;nn::spl::detail::IManuInterface&amp;quot;(?).&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Where previously only one AES engine was utilized, there is now support for 4 of them.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] When the session closes, all AES engines that were locked are automatically unlocked.&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 || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetConfig]] || spl:, spl:mig, spl:fs, spl:ssl, spl:es, spl:manu&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#UserExpMod]] || spl:, spl:mig, spl:fs, spl:ssl, spl:es, spl:manu &lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GenerateAesKek]] || spl:mig, spl:fs, spl:ssl, spl:es, spl:manu &lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#LoadAesKey]] || spl:mig, spl:fs, spl:ssl, spl:es, spl:manu&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#GenerateAesKey]] || spl:mig, spl:fs, spl:ssl, spl:es, spl:manu &lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#SetConfig]] || spl:, spl:mig, spl:fs, spl:ssl, spl:es, spl:manu &lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GetRandomBytes]] || spl:, spl:mig, spl:fs, spl:ssl, spl:es, spl:manu&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#LoadSecureExpModKey]] || spl:fs&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#SecureExpMod]] || spl:fs&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#IsDevelopment]] || spl:, spl:mig, spl:fs, spl:ssl spl:es, spl:manu&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#GenerateSpecificAesKey]] || spl:fs&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#DecryptRsaPrivateKey]] || spl:ssl, spl:es, spl:manu&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#DecryptAesKey]] || spl:mig, spl:fs, spl:ssl, spl:es, spl:manu&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#DecryptAesCtr]] || spl:mig, spl:fs, spl:ssl, spl:es, spl:manu&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#ComputeCmac]] || spl:mig, spl:fs, spl:ssl, spl:es, spl:manu &lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#LoadRsaOaepKey]] || spl:es&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#UnwrapRsaOaepWrappedTitleKey]] || spl:es&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#LoadTitleKey]] || spl:fs&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [2.0.0+] [[#UnwrapAesWrappedTitleKey ]] || spl:es&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [2.0.0+] [[#LockAesEngine]] || spl:mig, spl:fs, spl:ssl, spl:es, spl:manu&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [2.0.0+] [[#UnlockAesEngine]] || spl:mig, spl:fs, spl:ssl, spl:es, spl:manu&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [2.0.0+] [[#GetSplWaitEvent]] || spl:mig, spl:fs, spl:ssl, spl:es, spl:manu&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#SetSharedData]] || spl:, spl:mig, spl:fs, spl:ssl, spl:es, spl:manu&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [3.0.0+] [[#GetSharedData]] || spl:, spl:mig, spl:fs, spl:ssl, spl:es, spl:manu&lt;br /&gt;
|-&lt;br /&gt;
| 26 || [5.0.0+] ImportSslRsaKey || spl:ssl&lt;br /&gt;
|-&lt;br /&gt;
| 27 || [5.0.0+] SecureExpModWithSslKey || spl:ssl&lt;br /&gt;
|-&lt;br /&gt;
| 28 || [5.0.0+] ImportEsRsaKey || spl:es&lt;br /&gt;
|-&lt;br /&gt;
| 29 || [5.0.0+] SecureExpModWithEsKey || spl:es&lt;br /&gt;
|-&lt;br /&gt;
| 30 || [5.0.0+] EncryptManuRsaKeyForImport || spl:manu&lt;br /&gt;
|-&lt;br /&gt;
| 31 || [5.0.0+] GetPackage2Hash || spl:fs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetConfig ==&lt;br /&gt;
Wrapper for [[SMC#GetConfig|GetConfig SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes a u32 (&#039;&#039;&#039;ConfigItem&#039;&#039;&#039;), and returns one or more u64s (&#039;&#039;&#039;ConfigVal&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== UserExpMod ==&lt;br /&gt;
Wrapper for [[SMC#ExpMod|ExpMod SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes one type-10 (C descriptor) buffer (&#039;&#039;&#039;data_out_buf&#039;&#039;&#039;) and 3 type-9 (X descriptor) buffers (&#039;&#039;&#039;data_in_buf&#039;&#039;&#039;, &#039;&#039;&#039;exp_in_buf&#039;&#039;&#039; and &#039;&#039;&#039;mod_in_buf&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Performs asymmetric crypto with user supplied modulus and exponent.&lt;br /&gt;
&lt;br /&gt;
== GenerateAesKek ==&lt;br /&gt;
Wrapper for [[SMC#GenerateAesKek|GenerateAesKek SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes a 16-byte EKS (&#039;&#039;&#039;Encryption Key Source&#039;&#039;&#039;) and two words (&#039;&#039;&#039;KeyGeneration&#039;&#039;&#039; and &#039;&#039;&#039;option&#039;&#039;&#039;) as input.&lt;br /&gt;
&lt;br /&gt;
Returns a scrambled sealed KEK (&#039;&#039;&#039;Key Encryption Key&#039;&#039;&#039; used as &#039;&#039;&#039;key_x&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== LoadAesKey ==&lt;br /&gt;
Wrapper for [[SMC#LoadAesKey|LoadAesKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes a u32 (&#039;&#039;&#039;keyslot&#039;&#039;&#039;) and two 16-byte keys (&#039;&#039;&#039;key_x&#039;&#039;&#039; and &#039;&#039;&#039;key_y&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Sets the specified &#039;&#039;&#039;keyslot&#039;&#039;&#039; with a key generated from &#039;&#039;&#039;key_x&#039;&#039;&#039; and &#039;&#039;&#039;key_y&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Now verifies that the engine in use (0..3) is locked/owned by the current spl session, otherwise errors with 0xD21A. Previously engine was hardcoded to 0.&lt;br /&gt;
&lt;br /&gt;
== GenerateAesKey ==&lt;br /&gt;
Takes a 16-byte KEK (&#039;&#039;&#039;key_x&#039;&#039;&#039;) and a 16-byte encrypted key (&#039;&#039;&#039;enc_key&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Generates a new key by decrypting (AES-ECB) &#039;&#039;&#039;enc_key&#039;&#039;&#039; with a key generated from the supplied &#039;&#039;&#039;key_x&#039;&#039;&#039; and a fixed &#039;&#039;&#039;key_y&#039;&#039;&#039; set with [[SMC#LoadAesKey|LoadAesKey SMC]].&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Previously, it always used engine 0. Now it tries to allocate an engine to be used and returns 0xD01A if they&#039;re all busy. When the command is done, the engine is released.&lt;br /&gt;
&lt;br /&gt;
== SetConfig ==&lt;br /&gt;
Wrapper for [[SMC#SetConfig|SetConfig SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes a u32 (&#039;&#039;&#039;ConfigItem&#039;&#039;&#039;) and a u64 (&#039;&#039;&#039;ConfigVal&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ConfigItem || Name&lt;br /&gt;
|-&lt;br /&gt;
| 13 || BatteryProfile&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Any other &#039;&#039;&#039;ConfigItem&#039;&#039;&#039;, besides 13, can&#039;t be set.&lt;br /&gt;
&lt;br /&gt;
== LoadSecureExpModKey ==&lt;br /&gt;
Wrapper for [[SMC#LoadSecureExpModKey|LoadSecureExpModKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes one type-9 (X descriptor) buffer (&#039;&#039;&#039;enc_privk_in_buf&#039;&#039;&#039;), a 16-byte KEK (&#039;&#039;&#039;key_x&#039;&#039;&#039;), a 16-byte key (&#039;&#039;&#039;key_y&#039;&#039;&#039;) and a u32 (&#039;&#039;&#039;version&#039;&#039;&#039;).&lt;br /&gt;
&#039;&#039;&#039;version&#039;&#039;&#039; is 0 for normal keys or 1 for extended keys.&lt;br /&gt;
&lt;br /&gt;
Decrypts &#039;&#039;&#039;enc_privk_in_buf&#039;&#039;&#039; with a key generated from &#039;&#039;&#039;key_x&#039;&#039;&#039; and &#039;&#039;&#039;key_y&#039;&#039;&#039; and imports it for later usage.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] This now calls [[SMC#EncryptRsaKeyForImport|EncryptRsaKeyForImport SMC]] instead.&lt;br /&gt;
&lt;br /&gt;
== SecureExpMod ==&lt;br /&gt;
Takes 3 type-9 (X descriptor) buffers (&#039;&#039;&#039;data_in_buf&#039;&#039;&#039;, &#039;&#039;&#039;mod_in_buf&#039;&#039;&#039; and &#039;&#039;&#039;param0_in_buf&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Uses [[SMC#SecureExpMod|SecureExpMod SMC]] to decrypt &#039;&#039;&#039;data_in_buf&#039;&#039;&#039; using the private key imported with [[#LoadSecureExpModKey]] and the supplied &#039;&#039;&#039;mod_in_buf&#039;&#039;&#039; and &#039;&#039;&#039;param0_in_buf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Generates and returns a 16-byte sealed titlekey.&lt;br /&gt;
&lt;br /&gt;
== IsDevelopment ==&lt;br /&gt;
No input params.&lt;br /&gt;
&lt;br /&gt;
Uses [[#GetConfig]] internally with id=6. Returns true if output from that is 0, or if the SMC returned error 2.&lt;br /&gt;
&lt;br /&gt;
Returns an u8 flag for whether the system is devunit. Output flag is 0 on retail.&lt;br /&gt;
&lt;br /&gt;
== GenerateSpecificAesKey ==&lt;br /&gt;
Wrapper for [[SMC#GenerateSpecificAesKey|GenerateSpecificAesKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes a 16-byte seed (&#039;&#039;&#039;key_seed&#039;&#039;&#039;) and two words (&#039;&#039;&#039;KeyGeneration&#039;&#039;&#039; and &#039;&#039;&#039;option&#039;&#039;&#039;) as input.&lt;br /&gt;
&lt;br /&gt;
Returns a scrambled key (&#039;&#039;&#039;key_a&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== DecryptRsaPrivateKey ==&lt;br /&gt;
Wrapper for [[SMC#DecryptRsaPrivateKey|DecryptRsaPrivateKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes one type-10 (C descriptor) buffer (&#039;&#039;&#039;dec_privk_out_buf&#039;&#039;&#039;), one type-9 (X descriptor) buffer (&#039;&#039;&#039;enc_privk_in_buf&#039;&#039;&#039;), a 16-byte KEK (&#039;&#039;&#039;key_x&#039;&#039;&#039;), a 16-byte key (&#039;&#039;&#039;key_y&#039;&#039;&#039;) and a u32 (&#039;&#039;&#039;version&#039;&#039;&#039;).&lt;br /&gt;
&#039;&#039;&#039;version&#039;&#039;&#039; is 0 for normal keys or 1 for extended keys.&lt;br /&gt;
&lt;br /&gt;
Decrypts &#039;&#039;&#039;enc_privk_in_buf&#039;&#039;&#039; into &#039;&#039;&#039;dec_privk_out_buf&#039;&#039;&#039; with a key generated from &#039;&#039;&#039;key_x&#039;&#039;&#039; and &#039;&#039;&#039;key_y&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Used by [[SSL_services|SSL]]-sysmodule for TLS client-privk.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] This now calls [[SMC#DecryptOrImportRsaKey|DecryptOrImportRsaKey SMC]] instead.&lt;br /&gt;
&lt;br /&gt;
== DecryptAesKey ==&lt;br /&gt;
Takes a 16-byte encrypted key (&#039;&#039;&#039;enc_key&#039;&#039;&#039;) and two words (&#039;&#039;&#039;KeyGeneration&#039;&#039;&#039; and &#039;&#039;&#039;option&#039;&#039;&#039;) as input.&lt;br /&gt;
&lt;br /&gt;
Decrypts (AES-ECB) &#039;&#039;&#039;enc_key&#039;&#039;&#039; with a key generated from fixed &#039;&#039;&#039;key_x&#039;&#039;&#039; and &#039;&#039;&#039;key_y&#039;&#039;&#039; set with [[SMC#LoadAesKey|LoadAesKey SMC]] and returns a 16-byte decrypted key (&#039;&#039;&#039;dec_key&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Introduced same engine allocation code as for [[#GenerateAesKey]].&lt;br /&gt;
&lt;br /&gt;
== DecryptAesCtr ==&lt;br /&gt;
Takes a type-0x46 (B descriptor) buffer (&#039;&#039;&#039;data_out_buf&#039;&#039;&#039;), a u32 (&#039;&#039;&#039;keyslot&#039;&#039;&#039;), a type-0x45 (A descriptor) buffer (&#039;&#039;&#039;data_in_buf&#039;&#039;&#039;) and a 16-byte CTR (&#039;&#039;&#039;aes_ctr&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Uses [[SMC#CryptAes|CryptAes SMC]] to decrypt &#039;&#039;&#039;data_in_buf&#039;&#039;&#039; into &#039;&#039;&#039;data_out_buf&#039;&#039;&#039;, using the key set in the specified &#039;&#039;&#039;keyslot&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Verifies the engine is locked by current session.&lt;br /&gt;
&lt;br /&gt;
== ComputeCmac ==&lt;br /&gt;
Wrapper for [[SMC#ComputeCmac|ComputeCmac SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes one type-9 (X descriptor) buffer (&#039;&#039;&#039;data_in_buf&#039;&#039;&#039;) and a u32 (&#039;&#039;&#039;type?&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Returns a 16-byte CMAC calculated over &#039;&#039;&#039;data_in_buf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Verifies the engine is locked by current session.&lt;br /&gt;
&lt;br /&gt;
== LoadRsaOaepKey ==&lt;br /&gt;
Wrapper for [[SMC#LoadRsaOaepKey|LoadRsaOaepKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes one type-9 (X descriptor) buffer (enc_privk_in_buf), a 16-byte KEK (key_x), a 16-byte key (key_y) and a u32 (version). version is 0 for normal keys or 1 for extended keys.&lt;br /&gt;
&lt;br /&gt;
Decrypts enc_privk_in_buf with a key generated from key_x and key_y and imports it for later usage.&lt;br /&gt;
&lt;br /&gt;
== UnwrapRsaOaepWrappedTitleKey ==&lt;br /&gt;
Wrapper for [[SMC#UnwrapRsaOaepWrappedTitleKey|UnwrapRsaOaepWrappedTitleKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes one type-10 (C descriptor) buffer (&#039;&#039;&#039;data_out_buf&#039;&#039;&#039;) and 3 type-9 (X descriptor) buffers (&#039;&#039;&#039;data_in_buf&#039;&#039;&#039;, &#039;&#039;&#039;mod_in_buf&#039;&#039;&#039; and &#039;&#039;&#039;label_hash_in_buf&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Decrypts &#039;&#039;&#039;data_in_buf&#039;&#039;&#039; into &#039;&#039;&#039;data_out_buf&#039;&#039;&#039; using the private key imported with [[#LoadRsaOaepKey]] and the supplied &#039;&#039;&#039;mod_in_buf&#039;&#039;&#039;. Afterwards, verifies RSA-OAEP encoding using &#039;&#039;&#039;label_hash_in_buf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Returns an u32 (&#039;&#039;&#039;dec_data_size&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== LoadTitleKey ==&lt;br /&gt;
Wrapper for [[SMC#LoadTitleKey|LoadTitleKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes a u32 (&#039;&#039;&#039;keyslot&#039;&#039;&#039;) and a 16-byte sealed titlekey.&lt;br /&gt;
&lt;br /&gt;
Sets the specified &#039;&#039;&#039;keyslot&#039;&#039;&#039; with the titlekey.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Verifies the engine is locked by current session.&lt;br /&gt;
&lt;br /&gt;
== UnwrapAesWrappedTitleKey ==&lt;br /&gt;
Wrapper for [[SMC#UnwrapAesWrappedTitleKey|UnwrapAesWrappedTitleKey SMC]].&lt;br /&gt;
&lt;br /&gt;
Takes a 16-byte EKS (&#039;&#039;&#039;Encryption Key Source&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Returns a sealed titlekey.&lt;br /&gt;
&lt;br /&gt;
== LockAesEngine ==&lt;br /&gt;
Returns the id of the engine that was locked, or 0xD01A if all engines are busy. You need to lock an engine before using AES functions.&lt;br /&gt;
&lt;br /&gt;
== UnlockAesEngine ==&lt;br /&gt;
Takes a single u32 and unlocks the engine with that id. It must be owned by current session otherwise 0xD21A will be returned.&lt;br /&gt;
&lt;br /&gt;
== GetSplWaitEvent ==&lt;br /&gt;
Returns an event handle for synchronizing with the locked AES engine.&lt;br /&gt;
&lt;br /&gt;
== SetSharedData ==&lt;br /&gt;
Sets a static dword in spl .bss to the user input u32.&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] returns 0xD41A if a value has been previously set without being [[#GetSharedData|gotten]].&lt;br /&gt;
&lt;br /&gt;
== GetSharedData ==&lt;br /&gt;
Returns the static dword in spl .bss that can be set via [[#SetSharedData]].&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] returns 0xD61A if a value has not previously been set, and unsets the value after getting it.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Savegames&amp;diff=4768</id>
		<title>Savegames</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Savegames&amp;diff=4768"/>
		<updated>2018-06-17T03:00:35Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes the format of savegames contained in NAND. NAND savegames do not use an container with the entire file encrypted. Various areas of the saveimage is uninitialized data, resulting in encrypted data in those areas (like 3DS did).&lt;br /&gt;
&lt;br /&gt;
=== AES CMAC header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Image offset&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 0x10&lt;br /&gt;
| AES-CMAC over DISF header (size 0x200)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0xF0&lt;br /&gt;
| Zero padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The final CMAC key used for this is generated using GenerateAesKek with a kek source and the device key, along with and LoadAesKey and a set key seed.&lt;br /&gt;
&lt;br /&gt;
==== DISF ====&lt;br /&gt;
&lt;br /&gt;
* This is located @ 0x100 in the image, following the CMAC header.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000&lt;br /&gt;
| 4&lt;br /&gt;
| Magic (&amp;quot;DISF&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x004&lt;br /&gt;
| 4&lt;br /&gt;
| Magic Number (0x40000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x008&lt;br /&gt;
| 32&lt;br /&gt;
| Hash of start of DPFS to end of 0x4000 block (usually/always? 0x300-0x3FFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x028&lt;br /&gt;
| 8&lt;br /&gt;
| Primary Partition Table Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x030&lt;br /&gt;
| 8&lt;br /&gt;
| Primary Partition Table Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x038&lt;br /&gt;
| 8&lt;br /&gt;
| Secondary Partition Table Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x040&lt;br /&gt;
| 8&lt;br /&gt;
| Secondary Partition Table Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x048&lt;br /&gt;
| 8&lt;br /&gt;
| Save Partition Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x050&lt;br /&gt;
| 8&lt;br /&gt;
| Save Partition Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x258&lt;br /&gt;
| &lt;br /&gt;
| End&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DPFS ====&lt;br /&gt;
&lt;br /&gt;
* This is located @ 0x300 in the image, following DISF.&lt;br /&gt;
* Block sizes are log2&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Magic (&amp;quot;DPFS&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Magic Number (0x10000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 8&lt;br /&gt;
| Offset 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 8&lt;br /&gt;
| Size 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Block Size 0, in log 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 8&lt;br /&gt;
| Offset 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 8&lt;br /&gt;
| Size 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 4&lt;br /&gt;
| Block Size 1, in log 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 8&lt;br /&gt;
| Offset 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 8&lt;br /&gt;
| Size 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 4&lt;br /&gt;
| Block Size 2, in log 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== IVFC ====&lt;br /&gt;
&lt;br /&gt;
* Generally follows DPFS, similar to 3DS.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Magic (&amp;quot;IVFC&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Magic Number (0x20000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 8&lt;br /&gt;
| Master hash size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 8&lt;br /&gt;
| Level 1 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 8&lt;br /&gt;
| Level 1 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| Level 1 block size, in log2&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 8&lt;br /&gt;
| Level 2 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 8&lt;br /&gt;
| Level 2 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 4&lt;br /&gt;
| Level 2 block size, in log2.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 8&lt;br /&gt;
| Level 3 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 8&lt;br /&gt;
| Level 3 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 4&lt;br /&gt;
| Level 3 block size, in log2.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 8&lt;br /&gt;
| Level 4 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 8&lt;br /&gt;
| Level 4 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 4&lt;br /&gt;
| Level 4 block size, in log2.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| 4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 48&lt;br /&gt;
| Unknown, reserved?&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0&lt;br /&gt;
| 32&lt;br /&gt;
| Hash&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== JNGL ====&lt;br /&gt;
&lt;br /&gt;
* Generally follows IVFC&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Magic (&amp;quot;JNGL&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Magic Number (0x10000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 8&lt;br /&gt;
| Savedata Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown, Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 8&lt;br /&gt;
| Savedata Blocksize?&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 464&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAVE ====&lt;br /&gt;
&lt;br /&gt;
* Generally follows JNGL, structure is different from 3DS.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Magic (&amp;quot;SAVE&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Magic Number (0x60000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown, number&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown, block size&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown, block size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RMAP ====&lt;br /&gt;
&lt;br /&gt;
* There are generally two RMAP blocks in sequence.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Magic (&amp;quot;RMAP&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Magic Number (0x10000)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Files ===&lt;br /&gt;
&lt;br /&gt;
==== File Offset Table ====&lt;br /&gt;
&lt;br /&gt;
* Indexes 0 and 1 are reserved to point towards the folder and file tables.&lt;br /&gt;
&lt;br /&gt;
===== File Offset Table Entry =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 3&lt;br /&gt;
| Data offset, in blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| 1&lt;br /&gt;
| Unknown, 80&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unknown, 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== File/Folder Table Entry ====&lt;br /&gt;
&lt;br /&gt;
* The root file/folder index is generally 2&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Parent Folder Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 64&lt;br /&gt;
| Filename&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 4&lt;br /&gt;
| File/Folder Index?&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 4&lt;br /&gt;
| File offset index in offset table, 0 for folders&lt;br /&gt;
|-&lt;br /&gt;
| 0x4c&lt;br /&gt;
| 8&lt;br /&gt;
| File size, or number of files for folders&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x5c&lt;br /&gt;
| 4&lt;br /&gt;
| Next File Index, same as folder index for folders&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Savegames&amp;diff=4767</id>
		<title>Savegames</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Savegames&amp;diff=4767"/>
		<updated>2018-06-17T02:53:14Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes the format of savegames contained in NAND. NAND savegames do not use an container with the entire file encrypted. Various areas of the saveimage is uninitialized data, resulting in encrypted data in those areas (like 3DS did).&lt;br /&gt;
&lt;br /&gt;
=== AES CMAC header ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Image offset&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 0x10&lt;br /&gt;
| AES-CMAC over DISF header (size 0x200)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0xF0&lt;br /&gt;
| Zero padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The final CMAC key used for this is generated using GenerateAesKek with a kek source and the device key, along with and LoadAesKey and a set key seed.&lt;br /&gt;
&lt;br /&gt;
==== DISF ====&lt;br /&gt;
&lt;br /&gt;
* This is located @ 0x100 in the image, following the CMAC header.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000&lt;br /&gt;
| 4&lt;br /&gt;
| Magic (&amp;quot;DISF&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x004&lt;br /&gt;
| 4&lt;br /&gt;
| Magic Number (0x40000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x008&lt;br /&gt;
| 32&lt;br /&gt;
| Hash of start of DPFS to end of 0x4000 block (usually/always? 0x300-0x3FFF)&lt;br /&gt;
|-&lt;br /&gt;
| 0x028&lt;br /&gt;
| 8&lt;br /&gt;
| Primary Partition Table Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x030&lt;br /&gt;
| 8&lt;br /&gt;
| Primary Partition Table Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x038&lt;br /&gt;
| 8&lt;br /&gt;
| Secondary Partition Table Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x040&lt;br /&gt;
| 8&lt;br /&gt;
| Secondary Partition Table Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x048&lt;br /&gt;
| 8&lt;br /&gt;
| Save Partition Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x050&lt;br /&gt;
| 8&lt;br /&gt;
| Save Partition Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x258&lt;br /&gt;
| &lt;br /&gt;
| End&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DPFS ====&lt;br /&gt;
&lt;br /&gt;
* This is located @ 0x200 in the image, following DISF.&lt;br /&gt;
* Block sizes are log2&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Magic (&amp;quot;DPFS&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Magic Number (0x10000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 8&lt;br /&gt;
| Offset 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 8&lt;br /&gt;
| Size 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Block Size 0, in log 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 8&lt;br /&gt;
| Offset 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 8&lt;br /&gt;
| Size 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 4&lt;br /&gt;
| Block Size 1, in log 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 8&lt;br /&gt;
| Offset 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 8&lt;br /&gt;
| Size 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 4&lt;br /&gt;
| Block Size 2, in log 2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== IVFC ====&lt;br /&gt;
&lt;br /&gt;
* Generally follows DPFS, similar to 3DS.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Magic (&amp;quot;IVFC&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Magic Number (0x20000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 8&lt;br /&gt;
| Master hash size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 8&lt;br /&gt;
| Level 1 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 8&lt;br /&gt;
| Level 1 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| Level 1 block size, in log2&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 8&lt;br /&gt;
| Level 2 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 8&lt;br /&gt;
| Level 2 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 4&lt;br /&gt;
| Level 2 block size, in log2.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 8&lt;br /&gt;
| Level 3 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 8&lt;br /&gt;
| Level 3 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| 4&lt;br /&gt;
| Level 3 block size, in log2.&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| 8&lt;br /&gt;
| Level 4 offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 8&lt;br /&gt;
| Level 4 size&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 4&lt;br /&gt;
| Level 4 block size, in log2.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C&lt;br /&gt;
| 4&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 48&lt;br /&gt;
| Unknown, reserved?&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0&lt;br /&gt;
| 32&lt;br /&gt;
| Hash&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== JNGL ====&lt;br /&gt;
&lt;br /&gt;
* Generally follows IVFC&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Magic (&amp;quot;JNGL&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Magic Number (0x10000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 8&lt;br /&gt;
| Savedata Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown, Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 8&lt;br /&gt;
| Savedata Blocksize?&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 464&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SAVE ====&lt;br /&gt;
&lt;br /&gt;
* Generally follows JNGL, structure is different from 3DS.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Magic (&amp;quot;SAVE&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Magic Number (0x60000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown, number&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown, block size&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown, block size&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RMAP ====&lt;br /&gt;
&lt;br /&gt;
* There are generally two RMAP blocks in sequence.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Magic (&amp;quot;RMAP&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Magic Number (0x10000)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Files ===&lt;br /&gt;
&lt;br /&gt;
==== File Offset Table ====&lt;br /&gt;
&lt;br /&gt;
* Indexes 0 and 1 are reserved to point towards the folder and file tables.&lt;br /&gt;
&lt;br /&gt;
===== File Offset Table Entry =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 3&lt;br /&gt;
| Data offset, in blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| 1&lt;br /&gt;
| Unknown, 80&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Unknown, 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== File/Folder Table Entry ====&lt;br /&gt;
&lt;br /&gt;
* The root file/folder index is generally 2&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Start&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Parent Folder Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 64&lt;br /&gt;
| Filename&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| 4&lt;br /&gt;
| File/Folder Index?&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| 4&lt;br /&gt;
| File offset index in offset table, 0 for folders&lt;br /&gt;
|-&lt;br /&gt;
| 0x4c&lt;br /&gt;
| 8&lt;br /&gt;
| File size, or number of files for folders&lt;br /&gt;
|-&lt;br /&gt;
| 0x54&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x5c&lt;br /&gt;
| 4&lt;br /&gt;
| Next File Index, same as folder index for folders&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=4589</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=4589"/>
		<updated>2018-05-07T19:23:10Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&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 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 || SetWakePinDebugMode&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [5.0.0+] [[#OpenSession2]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [5.0.0+] IsWakeEventActive2&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [5.0.0+] SetWakeEventActiveFlagSetForDebug2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || 0xCC || Z, 4 || Audio Codec (ALC5639) Power || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Audio services]], [[Fatal services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x24 || E, 4 || SDCard Power || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Filesystem services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x3C || H, 4 || BT_RST_PH4 || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Bluetooth Driver services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0xDA || BB, 2 || || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || 0xDB || BB, 3 || GcAsic Power || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Filesystem services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0xDC || BB, 4 || Headphone Detect || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Audio services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || 0x25 || E, 5 || || Out || Icosa, Copper, Hoag&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x90 || S, 0 || DebugPadDriver || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x91 || S, 1 || || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x96 || S, 6 || Charger IC (BQ24193) Charge Enable || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x97 || S, 7 || CPU fan sampling || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x26 || E, 6 || Joy-Con(L) IsAttached (insertion, Joy-Con pin 5/console TX, pulled low on insert?) || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x05 || A, 5 || Fan enable (normal) || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x78 || P, 0 || SDMMC3_CLK_PP0? || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x93 || S, 3 || GcAsic IRQ || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Filesystem services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || SDMMC3_DAT0_PP5? || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || SDMMC3_DAT1_PP4? || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || SDMMC3_DAT2_PP3? || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || SDMMC3_DAT3_PP2? || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || Temperature Sensor || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Audio services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || MOTION_INT_PX2? || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || TouchPanel IRQ (TOUCH_INT_PX1) (unused - polled instead) || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || Power Button (BUTTON_POWER_ON_PX5) || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up (BUTTON_VOL_UP_PX6) || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Boot2]], [[Audio services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down (BUTTON_VOL_DOWN_PX7) || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Boot2]], [[Audio services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Fuel Gauge IC (MAX17050) IRQ || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || BUTTON_HOME_PY1 || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight Enable (LCD_BL_EN_PV1) || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[NV services]], [[Backlight services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight Reset (LCD_RST_PV2) || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger IC (BQ24193) OTG charge select || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]], [[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || USB-PD controller (RHOM BM92T30MWV) related || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Charger IC (BQ24193) IRQ || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || TouchPanel reset || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || USB-PD controller (RHOM BM92T30MWV) IRQ || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || In || Icosa, Copper, Hoag&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || Joy-Con(R) NwcpDriver1.NwcpCharger || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || Joy-Con(L) NwcpDriver0.NwcpCharger || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || WIFI_EN_PH0? || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || WIFI_RST_PH1 || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Wlan services]], [[PCIe services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || AP_WAKE_BT_PH3 || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Bluetooth Driver services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || Out || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight +5V || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight -5V || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || Joy-Con(R) IsAttached (insertion, Joy-Con pin 5/console TX, pulled low on insert?) || In || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Fan enable (high power) || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || In || Icosa, Copper, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || Icosa, Copper, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[Filesystem services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger IC (BQ24193) OTG charge select || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]], [[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger IC (BQ24193) OTG charge select || Out || Icosa, Hoag, [5.0.0+] Mariko &amp;lt;br&amp;gt;([[PTM services]], [[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || Joy-Con(R) NwcpDriver1.GpioMonitorTask0 duplicate? || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || Joy-Con(L) NwcpDriver1.GpioMonitorTask0 duplicate? || In || Icosa, Hoag, [5.0.0+] Mariko&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || Joy-Con(R) CTS (checked low) || In || None &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || Joy-Con(L) CTS (checked low) || In || None &amp;lt;br&amp;gt;([[HID services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || Out || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || Lid Closed (unused) || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[USB services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [2.0.0+] Copper &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || Out || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || In || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x4D || 0xAC || V, 4 || || Out || [2.0.0+] Copper&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x4E || 0xE1 || CC, 1 || HdmiHotplug (HDMI_INT_DP_HPD_PCC1) || In || [2.0.0+] Copper &amp;lt;br&amp;gt;([[NV services]])&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x4F || 0x56 || K, 6 || || || None&lt;br /&gt;
|-&lt;br /&gt;
| - || 0x32 || G, 2 || Joy-Con(R) RTS || || None&lt;br /&gt;
|-&lt;br /&gt;
| - || 0x1B || D, 3 || Joy-Con(L) RTS || || None&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw [[#GpioPadDescriptor]] and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as [[#OpenSessionForDev]] except it takes a &#039;&#039;&#039;GpioPadName&#039;&#039;&#039; which is then converted to a [[#GpioPadDescriptor]]. Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== OpenSession2 ==&lt;br /&gt;
Same as [[#OpenSession]] but takes a &#039;&#039;&#039;DeviceCode&#039;&#039;&#039; instead of a &#039;&#039;&#039;GpioPadName&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&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 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [4.0.0+] SetValueForSleepState&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c, i2c:pcv =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&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 || [[#OpenSessionForDev_2|OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession_2|OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#HasDevice|HasDevice]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#HasDeviceForDev|HasDeviceForDev]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! I2cDevice || Port:Addr || Is10bit || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || TouchPanel || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || Temperature Sensor (TMP451 or NCT72) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || Temperature Sensor (TMP451 or NCT72) (duplicate) ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio Codec (ALC5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || PMIC RTC (max77620_rtc0), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (MAX77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || Sub-PMIC for CPU (max77621_cpu) || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || Sub-PMIC for GPU (max77621_gpu) || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || Charger IC (BQ24193) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Fuel Gauge IC (MAX17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (RHOM BM92T30MWV) || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VDD15V0-HB) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-CPU-DS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-GPU-DS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-DDR-DS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-AP) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-BL-DS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || Ambient Light Sensor (BH1730) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_CORE) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_Soc-1V8) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || Power Monitor (ina226_LPDDR4-1V8) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || Power Monitor (ina226_REG1V32) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || Power Monitor (ina226_VDD3V3-SYS) || Factory testing&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || HDMI DDC || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || HDMI SCDC || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;port&#039;&#039;&#039;, an u16 &#039;&#039;&#039;addr&#039;&#039;&#039;, an &#039;&#039;&#039;AddressingMode&#039;&#039;&#039; (1 for 10-bit, 0 otherwise) and a &#039;&#039;&#039;SpeedMode&#039;&#039;&#039; (400000 or 100000). Returns a [[#II2cSession]] session.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Takes an &#039;&#039;&#039;I2cDevice&#039;&#039;&#039; and returns a [[#II2cSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== HasDevice ==&lt;br /&gt;
Takes an &#039;&#039;&#039;I2cDevice&#039;&#039;&#039; and returns true if the device exists or false otherwise.&lt;br /&gt;
&lt;br /&gt;
== HasDeviceForDev ==&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;port&#039;&#039;&#039;, an u16 &#039;&#039;&#039;addr&#039;&#039;&#039;, an &#039;&#039;&#039;AddressingMode&#039;&#039;&#039; (1 for 10-bit, 0 otherwise) and a &#039;&#039;&#039;SpeedMode&#039;&#039;&#039; (400000 or 100000). Returns true if the device exists or false otherwise.&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&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 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ExecuteCommandList&lt;br /&gt;
|-&lt;br /&gt;
| 10 || SendAuto&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ReceiveAuto&lt;br /&gt;
|-&lt;br /&gt;
| 12 || ExecuteCommandListAuto&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&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 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&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 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSessionForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Port Mapping ===&lt;br /&gt;
OpenSession translates user IDs to to the uart port index.&lt;br /&gt;
&lt;br /&gt;
OpenSessionForTest takes the port index verbatim.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port || Usage&lt;br /&gt;
|-&lt;br /&gt;
| 1 || UART-D || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-B || Joy-Con(R)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-C || Joy-Con(L)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&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 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 1 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 0 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&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 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pinmux =&lt;br /&gt;
This is &amp;quot;nn::pinmux::IManager&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 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
This is &amp;quot;nn::pinmux::ISession&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 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= sasbus =&lt;br /&gt;
This is &amp;quot;nn::sasbus::IManager&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 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
This is &amp;quot;nn::sasbus::ISession&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 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=HID_Shared_Memory&amp;diff=4582</id>
		<title>HID Shared Memory</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=HID_Shared_Memory&amp;diff=4582"/>
		<updated>2018-05-06T02:07:37Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HID shared memory is a 0x40000 byte read-only segment of memory shared between applications for input. The segment contains structures for most if not all input methods available to applications.&lt;br /&gt;
&lt;br /&gt;
= Memory Map =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, Header?&lt;br /&gt;
|-&lt;br /&gt;
| 0x400&lt;br /&gt;
| 0x3000&lt;br /&gt;
| Capacitive Touchscreen&lt;br /&gt;
|-&lt;br /&gt;
| 0x3400&lt;br /&gt;
| 0x400&lt;br /&gt;
| Mouse&lt;br /&gt;
|-&lt;br /&gt;
| 0x3800&lt;br /&gt;
| 0x400&lt;br /&gt;
| Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C00&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4000&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4400&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4800&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C00&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E00&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x5000&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x5200&lt;br /&gt;
| 0x80*0x10&lt;br /&gt;
| Unknown, 16 structures with a header and 2 entries each&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A00&lt;br /&gt;
| 0x4000&lt;br /&gt;
| Controller Serials?&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A00&lt;br /&gt;
| 0x32000&lt;br /&gt;
| Controllers&lt;br /&gt;
|-&lt;br /&gt;
| 0x3BA00&lt;br /&gt;
| 0x4600&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Capacitive Touchscreen ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x28	&lt;br /&gt;
| Touch Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x298 * 17&lt;br /&gt;
| Touch Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Touch Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Touch Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x10	&lt;br /&gt;
| Touch Entry Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x28 * 16	&lt;br /&gt;
| Touch Data	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Touch Structure Header ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Touches	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Touch Data Entry ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Padding	&lt;br /&gt;
|-&lt;br /&gt;
| 0xC	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Index	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x14	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Diameter X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Diameter Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Angle	&lt;br /&gt;
|-&lt;br /&gt;
| 0x24	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Padding	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Mouse ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Mouse Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x30 * 17	&lt;br /&gt;
| Mouse Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mouse Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mouse Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples again?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x14	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse X Change	&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse Y Change	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Scroll Change Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x24	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Scroll Change X?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Mouse Buttons	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Keyboard ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Keyboard Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x30 * 17	&lt;br /&gt;
| Keyboard Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyboard Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyboard Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples again?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Modifier Mask	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Keys Down, each key gets one bit based on the HID keyboard scan code (F1 is 0x3A, bit 0x3A is set)	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Controller Serials? ==&lt;br /&gt;
&lt;br /&gt;
This section contains a series of 16 structures 0x400 bytes large.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x30	&lt;br /&gt;
| 0xE	&lt;br /&gt;
| Controller Serial	&lt;br /&gt;
|-&lt;br /&gt;
| 0x60	&lt;br /&gt;
| 0xE	&lt;br /&gt;
| Controller Serial	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
This section contains a series of 10 0x5000 byte structures describing each available controller.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Controller Index&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 to 7	&lt;br /&gt;
| Players 1 to 8	&lt;br /&gt;
|-&lt;br /&gt;
| 8	&lt;br /&gt;
| Handheld Mode	&lt;br /&gt;
|-&lt;br /&gt;
| 9	&lt;br /&gt;
| Unknown	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x28	&lt;br /&gt;
| Controller Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Pro Controller State&lt;br /&gt;
|-&lt;br /&gt;
| 0x378	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Handheld Joined State&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C8	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Joined State (Lone Joy-Con or Pair of Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA18	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Left State (Vertical Controls w/ Joy-Con Half)&lt;br /&gt;
|-&lt;br /&gt;
| 0xD68	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Right State (Vertical Controls w/ Joy-Con Half)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10B8	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Main State (No Analog Sticks)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1408&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Main State&lt;br /&gt;
|-&lt;br /&gt;
| 0x41D0	&lt;br /&gt;
| 0x10	&lt;br /&gt;
| Controller MAC	&lt;br /&gt;
|-&lt;br /&gt;
| 0x41F0	&lt;br /&gt;
| 0x10	&lt;br /&gt;
| Controller MAC	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller Header ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x4&lt;br /&gt;
| Status, bit0 Pro Controller/HID controller, bit1 wired for handheld, bit2 pair, bit3 left, bit4 right&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Is Joy-Con Half&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| bit1 color set does not exist&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (single Joy-Con or Pro Controller)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (single Joy-Con or Pro Controller)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| bit1 color set does not exist&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (right Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (right Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (left Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (left Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller State Header ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Number of entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller State ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples again&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Button State&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Left Joystick X&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Left Joystick Y&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| Right Joystick X&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Right Joystick Y&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x8&lt;br /&gt;
| Controller State (bit0 connected, bit1 wired)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Button State =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Bit&lt;br /&gt;
!   Button&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| A&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| B&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Y&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Left Stick Pressed&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Right Stick Pressed&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| L&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| R&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ZL&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ZR&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| Plus&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| Minus&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Left&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| Up&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Right&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| Down&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Left Stick Left&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| Left Stick Up&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| Left Stick Right&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| Left Stick Down&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| Right Stick Left&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| Right Stick Up&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| Right Stick Right&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| Right Stick Down&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| SL&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| SR&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=HID_Shared_Memory&amp;diff=4581</id>
		<title>HID Shared Memory</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=HID_Shared_Memory&amp;diff=4581"/>
		<updated>2018-05-06T02:00:54Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HID shared memory is a 0x40000 byte read-only segment of memory shared between applications for input. The segment contains structures for most if not all input methods available to applications.&lt;br /&gt;
&lt;br /&gt;
= Memory Map =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, Header?&lt;br /&gt;
|-&lt;br /&gt;
| 0x400&lt;br /&gt;
| 0x3000&lt;br /&gt;
| Capacitive Touchscreen&lt;br /&gt;
|-&lt;br /&gt;
| 0x3400&lt;br /&gt;
| 0x400&lt;br /&gt;
| Mouse&lt;br /&gt;
|-&lt;br /&gt;
| 0x3800&lt;br /&gt;
| 0x400&lt;br /&gt;
| Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C00&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4000&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4400&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4800&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C00&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E00&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x5000&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x5200&lt;br /&gt;
| 0x800&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A00&lt;br /&gt;
| 0x4000&lt;br /&gt;
| Controller Serials?&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A00&lt;br /&gt;
| 0x32000&lt;br /&gt;
| Controllers&lt;br /&gt;
|-&lt;br /&gt;
| 0x3BA00&lt;br /&gt;
| 0x4600&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Capacitive Touchscreen ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x28	&lt;br /&gt;
| Touch Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x298 * 17&lt;br /&gt;
| Touch Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Touch Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Touch Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x10	&lt;br /&gt;
| Touch Entry Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x28 * 16	&lt;br /&gt;
| Touch Data	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Touch Structure Header ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Touches	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Touch Data Entry ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Padding	&lt;br /&gt;
|-&lt;br /&gt;
| 0xC	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Index	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x14	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Diameter X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Diameter Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Angle	&lt;br /&gt;
|-&lt;br /&gt;
| 0x24	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Padding	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Mouse ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Mouse Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x30 * 17	&lt;br /&gt;
| Mouse Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mouse Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mouse Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples again?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x14	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse X Change	&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse Y Change	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Scroll Change Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x24	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Scroll Change X?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Mouse Buttons	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Keyboard ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Keyboard Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x30 * 17	&lt;br /&gt;
| Keyboard Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyboard Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyboard Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples again?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Modifier Mask	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Keys Down, each key gets one bit based on the HID keyboard scan code (F1 is 0x3A, bit 0x3A is set)	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Controller Serials? ==&lt;br /&gt;
&lt;br /&gt;
This section contains a series of 16 structures 0x400 bytes large.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x30	&lt;br /&gt;
| 0xE	&lt;br /&gt;
| Controller Serial	&lt;br /&gt;
|-&lt;br /&gt;
| 0x60	&lt;br /&gt;
| 0xE	&lt;br /&gt;
| Controller Serial	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
This section contains a series of 10 0x5000 byte structures describing each available controller.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Controller Index&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 to 7	&lt;br /&gt;
| Players 1 to 8	&lt;br /&gt;
|-&lt;br /&gt;
| 8	&lt;br /&gt;
| Handheld Mode	&lt;br /&gt;
|-&lt;br /&gt;
| 9	&lt;br /&gt;
| Unknown	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x28	&lt;br /&gt;
| Controller Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Pro Controller State&lt;br /&gt;
|-&lt;br /&gt;
| 0x378	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Handheld Joined State&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C8	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Joined State (Lone Joy-Con or Pair of Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA18	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Left State (Vertical Controls w/ Joy-Con Half)&lt;br /&gt;
|-&lt;br /&gt;
| 0xD68	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Right State (Vertical Controls w/ Joy-Con Half)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10B8	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Main State (No Analog Sticks)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1408&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Main State&lt;br /&gt;
|-&lt;br /&gt;
| 0x41D0	&lt;br /&gt;
| 0x10	&lt;br /&gt;
| Controller MAC	&lt;br /&gt;
|-&lt;br /&gt;
| 0x41F0	&lt;br /&gt;
| 0x10	&lt;br /&gt;
| Controller MAC	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller Header ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x4&lt;br /&gt;
| Status, bit0 Pro Controller/HID controller, bit1 wired for handheld, bit2 pair, bit3 left, bit4 right&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Is Joy-Con Half&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| bit1 color set does not exist&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (single Joy-Con or Pro Controller)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (single Joy-Con or Pro Controller)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| bit1 color set does not exist&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (right Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (right Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (left Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (left Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller State Header ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Number of entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller State ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples again&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Button State&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Left Joystick X&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Left Joystick Y&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| Right Joystick X&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Right Joystick Y&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x8&lt;br /&gt;
| Controller State (bit0 connected, bit1 wired)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Button State =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Bit&lt;br /&gt;
!   Button&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| A&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| B&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Y&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Left Stick Pressed&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Right Stick Pressed&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| L&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| R&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ZL&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ZR&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| Plus&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| Minus&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Left&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| Up&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Right&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| Down&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Left Stick Left&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| Left Stick Up&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| Left Stick Right&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| Left Stick Down&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| Right Stick Left&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| Right Stick Up&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| Right Stick Right&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| Right Stick Down&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| SL&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| SR&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=4534</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=4534"/>
		<updated>2018-04-28T21:11:53Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&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 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 || SetWakePinDebugMode&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [5.0.0+] [[#OpenSession2]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [5.0.0+] IsWakeEventActive2&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [5.0.0+] SetWakeEventActiveFlagSetForDebug2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || 0xCC || Z, 4 || rt5639 power || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x3C || H, 4 || BT_RST_PH4 || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0xDC || BB, 4 || Headphone Detect || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x96 || S, 6 || bq24192 Charge Enable || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion, Joy-Con pin 5/console TX, pulled low on insert?) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x05 || A, 5 || Fan enable (normal) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x78 || P, 0 || SDMMC3_CLK_PP0? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || SDMMC3_DAT0_PP5? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || SDMMC3_DAT1_PP4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || SDMMC3_DAT2_PP3? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || SDMMC3_DAT3_PP2? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || MOTION_INT_PX2? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || Touchscreen irq (TOUCH_INT_PX1) (unused - polled instead) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || Power Button (BUTTON_POWER_ON_PX5) || In ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up (BUTTON_VOL_UP_PX6) || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down (BUTTON_VOL_DOWN_PX7) || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || max17050 irq || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || BUTTON_HOME_PY1 || In || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight (LCD_BL_EN_PV1) || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight (LCD_RST_PV2) || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || bq24192 irq || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen reset || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || bm92t36 irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || WIFI_EN_PH0? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || WIFI_RST_PH1 || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || AP_WAKE_BT_PH3 || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight +5V || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight -5V || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion, Joy-Con pin 5/console TX, pulled low on insert?) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Fan enable (high power) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 duplicate? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || joycon(L) NwcpDriver1.GpioMonitorTask0 duplicate? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 (CTS, checked low) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 (CTS, checked low) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || Lid Closed (unused) || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug (HDMI_INT_DP_HPD_PCC1) || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== OpenSession2 ==&lt;br /&gt;
Same as [[#OpenSession]] but takes a &#039;&#039;&#039;DeviceCode&#039;&#039;&#039; instead of a &#039;&#039;&#039;GpioPadName&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&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 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [4.0.0+] SetValueForSleepState&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c, i2c:pcv =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&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 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || duplicate, unused entry? ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio codec (rt5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq24192) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (rohm bm92t36) || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || rohm ambient light sensor (bh1730fvc) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This table is believed to be complete - entries with empty &amp;quot;Used by&amp;quot; column haven&#039;t been seen being used (devices not present on switch?).&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&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 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ExecuteCommandList&lt;br /&gt;
|-&lt;br /&gt;
| 10 || SendAuto&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ReceiveAuto&lt;br /&gt;
|-&lt;br /&gt;
| 12 || ExecuteCommandListAuto&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&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 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&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 || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSession || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSessionForTest || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Port Mapping ===&lt;br /&gt;
OpenSession translates user IDs to to the uart port index.&lt;br /&gt;
&lt;br /&gt;
OpenSessionForTest takes the port index verbatim.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port || Usage&lt;br /&gt;
|-&lt;br /&gt;
| 1 || UART-D || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-B || Joycon(R)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-C || Joycon(L)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&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 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 1 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 0 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&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 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pinmux =&lt;br /&gt;
This is &amp;quot;nn::pinmux::IManager&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 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
This is &amp;quot;nn::pinmux::ISession&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 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= sasbus =&lt;br /&gt;
This is &amp;quot;nn::sasbus::IManager&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 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
This is &amp;quot;nn::sasbus::ISession&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 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=4533</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=4533"/>
		<updated>2018-04-28T21:05:27Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: They sure are getting a lot of mileage out of these pins&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&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 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 || SetWakePinDebugMode&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [5.0.0+] [[#OpenSession2]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [5.0.0+] IsWakeEventActive2&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [5.0.0+] SetWakeEventActiveFlagSetForDebug2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || 0xCC || Z, 4 || rt5639 power || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x3C || H, 4 || BT_RST_PH4 || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0xDC || BB, 4 || Headphone Detect || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x96 || S, 6 || bq24192 Charge Enable || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion, Joy-Con pin 5/console TX, pulled low on insert?) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x05 || A, 5 || Fan enable (normal) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x78 || P, 0 || SDMMC3_CLK_PP0? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || SDMMC3_DAT0_PP5? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || SDMMC3_DAT1_PP4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || SDMMC3_DAT2_PP3? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || SDMMC3_DAT3_PP2? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || MOTION_INT_PX2? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || Touchscreen irq (TOUCH_INT_PX1) (unused - polled instead) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || Power Button (BUTTON_POWER_ON_PX5) || In ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up (BUTTON_VOL_UP_PX6) || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down (BUTTON_VOL_DOWN_PX7) || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || max17050 irq || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || BUTTON_HOME_PY1 || In || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight (LCD_BL_EN_PV1) || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight (LCD_RST_PV2) || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || bq24192 irq || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen reset || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || bm92t36 irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || WIFI_EN_PH0? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || WIFI_RST_PH1 || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || AP_WAKE_BT_PH3 || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight +5V || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight -5V || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion, Joy-Con pin 5/console TX, pulled low on insert?) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Fan enable (high power) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 (CTS, checked low) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 (CTS, checked low) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || Lid Closed (unused) || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug (HDMI_INT_DP_HPD_PCC1) || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== OpenSession2 ==&lt;br /&gt;
Same as [[#OpenSession]] but takes a &#039;&#039;&#039;DeviceCode&#039;&#039;&#039; instead of a &#039;&#039;&#039;GpioPadName&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&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 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [4.0.0+] SetValueForSleepState&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c, i2c:pcv =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&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 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || duplicate, unused entry? ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio codec (rt5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq24192) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (rohm bm92t36) || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || rohm ambient light sensor (bh1730fvc) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This table is believed to be complete - entries with empty &amp;quot;Used by&amp;quot; column haven&#039;t been seen being used (devices not present on switch?).&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&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 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ExecuteCommandList&lt;br /&gt;
|-&lt;br /&gt;
| 10 || SendAuto&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ReceiveAuto&lt;br /&gt;
|-&lt;br /&gt;
| 12 || ExecuteCommandListAuto&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&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 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&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 || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSession || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSessionForTest || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Port Mapping ===&lt;br /&gt;
OpenSession translates user IDs to to the uart port index.&lt;br /&gt;
&lt;br /&gt;
OpenSessionForTest takes the port index verbatim.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port || Usage&lt;br /&gt;
|-&lt;br /&gt;
| 1 || UART-D || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-B || Joycon(R)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-C || Joycon(L)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&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 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 1 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 0 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&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 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pinmux =&lt;br /&gt;
This is &amp;quot;nn::pinmux::IManager&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 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
This is &amp;quot;nn::pinmux::ISession&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 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= sasbus =&lt;br /&gt;
This is &amp;quot;nn::sasbus::IManager&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 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
This is &amp;quot;nn::sasbus::ISession&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 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=4526</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=4526"/>
		<updated>2018-04-26T15:38:08Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&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 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 || SetWakePinDebugMode&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [5.0.0+] [[#OpenSession2]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [5.0.0+] IsWakeEventActive2&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [5.0.0+] SetWakeEventActiveFlagSetForDebug2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || 0xCC || Z, 4 || rt5639 power || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x3C || H, 4 || BT_RST_PH4 || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0xDC || BB, 4 || Headphone Detect || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x96 || S, 6 || bq24192 Charge Enable || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x05 || A, 5 || Fan enable (normal) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x78 || P, 0 || SDMMC3_CLK_PP0? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || SDMMC3_DAT0_PP5? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || SDMMC3_DAT1_PP4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || SDMMC3_DAT2_PP3? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || SDMMC3_DAT3_PP2? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || MOTION_INT_PX2? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || Touchscreen irq (TOUCH_INT_PX1) (unused - polled instead) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || Power Button (BUTTON_POWER_ON_PX5) || In ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up (BUTTON_VOL_UP_PX6) || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down (BUTTON_VOL_DOWN_PX7) || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || max17050 irq || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || BUTTON_HOME_PY1 || In || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight (LCD_BL_EN_PV1) || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight (LCD_RST_PV2) || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || bq24192 irq || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen reset || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || bm92t36 irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || WIFI_EN_PH0? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || WIFI_RST_PH1 || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || AP_WAKE_BT_PH3 || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight +5V || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight -5V || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Fan enable (high power) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 (CTS, checked low) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 (CTS, checked low) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || Lid Closed (unused) || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug (HDMI_INT_DP_HPD_PCC1) || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== OpenSession2 ==&lt;br /&gt;
Same as [[#OpenSession]] but takes a &#039;&#039;&#039;DeviceCode&#039;&#039;&#039; instead of a &#039;&#039;&#039;GpioPadName&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&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 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [4.0.0+] SetValueForSleepState&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c, i2c:pcv =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&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 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || duplicate, unused entry? ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio codec (rt5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq24192) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (rohm bm92t36) || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || rohm ambient light sensor (bh1730fvc) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This table is believed to be complete - entries with empty &amp;quot;Used by&amp;quot; column haven&#039;t been seen being used (devices not present on switch?).&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&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 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ExecuteCommandList&lt;br /&gt;
|-&lt;br /&gt;
| 10 || SendAuto&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ReceiveAuto&lt;br /&gt;
|-&lt;br /&gt;
| 12 || ExecuteCommandListAuto&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&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 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&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 || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSession || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSessionForTest || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Port Mapping ===&lt;br /&gt;
OpenSession translates user IDs to to the uart port index.&lt;br /&gt;
&lt;br /&gt;
OpenSessionForTest takes the port index verbatim.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port || Usage&lt;br /&gt;
|-&lt;br /&gt;
| 1 || UART-D || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-B || Joycon(R)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-C || Joycon(L)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&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 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 1 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 0 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&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 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pinmux =&lt;br /&gt;
This is &amp;quot;nn::pinmux::IManager&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 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
This is &amp;quot;nn::pinmux::ISession&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 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= sasbus =&lt;br /&gt;
This is &amp;quot;nn::sasbus::IManager&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 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
This is &amp;quot;nn::sasbus::ISession&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 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=PCV_services&amp;diff=4525</id>
		<title>PCV services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=PCV_services&amp;diff=4525"/>
		<updated>2018-04-26T14:44:12Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: /* Voltage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= bpc =&lt;br /&gt;
This is &amp;quot;nn::bpc::IBoardPowerControlManager&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 || ShutdownSystem&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RebootSystem&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetWakeupReason&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetShutdownReason&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetAcOk&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetBoardPowerControlEvent&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSleepButtonState&lt;br /&gt;
|-&lt;br /&gt;
| 7 || GetPowerEvent&lt;br /&gt;
|-&lt;br /&gt;
| 8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= bpc:r =&lt;br /&gt;
This is &amp;quot;nn::bpc::IRtcManager&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 || GetExternalRtcValue&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetExternalRtcValue&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ReadExternalRtcResetFlag&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ClearExternalRtcResetFlag&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
GetExternalRtcValue / SetExternalRtcValue directly accesses the max77620_rtc0 device.&lt;br /&gt;
&lt;br /&gt;
= pcv =&lt;br /&gt;
This is &amp;quot;nn::pcv::detail::IPcvService&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 || SetPowerEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetClockEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetClockRate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetClockRate&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetState&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetPossibleClockRates&lt;br /&gt;
|-&lt;br /&gt;
| 6 || SetMinVClockRate&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetReset&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetVoltageEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetVoltageEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 10 || GetVoltageRange&lt;br /&gt;
|-&lt;br /&gt;
| 11 || SetVoltageValue&lt;br /&gt;
|-&lt;br /&gt;
| 12 || GetVoltageValue&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetTemperatureThresholds&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetTemperature&lt;br /&gt;
|-&lt;br /&gt;
| 15 || Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 16 || IsInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Finalize&lt;br /&gt;
|-&lt;br /&gt;
| 18 || PowerOn&lt;br /&gt;
|-&lt;br /&gt;
| 19 || PowerOff&lt;br /&gt;
|-&lt;br /&gt;
| 20 || ChangeVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 21 || GetPowerClockInfoEvent&lt;br /&gt;
|-&lt;br /&gt;
| 22 || GetOscillatorClock&lt;br /&gt;
|-&lt;br /&gt;
| 23 || GetDvfsTable&lt;br /&gt;
|-&lt;br /&gt;
| 24 || GetModuleStateTable&lt;br /&gt;
|-&lt;br /&gt;
| 25 || GetPowerDomainStateTable&lt;br /&gt;
|-&lt;br /&gt;
| 26 || GetFuseInfo&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== User Name to Block Maps ==&lt;br /&gt;
&lt;br /&gt;
=== Power Switch / Clocking / Reset ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Block || Rail || Notes&lt;br /&gt;
|-&lt;br /&gt;
|  0 || CpuBus || vdd_cpu ||&lt;br /&gt;
|-&lt;br /&gt;
|  1 || GPU || vdd_gpu ||&lt;br /&gt;
|-&lt;br /&gt;
|  2 || I2S1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  3 || I2S2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || I2S3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || PWM || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  6 || I2C1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  7 || I2C2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  8 || I2C3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  9 || I2C4 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || I2C5 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 || I2C6 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SPI1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || SPI2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SPI3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || SPI4 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || DISP1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || DISP2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || SDMMC1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || SDMMC2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || SDMMC3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || SDMMC4 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || - || - || Not actual block. Used for debug and stuff.&lt;br /&gt;
|-&lt;br /&gt;
| 25 || CSITE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 26 || TSEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 27 || MSELECT || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 28 || HDA2CODEC_2X || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 29 || ACTMON || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 30 || I2C_SLOW || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 31 || SOR1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 33 || HDA || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 34 || XUSB_CORE_HOST || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 35 || XUSB_FALCON || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 36 || XUSB_FS || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 37 || XUSB_CORE_DEV || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 38 || XUSB_SS_HOSTDEV || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 39 || UARTA || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 40 || UARTB || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 41 || UARTC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 42 || UARTD || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 43 || HOST1X || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 44 || ENTROPY || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 45 || SOC_THERM || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 46 || VIC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 47 || NVENC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 48 || NVJPG || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 49 || NVDEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 50 || QSPI || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 52 || TSECB || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 53 || APE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 54 || ACLK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 55 || UARTAPE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 56 || EMC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 57 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 58 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 59 || DSI || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 60 || MAUD || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 61 || DPAUX1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 62 || MIPI_CAL || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 63 || UART_FST_MIPI_CAL || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 64 || OSC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 65 || SCLK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 66 || SOR_SAFE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 67 || XUSB_SS || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 68 || XUSB_HOST || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 69 || XUSB_DEV || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 70 || EXTPERIPH1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 71 || AHUB || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 72 || HDA2HDMICODEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 73 || PLLP5 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 74 || USBD || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 75 || USB2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 76 || PCIE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 77 || AFI || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 78 || PCIEXCLK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 79 || PEX_USB_UPHY || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 80 || XUSB_PADCTL || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 81 || APBDMA || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 82 || USB2_TRK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 83 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 84 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 85 || CEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Voltage ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Block || Notes&lt;br /&gt;
|-&lt;br /&gt;
|  0 || max77620_sd0 || &lt;br /&gt;
|-&lt;br /&gt;
|  1 || max77620_sd1 || &lt;br /&gt;
|-&lt;br /&gt;
|  2 || max77620_sd2 || &lt;br /&gt;
|-&lt;br /&gt;
|  3 || max77620_sd3 || &lt;br /&gt;
|-&lt;br /&gt;
|  4 || max77620_ldo0 || 1.2v&lt;br /&gt;
|-&lt;br /&gt;
|  5 || max77620_ldo1 || &lt;br /&gt;
|-&lt;br /&gt;
|  6 || max77620_ldo2 || SDcard power, 3.3v - 1.8v&lt;br /&gt;
|-&lt;br /&gt;
|  7 || max77620_ldo3 || &lt;br /&gt;
|-&lt;br /&gt;
|  8 || max77620_ldo4 || RTC power, 0.85v&lt;br /&gt;
|-&lt;br /&gt;
|  9 || max77620_ldo5 || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || max77620_ldo6 || AVDD touchscreen, 2.9v&lt;br /&gt;
|-&lt;br /&gt;
| 11 || max77620_ldo7 || &lt;br /&gt;
|-&lt;br /&gt;
| 12 || max77620_ldo8 || DisplayPort, 1.05v&lt;br /&gt;
|-&lt;br /&gt;
| 13 || max77621_cpu || &lt;br /&gt;
|-&lt;br /&gt;
| 14 || max77621_gpu || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: max77620 GPIOs are only used internally by the driver during init, and not exposed via an API.&lt;br /&gt;
&lt;br /&gt;
= pcv:arb =&lt;br /&gt;
This is &amp;quot;nn::pcv::IArbitrationManager&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 || ReleaseControl&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pcv:imm =&lt;br /&gt;
This is &amp;quot;nn::pcv::IImmediateManager&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 || SetClockRate&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= time:u, time:a, time:s =&lt;br /&gt;
This is &amp;quot;nn::timesrv::detail::service::IStaticService&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 || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetStandardUserSystemClock || Returns an [[#ISystemClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetStandardNetworkSystemClock || Returns an [[#ISystemClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetStandardSteadyClock || Returns an [[#ISteadyClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetTimeZoneService || Returns an [[#ITimeZoneService]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetStandardLocalSystemClock || Returns an [[#ISystemClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [4.0.0+] GetEphemeralNetworkSystemClock || Returns an [[#ISystemClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 50 || [4.0.0+] SetStandardSteadyClockInternalOffset || &lt;br /&gt;
|-&lt;br /&gt;
| 100 || IsStandardUserSystemClockAutomaticCorrectionEnabled || &lt;br /&gt;
|-&lt;br /&gt;
| 101 || SetStandardUserSystemClockAutomaticCorrectionEnabled || &lt;br /&gt;
|-&lt;br /&gt;
| 102 || [5.0.0+] GetStandardUserSystemClockInitialYear || &lt;br /&gt;
|-&lt;br /&gt;
| 200 || IsStandardNetworkSystemClockAccuracySufficient || &lt;br /&gt;
|-&lt;br /&gt;
| 300 || [4.0.0+] CalculateMonotonicSystemClockBaseTimePoint || &lt;br /&gt;
|-&lt;br /&gt;
| 400 || [4.0.0+] GetClockSnapshot || &lt;br /&gt;
|-&lt;br /&gt;
| 401 || [4.0.0+] GetClockSnapshotFromSystemClockContext || &lt;br /&gt;
|-&lt;br /&gt;
| 500 || [4.0.0+] CalculateStandardUserSystemClockDifferenceByUser || &lt;br /&gt;
|-&lt;br /&gt;
| 501 || [4.0.0+] CalculateSpanBetween || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISteadyClock ==&lt;br /&gt;
This is &amp;quot;nn::timesrv::detail::service::ISteadyClock&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 || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetCurrentTimePoint || No input, returns an output [[#SteadyClockTimePoint]].&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetTestOffset || No input, returns an output [[#TimeSpanType]].&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetTestOffset || Takes an input [[#TimeSpanType]], no output.&lt;br /&gt;
|-&lt;br /&gt;
| 100 || GetRtcValue || No input, returns an output s64.&lt;br /&gt;
|-&lt;br /&gt;
| 101 || IsRtcResetDetected || No input, returns an output u8 bool.&lt;br /&gt;
|-&lt;br /&gt;
| 102 || GetSetupResultValue || No input, returns an output u32.&lt;br /&gt;
|-&lt;br /&gt;
| 200 || GetInternalOffset || No input, returns an output [[#TimeSpanType]].&lt;br /&gt;
|-&lt;br /&gt;
| 201 || SetInternalOffset || Takes an input [[#TimeSpanType]], no output. Removed in [4.0.0+].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SteadyClockTimePoint ===&lt;br /&gt;
This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
=== TimeSpanType ===&lt;br /&gt;
This is an u64.&lt;br /&gt;
&lt;br /&gt;
== ISystemClock ==&lt;br /&gt;
This is &amp;quot;nn::timesrv::detail::service::ISystemClock&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 || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetCurrentTime || Returns an output [[#PosixTime]].&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetCurrentTime || Takes an input [[#PosixTime]].&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetSystemClockContext || Returns an output [[#SystemClockContext]].&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetSystemClockContext  || Takes an input [[#SystemClockContext]].&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PosixTime ===&lt;br /&gt;
This is an u64 for UTC POSIX time.&lt;br /&gt;
&lt;br /&gt;
=== SystemClockContext ===&lt;br /&gt;
This is an 0x20-byte struct.&lt;br /&gt;
&lt;br /&gt;
== ITimeZoneService ==&lt;br /&gt;
This is &amp;quot;nn::timesrv::detail::service::ITimeZoneService&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 || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetDeviceLocationName || No input, returns an output [[#LocationName]].&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetDeviceLocationName || Takes an input [[#LocationName]], no output.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetTotalLocationNameCount || No input, returns an output s32.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LoadLocationNameList || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || LoadTimeZoneRule || Takes an input [[#LocationName]] and a type-0x16 output buffer for [[#TimeZoneRule]], no output.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetTimeZoneRuleVersion ||  No input, returns an output [[#TimeZoneRuleVersion]].&lt;br /&gt;
|-&lt;br /&gt;
| 100 || ToCalendarTime || Takes an input [[#PosixTime]] and a type-0x15 input buffer for [[#TimeZoneRule]], returns an output [[#CalendarTime]] and [[#CalendarAdditionalInfo]].&lt;br /&gt;
|-&lt;br /&gt;
| 101 || ToCalendarTimeWithMyRule || Takes an input [[#PosixTime]], returns an output [[#CalendarTime]] and [[#CalendarAdditionalInfo]].&lt;br /&gt;
|-&lt;br /&gt;
| 200 || ToPosixTime || Takes an input [[#CalendarTime]], a type-0x15 input buffer for [[#TimeZoneRule]], an type-0xA output buffer for [[#PosixTime]] array, and returns an output s32.&lt;br /&gt;
|-&lt;br /&gt;
| 201 || ToPosixTimeWithMyRule || Takes an input [[#CalendarTime]], an type-0xA output buffer for [[#PosixTime]] array, and returns an output s32.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== LoadLocationNameList ===&lt;br /&gt;
Takes an input s32 LocationName_index and a type-0x6 output buffer for [[#LocationName]], returns an output s32 for total output entries.&lt;br /&gt;
&lt;br /&gt;
=== LocationName ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x10 || Location name string, no NUL-terminator.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || ? || &lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x8? || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || ? || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is an 0x24-byte struct.&lt;br /&gt;
&lt;br /&gt;
=== TimeZoneRule ===&lt;br /&gt;
This is an 0x4000-byte struct. Official sw uses fixed-size 0x4000 for the buffer size with the above commands.&lt;br /&gt;
&lt;br /&gt;
=== TimeZoneRuleVersion ===&lt;br /&gt;
This is an u128.&lt;br /&gt;
&lt;br /&gt;
=== CalendarTime ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Year&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x1 || Month&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Day&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x1 || Hour&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || 0x1 || Minute&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Second&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Padding / unknown?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is an 0x8-byte struct.&lt;br /&gt;
&lt;br /&gt;
=== CalendarAdditionalInfo ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || 0-based day-of-week.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || 0-based day-of-year.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || ? || Timezone name string.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || 0 = no DST, 1 = DST.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x4 || s32 seconds relative to UTC for this timezone.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is an 0x18-byte struct. This stores timezone info.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=4426</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=4426"/>
		<updated>2018-04-08T05:03:48Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&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 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || 0xCC || Z, 4 || rt5639 power || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x3C || H, 4 || BT_RST_PH4 || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0xDC || BB, 4 || Headphone Detect || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x96 || S, 6 || bq24192 Charge Enable || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x05 || A, 5 || Fan enable (normal) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x78 || P, 0 || SDMMC3_CLK_PP0? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || SDMMC3_DAT0_PP5? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || SDMMC3_DAT1_PP4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || SDMMC3_DAT2_PP3? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || SDMMC3_DAT3_PP2? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || MOTION_INT_PX2? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || Touchscreen irq (TOUCH_INT_PX1) (unused - polled instead) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || Power Button (BUTTON_POWER_ON_PX5) || In ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up (BUTTON_VOL_UP_PX6) || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down (BUTTON_VOL_DOWN_PX7) || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || max17050 irq || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || BUTTON_HOME_PY1 || In || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight (LCD_BL_EN_PV1) || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight (LCD_RST_PV2) || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || bq24192 irq || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen reset || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || bm92t36 irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || WIFI_EN_PH0? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || WIFI_RST_PH1 || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || AP_WAKE_BT_PH3 || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight +5V || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight -5V || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Fan enable (high power) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || Lid Closed (unused) || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug (HDMI_INT_DP_HPD_PCC1) || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&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 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c, i2c:pcv =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&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 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || duplicate, unused entry? ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio codec (rt5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq24192) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (rohm bm92t36) || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || rohm ambient light sensor (bh1730fvc) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This table is believed to be complete - entries with empty &amp;quot;Used by&amp;quot; column haven&#039;t been seen being used (devices not present on switch?).&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&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 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ExecuteCommandList&lt;br /&gt;
|-&lt;br /&gt;
| 10 || SendAuto&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ReceiveAuto&lt;br /&gt;
|-&lt;br /&gt;
| 12 || ExecuteCommandListAuto&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&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 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&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 || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSession || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSessionForTest || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Port Mapping ===&lt;br /&gt;
OpenSession translates user IDs to to the uart port index.&lt;br /&gt;
&lt;br /&gt;
OpenSessionForTest takes the port index verbatim.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port || Usage&lt;br /&gt;
|-&lt;br /&gt;
| 1 || UART-D || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-B || Joycon(R)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-C || Joycon(L)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&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 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 1 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 0 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&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 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=4419</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=4419"/>
		<updated>2018-04-05T04:53:06Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: neat.gif&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&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 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x3C || H, 4 || BT_RST_PH4 || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0xDC || BB, 4 || GPIO_X3_AUD_PBB4? || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x96 || S, 6 || bq24192 Charge Enable || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x05 || A, 5 || Fan enable (normal) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x78 || P, 0 || SDMMC3_CLK_PP0? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || SDMMC3_DAT0_PP5? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || SDMMC3_DAT1_PP4? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || SDMMC3_DAT2_PP3? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || SDMMC3_DAT3_PP2? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || MOTION_INT_PX2? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || Touchscreen irq (TOUCH_INT_PX1) (unused - polled instead) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || Power Button (BUTTON_POWER_ON_PX5) || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up (BUTTON_VOL_UP_PX6) || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down (BUTTON_VOL_DOWN_PX7) || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || max17050 irq (BUTTON_SLIDE_SW_PY0...?) || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || BUTTON_HOME_PY1? || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight (LCD_BL_EN_PV1?) || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight (LCD_RST_PV2?) || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || bq24192 irq || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || bm92t36 irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || WIFI_EN_PH0? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || WIFI_RST_PH1? || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || AP_WAKE_BT_PH3 || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Fan enable (high power) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug (HDMI_INT_DP_HPD_PCC1?) || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&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 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c, i2c:pcv =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&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 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || duplicate, unused entry? ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio codec (rt5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq24192) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (rohm bm92t36) || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || rohm ambient light sensor (bh1730fvc) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This table is believed to be complete - entries with empty &amp;quot;Used by&amp;quot; column haven&#039;t been seen being used (devices not present on switch?).&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&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 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ExecuteCommandList&lt;br /&gt;
|-&lt;br /&gt;
| 10 || SendAuto&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ReceiveAuto&lt;br /&gt;
|-&lt;br /&gt;
| 12 || ExecuteCommandListAuto&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&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 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&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 || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSession || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSessionForTest || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Port Mapping ===&lt;br /&gt;
OpenSession translates user IDs to to the uart port index.&lt;br /&gt;
&lt;br /&gt;
OpenSessionForTest takes the port index verbatim.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port || Usage&lt;br /&gt;
|-&lt;br /&gt;
| 1 || UART-D || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-B || Joycon(R)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-C || Joycon(L)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&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 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 1 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 0 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&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 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Error_codes&amp;diff=4416</id>
		<title>Error codes</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Error_codes&amp;diff=4416"/>
		<updated>2018-04-03T21:37:16Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Structure =&lt;br /&gt;
These have been redesigned from the 3DS so that they fit within a Aarch64 MOV instruction immediate most of the time (without requiring the additional MOVK).&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Field&lt;br /&gt;
|-&lt;br /&gt;
| 8-0  || Module&lt;br /&gt;
|-&lt;br /&gt;
| 21-9  || Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When a fatal-error is received the error code is outputted using the following formatter:&lt;br /&gt;
  %04d-%04d&lt;br /&gt;
&lt;br /&gt;
.. where the first code is &amp;lt;code&amp;gt;2000 + Module&amp;lt;/code&amp;gt;, and the other being &amp;lt;code&amp;gt;Description&amp;lt;/code&amp;gt;. Bits &amp;gt;=22 from the error-code are unused when displaying fatal-errors, since the Description ends with bit21.&lt;br /&gt;
&lt;br /&gt;
= Modules =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Kernel&lt;br /&gt;
|-&lt;br /&gt;
| 2 || FS&lt;br /&gt;
|-&lt;br /&gt;
| 3 || NVIDIA, TransferMemory&lt;br /&gt;
|-&lt;br /&gt;
| 5 || NCM&lt;br /&gt;
|-&lt;br /&gt;
| 6 || DD&lt;br /&gt;
|-&lt;br /&gt;
| 8 || LR&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Loader&lt;br /&gt;
|-&lt;br /&gt;
| 10 || CMIF (IPC command interface)&lt;br /&gt;
|-&lt;br /&gt;
| 11 || HIPC (IPC)&lt;br /&gt;
|-&lt;br /&gt;
| 15 || PM&lt;br /&gt;
|-&lt;br /&gt;
| 16 || NS&lt;br /&gt;
|-&lt;br /&gt;
| 18 || HTC&lt;br /&gt;
|-&lt;br /&gt;
| 21 || SM&lt;br /&gt;
|-&lt;br /&gt;
| 22 || RO userland&lt;br /&gt;
|-&lt;br /&gt;
| 24 || SDMMC&lt;br /&gt;
|-&lt;br /&gt;
| 26 || SPL&lt;br /&gt;
|-&lt;br /&gt;
| 100 || ETHC&lt;br /&gt;
|-&lt;br /&gt;
| 101 || I2C&lt;br /&gt;
|-&lt;br /&gt;
| 105 || Settings&lt;br /&gt;
|-&lt;br /&gt;
| 110 || NIFM&lt;br /&gt;
|-&lt;br /&gt;
| 111 || HwOpus&lt;br /&gt;
|-&lt;br /&gt;
| 114 || Display&lt;br /&gt;
|-&lt;br /&gt;
| 116 || NTC&lt;br /&gt;
|-&lt;br /&gt;
| 117 || FGM&lt;br /&gt;
|-&lt;br /&gt;
| 120 || PCIE&lt;br /&gt;
|-&lt;br /&gt;
| 121 || Friends&lt;br /&gt;
|-&lt;br /&gt;
| 123 || SSL&lt;br /&gt;
|-&lt;br /&gt;
| 124 || Account&lt;br /&gt;
|-&lt;br /&gt;
| 126 || Mii&lt;br /&gt;
|-&lt;br /&gt;
| 128 || AM&lt;br /&gt;
|-&lt;br /&gt;
| 129 || Play Report&lt;br /&gt;
|-&lt;br /&gt;
| 133 || PCV&lt;br /&gt;
|-&lt;br /&gt;
| 134 || OMM&lt;br /&gt;
|-&lt;br /&gt;
| 137 || NIM&lt;br /&gt;
|-&lt;br /&gt;
| 138 || PSC&lt;br /&gt;
|-&lt;br /&gt;
| 140 || USB&lt;br /&gt;
|-&lt;br /&gt;
| 141 || NSD&lt;br /&gt;
|-&lt;br /&gt;
| 143 || BTM&lt;br /&gt;
|-&lt;br /&gt;
| 144 || &lt;br /&gt;
|-&lt;br /&gt;
| 147 || ERPT&lt;br /&gt;
|-&lt;br /&gt;
| 148 || APM&lt;br /&gt;
|-&lt;br /&gt;
| 153 || Audio&lt;br /&gt;
|-&lt;br /&gt;
| 154 || NPNS&lt;br /&gt;
|-&lt;br /&gt;
| 157 || ARP&lt;br /&gt;
|-&lt;br /&gt;
| 158 || BOOT&lt;br /&gt;
|-&lt;br /&gt;
| 161 || NFC&lt;br /&gt;
|-&lt;br /&gt;
| 162 || Userland assert&lt;br /&gt;
|-&lt;br /&gt;
| 168 || Userland crash&lt;br /&gt;
|-&lt;br /&gt;
| 203 || HID&lt;br /&gt;
|-&lt;br /&gt;
| 206 || Capture&lt;br /&gt;
|-&lt;br /&gt;
| 345 || libnx&lt;br /&gt;
|-&lt;br /&gt;
| 346 || [[Homebrew ABI]]&lt;br /&gt;
|-&lt;br /&gt;
| 347 || Homebrew Loader&lt;br /&gt;
|-&lt;br /&gt;
| 348 || libnx Nvidia errors&lt;br /&gt;
|-&lt;br /&gt;
| 651 || TC&lt;br /&gt;
|-&lt;br /&gt;
| 800 || [[Internet_Browser|General web-applet]]&lt;br /&gt;
|-&lt;br /&gt;
| 809 || [[Internet_Browser|WifiWebAuthApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 810 || [[Internet_Browser|Whitelisted-applet]]&lt;br /&gt;
|-&lt;br /&gt;
| 811 || [[Internet_Browser|ShopN]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
8XX is for/includes system applets.&lt;br /&gt;
&lt;br /&gt;
= Error codes =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Module || Description || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C01 || 1 || 14 || Invalid kernel capability descriptor&lt;br /&gt;
|-&lt;br /&gt;
| 0x4201 || 1 || 33 || [[SPL_services#GetConfig|IsDebugMode]] isn&#039;t set.&lt;br /&gt;
|-&lt;br /&gt;
| 0xCA01 || 1 || 101 || Invalid size&lt;br /&gt;
|-&lt;br /&gt;
| 0xCC01 || 1 || 102 || Invalid address&lt;br /&gt;
|-&lt;br /&gt;
| 0xCE01 || 1 || 103 || Slabheap full&lt;br /&gt;
|-&lt;br /&gt;
| 0xD001 || 1 || 104 || Memory full&lt;br /&gt;
|-&lt;br /&gt;
| 0xD201 || 1 || 105 || Handle-table full.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD401 || 1 || 106 || Invalid memory state / invalid memory permissions.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD801 || 1 || 108 || Invalid memory permissions.&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC01 || 1 || 110 || Invalid memory range&lt;br /&gt;
|-&lt;br /&gt;
| 0xE001 || 1 || 112 || Invalid thread priority.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE201 || 1 || 113 || Invalid processor id.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE401 || 1 || 114 || Invalid handle.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE601 || 1 || 115 || Syscall copy from user failed.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE801 || 1 || 116 || Invalid combination&lt;br /&gt;
|-&lt;br /&gt;
| 0xEA01 || 1 || 117 || Time out. Also when you give 0 handles to svcWaitSynchronizationN.&lt;br /&gt;
|-&lt;br /&gt;
| 0xEC01 || 1 || 118 || Canceled/interrupted [?]&lt;br /&gt;
|-&lt;br /&gt;
| 0xEE01 || 1 || 119 || Exceeding maximum&lt;br /&gt;
|-&lt;br /&gt;
| 0xF001 || 1 || 120 || Invalid enum&lt;br /&gt;
|-&lt;br /&gt;
| 0xF201 || 1 || 121 || No such entry&lt;br /&gt;
|-&lt;br /&gt;
| 0xF401 || 1 || 122 || Irq/DeviceAddressSpace/{...} already registered&lt;br /&gt;
|-&lt;br /&gt;
| 0xF601 || 1 || 123 || Port remote dead&lt;br /&gt;
|-&lt;br /&gt;
| 0xF801 || 1 || 124 || [Usermode] Unhandled interrupt&lt;br /&gt;
|-&lt;br /&gt;
| 0xFA01 || 1 || 125 || Wrong memory permission?&lt;br /&gt;
|-&lt;br /&gt;
| 0xFC01 || 1 || 126 || Reserved value&lt;br /&gt;
|-&lt;br /&gt;
| 0xFE01 || 1 || 127 || Invalid hardware breakpoint&lt;br /&gt;
|-&lt;br /&gt;
| 0x10001 || 1 || 128 || [Usermode] Fatal exception&lt;br /&gt;
|-&lt;br /&gt;
| 0x10201 || 1 || 129 || Last thread didn&#039;t belong to your process&lt;br /&gt;
|-&lt;br /&gt;
| 0x10601 || 1 || 131 || Port max sessions exceeded&lt;br /&gt;
|-&lt;br /&gt;
| 0x10801 || 1 || 132 || Resource limit exceeded&lt;br /&gt;
|-&lt;br /&gt;
| 0x20801 || 1 || 260 || Command buffer too small&lt;br /&gt;
|-&lt;br /&gt;
| 0x41001 || 1 || 520 || Process not being debugged&lt;br /&gt;
|-&lt;br /&gt;
| 0xE02 || 2 || 7 || Savedata [[Filesystem_services|already]] mounted&lt;br /&gt;
|-&lt;br /&gt;
| 0x7802 || 2 || 60 || The specified [[NCA]]-type doesn&#039;t exist for this title.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D202 || 2 || 1001 || Process does not have RomFs &lt;br /&gt;
|-&lt;br /&gt;
| 0x7D402 || 2 || 1002 || Title-id not found / savedata not found.&lt;br /&gt;
|-&lt;br /&gt;
| 0xFA202 || 2 || 2001 || SD card not inserted&lt;br /&gt;
|-&lt;br /&gt;
| 0x13B002 || 2 || 2520 || Gamecard not inserted&lt;br /&gt;
|-&lt;br /&gt;
| 0x13DA02 || 2 || 2541 || Version check failed when mounting gamecard sysupdate partition?&lt;br /&gt;
|-&lt;br /&gt;
| 0x171402 || 2 || 2954 || Invalid gamecard handle.&lt;br /&gt;
|-&lt;br /&gt;
| 0x196002 || 2 || 3248 || Out of memory&lt;br /&gt;
|-&lt;br /&gt;
| 0x196202 || 2 || 3249 || Out of memory&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A4A02 || 2 || 3365 || Out of memory&lt;br /&gt;
|-&lt;br /&gt;
| 0x235202 || 2 || 4521 || Invalid NCA Key index&lt;br /&gt;
|-&lt;br /&gt;
| 0x235E02 || 2 || 4527 || NCA-path used with the wrong titleID.&lt;br /&gt;
|-&lt;br /&gt;
| 0x250E02 || 2 || 4743 || [[NAX0|Corrupted]] NAX0 header.&lt;br /&gt;
|-&lt;br /&gt;
| 0x251002 || 2 || 4744 || Invalid [[NAX0]] magicnum.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2EE202 || 2 || 6001 || Invalid input&lt;br /&gt;
|-&lt;br /&gt;
| 0x2EE602 || 2 || 6003 || Path too long&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F5A02 || 2 || 6061 || Offset outside storage&lt;br /&gt;
|-&lt;br /&gt;
| 0x313802 || 2 || 6300 || Operation not supported&lt;br /&gt;
|-&lt;br /&gt;
| 0x320002 || 2 || 6400 || Permission denied&lt;br /&gt;
|-&lt;br /&gt;
| 0x326602 || 2 || 6451 || Missing titlekey(?) required to mount content&lt;br /&gt;
|-&lt;br /&gt;
| 0x3EA03 || 3 || 501 || Invalid handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x3EE03 || 3 || 503 || Invalid memory mirror&lt;br /&gt;
|-&lt;br /&gt;
| 0xA05 || 5 || 5 || [[Content_Manager_services|NcaID]] not found. Returned when attempting to mount titles which exist that aren&#039;t *8XX titles, the same way *8XX titles are mounted.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE05 || 5 || 7 || TitleId not found&lt;br /&gt;
|-&lt;br /&gt;
| 0x1805 || 5 || 12 || Invalid StorageId&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC05 || 5 || 110 || Gamecard not inserted&lt;br /&gt;
|-&lt;br /&gt;
| 0x17C05 || 5 || 190 || Gamecard not initialized&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F405 || 5 || 250 || Sdcard not inserted&lt;br /&gt;
|-&lt;br /&gt;
| 0x20805 || 5 || 260 || Storage not mounted&lt;br /&gt;
|-&lt;br /&gt;
| 0x806 || 6 || 4 || Converted from error 0xD401.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1006 || 6 || 8 || Converted from error 0xE401.&lt;br /&gt;
|-&lt;br /&gt;
| 0x408 || 8 || 2 || Not initialized.&lt;br /&gt;
|-&lt;br /&gt;
| 0x608 || 8 || 3 || Invalid control StorageID.&lt;br /&gt;
|-&lt;br /&gt;
| 0x808 || 8 || 4 || Storage not found.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA08 || 8 || 5 || Access denied.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE08 || 8 || 7 || Title is not registered.&lt;br /&gt;
|-&lt;br /&gt;
| 0x209 || 9 || 1 || Args too long.&lt;br /&gt;
|-&lt;br /&gt;
| 0x409 || 9 || 2 || Maximum processes loaded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x609 || 9 || 3 || NPDM too big.&lt;br /&gt;
|-&lt;br /&gt;
| 0x19009 || 9 || 200 || Invalid access control sizes in NPDM.&lt;br /&gt;
|-&lt;br /&gt;
| 0x809 || 9 || 4 || Invalid NPDM.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA09 || 9 || 5 || Invalid files.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE09 || 9 || 7 || Already registered.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1009 || 9 || 8 || Title not found.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1209 || 9 || 9 || Title-id in ACI0 doesn&#039;t match range in ACID.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6609 || 9 || 51 || Invalid memory state/permission&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A09 || 9 || 53 || Invalid NRR&lt;br /&gt;
|-&lt;br /&gt;
| 0xA209 || 9 || 81 || Unaligned NRR address&lt;br /&gt;
|-&lt;br /&gt;
| 0xA409 || 9 || 82 || Bad NRR size&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA09 || 9 || 85 || Bad NRR address&lt;br /&gt;
|-&lt;br /&gt;
| 0xAE09 || 9 || 87 || Bad initialization&lt;br /&gt;
|-&lt;br /&gt;
| 0xC809 || 9 || 100 || Unknown ACI0 descriptor&lt;br /&gt;
|-&lt;br /&gt;
| 0xCE09 || 9 || 103 || ACID/ACI0 don&#039;t match for descriptor &amp;quot;KernelFlags&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD009 || 9 || 104 || ACID/ACI0 don&#039;t match for descriptor &amp;quot;SyscallMask&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD409 || 9 || 106 || ACID/ACI0 don&#039;t match for descriptor &amp;quot;MapIoOrNormalRange&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD609 || 9 || 107 || ACID/ACI0 don&#039;t match for descriptor &amp;quot;MapNormalPage&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0xDE09 || 9 || 111 || ACID/ACI0 don&#039;t match for descriptor &amp;quot;InterruptPair&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE209 || 9 || 113 || ACID/ACI0 don&#039;t match for descriptor &amp;quot;ApplicationType&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE409 || 9 || 114 || ACID/ACI0 don&#039;t match for descriptor &amp;quot;KernelReleaseVersion&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE609 || 9 || 115 || ACID/ACI0 don&#039;t match for descriptor &amp;quot;HandleTableSize&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE809 || 9 || 116 || ACID/ACI0 don&#039;t match for descriptor &amp;quot;DebugFlags&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A80A || 10 || 212 || Bad magic (expected &#039;SFCO&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20B || 11 || 1 || Size too big to fit to marshal.&lt;br /&gt;
|-&lt;br /&gt;
| 0x11A0B || 11 || 141 || Went past maximum during marshalling.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1900B || 11 || 200 || Session doesn&#039;t support domains.&lt;br /&gt;
|-&lt;br /&gt;
| 0x25A0B || 11 || 301 || Remote process is dead.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D60B || 11 || 491 || IPC Query 1 failed.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20F || 15 || 1 || Pid not found&lt;br /&gt;
|-&lt;br /&gt;
| 0x60F || 15 || 3 || Process has no pending events&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0F || 15 || 5 || Application already running&lt;br /&gt;
|-&lt;br /&gt;
| 0x410 || 16 || 2 || Title-id not found&lt;br /&gt;
|-&lt;br /&gt;
| 0xF010 || 16 || 120 || Gamecard sysupdate not required&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F610 || 16 || 251 || Unexpected StorageId&lt;br /&gt;
|-&lt;br /&gt;
| 0x415 || 21 || 2 || Not initialized.&lt;br /&gt;
|-&lt;br /&gt;
| 0x615 || 21 || 3 || Max sessions&lt;br /&gt;
|-&lt;br /&gt;
| 0xC15 || 21 || 6 || Invalid name (all zeroes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1015 || 21 || 8 || Permission denied&lt;br /&gt;
|-&lt;br /&gt;
| 0x416 || 22 || 2 || Address space is full&lt;br /&gt;
|-&lt;br /&gt;
| 0x616 || 22 || 3 || NRO already loaded&lt;br /&gt;
|-&lt;br /&gt;
| 0x816 || 22 || 4 || Invalid NRO header values&lt;br /&gt;
|-&lt;br /&gt;
| 0xC16 || 22 || 6 || Bad NRR magic&lt;br /&gt;
|-&lt;br /&gt;
| 0x1016 || 22 || 8 || Reached max NRR count&lt;br /&gt;
|-&lt;br /&gt;
| 0x1216 || 22 || 9 || Unable to verify NRO hash or NRR signature&lt;br /&gt;
|-&lt;br /&gt;
| 0x80216 || 22 || 1025 || Address not page-aligned&lt;br /&gt;
|-&lt;br /&gt;
| 0x80416 || 22 || 1026 || Incorrect NRO size&lt;br /&gt;
|-&lt;br /&gt;
| 0x80816 || 22 || 1028 || NRO not loaded&lt;br /&gt;
|-&lt;br /&gt;
| 0x80A16 || 22 || 1029 || NRR not loaded&lt;br /&gt;
|-&lt;br /&gt;
| 0x80C16 || 22 || 1030 || Already initialized&lt;br /&gt;
|-&lt;br /&gt;
| 0x80E16 || 22 || 1031 || Not initialized&lt;br /&gt;
|-&lt;br /&gt;
| 0x41A || 26 || 2 || Argument is invalid&lt;br /&gt;
|-&lt;br /&gt;
| 0xC81A || 26 || 100 || Incorrect buffer size&lt;br /&gt;
|-&lt;br /&gt;
| 0xCA1A || 26 || 101 || Unknown TZ error&lt;br /&gt;
|-&lt;br /&gt;
| 0xD01A || 26 || 104 || All AES engines busy&lt;br /&gt;
|-&lt;br /&gt;
| 0xD21A || 26 || 105 || Invalid AES engine-id&lt;br /&gt;
|-&lt;br /&gt;
| 0x272 || 114 || 1 || Generic error&lt;br /&gt;
|-&lt;br /&gt;
| 0xCC74 || 116 || 102 || Time not set&lt;br /&gt;
|-&lt;br /&gt;
| 0x287C || 124 || 20 || Argument is NULL&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C7C || 124 || 22 || Argument is invalid&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C7C || 124 || 30 || Bad input buffer size&lt;br /&gt;
|-&lt;br /&gt;
| 0x407C || 124 || 32 || Invalid input buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x3CF089 || 137 || 7800 || Unknown/invalid libcurl error.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E8289-0x3F4089 || 137 || 8001-8096 || libcurl error 1-96. Some of the libcurl errors in the error-table map to the above unknown-libcurl-error however.&lt;br /&gt;
|-&lt;br /&gt;
| 0x668C || 140 || 51 || USB data-transfer in progress&lt;br /&gt;
|-&lt;br /&gt;
| 0xD48C || 140 || 106 || Invalid descriptor&lt;br /&gt;
|-&lt;br /&gt;
| 0x1928C || 140 || 201 || USB device not bound / interface already enabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x299 || 153 || 1 || Invalid audio device&lt;br /&gt;
|-&lt;br /&gt;
| 0x499 || 153 || 2 || Invalid buffer address&lt;br /&gt;
|-&lt;br /&gt;
| 0x699 || 153 || 3 || Invalid sample rate&lt;br /&gt;
|-&lt;br /&gt;
| 0x1499 || 153 || 10 || Invalid channel count&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0899 || 153 || 1540 || Audio output was already started&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C9D || 157 || 30 || Address is NULL&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E9D || 157 || 31 || PID is NULL&lt;br /&gt;
|-&lt;br /&gt;
| 0x549D || 157 || 42 || Already bound&lt;br /&gt;
|-&lt;br /&gt;
| 0xCC9D || 157 || 102 || Invalid PID&lt;br /&gt;
|-&lt;br /&gt;
| 0x35B || 347 || 1 || Failed to init SM.&lt;br /&gt;
|-&lt;br /&gt;
| 0x55B || 347 || 2 || Failed to init FS.&lt;br /&gt;
|-&lt;br /&gt;
| 0x75B || 347 || 3 || Failed to to open NRO file. May also happen when SD card isn&#039;t inserted / SD mounting failed earlier.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95B || 347 || 4 || Failed to read NRO header.&lt;br /&gt;
|-&lt;br /&gt;
| 0xB5B || 347 || 5 || Invalid NRO magic.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD5B || 347 || 6 || Invalid NRO segments.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF5B || 347 || 7 || Failed to read NRO.&lt;br /&gt;
|-&lt;br /&gt;
| 0x135B || 347 || 9 || Failed to allocate heap.&lt;br /&gt;
|-&lt;br /&gt;
| 0x255B || 347 || 18 || Failed to map code-binary memory.&lt;br /&gt;
|-&lt;br /&gt;
| 0x275B || 347 || 19 || Failed to map code memory (.text).&lt;br /&gt;
|-&lt;br /&gt;
| 0x295B || 347 || 20 || Failed to map code memory (.rodata).&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B5B || 347 || 21 || Failed to map code memory (.data+.bss).&lt;br /&gt;
|-&lt;br /&gt;
| 0x315B || 347 || 24 || Failed to unmap code memory (.text).&lt;br /&gt;
|-&lt;br /&gt;
| 0x335B || 347 || 25 || Failed to unmap code memory (.rodata).&lt;br /&gt;
|-&lt;br /&gt;
| 0x355B || 347 || 26 || Failed to unmap code memory (.data+.bss).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== FS Error Codes ==&lt;br /&gt;
&lt;br /&gt;
The following are the error codes recognized by nn::fs::detail::LogErrorMessage found in some [[Factory Setup|factory]] titles:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Error Code || Description || Message&lt;br /&gt;
|-&lt;br /&gt;
| 0x7802 || 60 || Error: Specified mount name already exists.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD401 || 106 || Error: Passed buffer is not usable for fs library.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D202 || 1001 || Error: Specified partition is not found.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D402 || 1002 || Error: Specified target is not found.&lt;br /&gt;
|-&lt;br /&gt;
| 0xFA002 - 0x138602 || 2000 - 2499 || Error: Failed to access SD card.&lt;br /&gt;
|-&lt;br /&gt;
| 0x136802 - 0x176E02 || 2500 - 2999 || Error: Failed to access game card.&lt;br /&gt;
|-&lt;br /&gt;
| 0x177202 || 3001 || Error: Specified operation is not implemented.&lt;br /&gt;
|-&lt;br /&gt;
| 0x177A02 || 3005 || Error: Specified value is out of range.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B5802 - 0x1F3E02 || 3500 - 3999 || Error: Failed to access MMC.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F4202 - 0x219602 || 4001 - 4299 || Error: ROM is corrupted.&lt;br /&gt;
|-&lt;br /&gt;
| 0x219A02 - 0x232602 || 4301 - 4499 || Error: Save data is corrupted.&lt;br /&gt;
|-&lt;br /&gt;
| 0x232A02 - 0x23EE02 || 4501 - 4599 || Error: NCA is corrupted.&lt;br /&gt;
|-&lt;br /&gt;
| 0x23F202 - 0x243E02 || 4601 - 4639 || Error: Integrity verification failed.&lt;br /&gt;
|-&lt;br /&gt;
| 0x244202 - 0x246602 || 4641 - 4659 || Error: Partition FS is corrupted.&lt;br /&gt;
|-&lt;br /&gt;
| 0x246A02 - 0x248E02 || 4661 - 4679 || Error: Built-in-storage is corrupted.&lt;br /&gt;
|-&lt;br /&gt;
| 0x249202 - 0x24B602 || 4681 - 4699 || Error: FAT FS is corrupted.&lt;br /&gt;
|-&lt;br /&gt;
| 0x24BA02 - 0x24DE02 || 4701 - 4719 || Error: HOST FS is corrupted.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F4002 - 0x270E02 || 4000, 4300, 4500, 4600, 4640, 4660, 4680, 4700, 4720-4999 || Error: Data is corrupted.&lt;br /&gt;
|-&lt;br /&gt;
| 0x271002 - 0x2EDE02 || 5000-5999 || Error: Unexpected failure occurred.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2EE402 - 0x2F1A02 || 6002-6029 || Error: Invalid path was specified.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F5A02 || 6061 || Error: Invalid offset was specified.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F5C02 || 6062 || Error: Invalid size was specified.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F5E02 || 6063 || Error: Null pointer argument was specified.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2EE002 || 6000 || Error: Precondition violation.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2EE202 - 0x306E02 || 6001-6199 || Error: Invalid argument was specified.&lt;br /&gt;
|-&lt;br /&gt;
| 0x307202 || 6201 || Error: OpenMode_AllowAppend is required for implicit extension of file size by WriteFile().&lt;br /&gt;
|-&lt;br /&gt;
| 0x307002 - 0x313602 || 6200, 6202 - 6299 || Error: Invalid operation for the open mode.&lt;br /&gt;
|-&lt;br /&gt;
| 0x313802 - 0x31FE02 || 6300-6399 || Error: Unsupported operation.&lt;br /&gt;
|-&lt;br /&gt;
| 0x320002 - 0x32C602 || 6400-6499 || Error: Permission denied.&lt;br /&gt;
|-&lt;br /&gt;
| 0x346402 || 6706 || Error: Enough journal space is not left.&lt;br /&gt;
|-&lt;br /&gt;
| 0x346A02 || 6709 || Error: The open count of files and directories reached the limitation.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Fatal Errors =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Error || Description&lt;br /&gt;
|-&lt;br /&gt;
| 2162-0002&lt;br /&gt;
| Can be triggered by running [[SVC|svcBreak]]. The svcBreak params have no affect on the value of the thrown error-code.&lt;br /&gt;
|-&lt;br /&gt;
| 2168-0000&lt;br /&gt;
| Userland ARM undefined instruction exception&lt;br /&gt;
|-&lt;br /&gt;
| 2168-0001&lt;br /&gt;
| Userland ARM prefetch-abort due to PC set to non-executable region&lt;br /&gt;
|-&lt;br /&gt;
| 2168-0002&lt;br /&gt;
| Userland ARM data abort. Also caused by abnormal process termination via [[SVC|svcExitProcess]]. Note: directly jumping to nnMain()-retaddr from non-main-thread has the same result.&lt;br /&gt;
|-&lt;br /&gt;
| 2168-0003&lt;br /&gt;
| Userland PC address not aligned to 4 bytes&lt;br /&gt;
|-&lt;br /&gt;
| 2168-0008&lt;br /&gt;
| Can occur when attempting to call an svc outside the whitelist&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Support Errors =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Error ! Module ! Description ! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| {web-applets listed above}&lt;br /&gt;
| 2750&lt;br /&gt;
| MP4 parsing failed.&lt;br /&gt;
|}&lt;br /&gt;
Normal error-codes displayed by the system also use the same format as fatal-errors.&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=SVC&amp;diff=3927</id>
		<title>SVC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=SVC&amp;diff=3927"/>
		<updated>2018-03-01T23:59:30Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
= System calls =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Id || Name || In || Out&lt;br /&gt;
|-&lt;br /&gt;
|  0x1 || [[#svcSetHeapSize]] || W1=size || W0=result, X1=outaddr&lt;br /&gt;
|-&lt;br /&gt;
|  0x2 || [[#svcSetMemoryPermission]] || X0=addr, X1=size, W2=prot || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x3 || [[#svcSetMemoryAttribute]] || X0=addr, X1=size, W2=state0, W3=state1 || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x4 || [[#svcMapMemory]] || X0=dstaddr, X1=srcaddr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x5 || [[#svcUnmapMemory]] || X0=dstaddr, X1=srcaddr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0x6 || [[#svcQueryMemory]] || X0=MemoryInfo*, X2=addr || W0=result, W1=PageInfo                                                         &lt;br /&gt;
|-&lt;br /&gt;
|  0x7 || [[#svcExitProcess]] || None ||&lt;br /&gt;
|-&lt;br /&gt;
|  0x8 || [[#svcCreateThread]] || X1=entry, X2=thread_context, X3=stacktop, W4=prio, W5=processor_id  || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
|  0x9 || [[#svcStartThread]] || W0=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0xA || [[#svcExitThread]] || None ||                                                         &lt;br /&gt;
|-&lt;br /&gt;
|  0xB || [[#svcSleepThread]] || X0=nano || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0xC || [[#svcGetThreadPriority]] || W1=thread_handle || W0=result, W1=prio&lt;br /&gt;
|-&lt;br /&gt;
|  0xD || [[#svcSetThreadPriority]] || W0=thread_handle, W1=prio || W0=result&lt;br /&gt;
|-&lt;br /&gt;
|  0xE || [[#svcGetThreadCoreMask]] || W2=thread_handle || W0=result, W1=out, X2=out&lt;br /&gt;
|-&lt;br /&gt;
|  0xF || [[#svcSetThreadCoreMask]] || W0=thread_handle, W1=in, X2=in2 || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || [[#svcGetCurrentProcessorNumber]] || None || W0/X0=cpuid&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || svcSignalEvent || W0=wevent_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || svcClearEvent || W0=wevent_or_revent_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || [[#svcMapSharedMemory]] || W0=shmem_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || svcUnmapSharedMemory || W0=shmem_handle, X1=addr, X2=size || W0=result                                                 &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || [[#svcCreateTransferMemory]] || X1=addr, X2=size, W3=perm || W0=result, W1=tmem_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || svcCloseHandle || W0=handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || svcResetSignal || W0=revent_or_process_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || [[#svcWaitSynchronization]] || X1=handles_ptr, W2=num_handles. X3=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || svcCancelSynchronization || W0=thread_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || svcArbitrateLock || W0=cur_thread_handle, X1=ptr, W2=req_thread_handle ||                                     &lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || svcArbitrateUnlock || X0=ptr ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || svcWaitProcessWideKeyAtomic || X0=ptr0, X1=ptr, W2=thread_handle, X3=timeout || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || svcSignalProcessWideKey || X0=ptr, W1=value || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || svcGetSystemTick || None || X0={value of cntpct_el0}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || svcConnectToNamedPort || X1=port_name_str || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || svcSendSyncRequestLight || W0=light_session_handle, X1=? || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || svcSendSyncRequest || X0=normal_session_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || [[#svcSendSyncRequestWithUserBuffer]] || X0=cmdbufptr, X1=size, X2=handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || svcSendAsyncRequestWithUserBuffer || X1=cmdbufptr, X2=size, X3=handle || W0=result, W1=event_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || svcGetProcessId || W1=thread_or_process_or_debug_handle || W0=result, X1=pid&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || svcGetThreadId || W0=thread_handle || W0=result, X1=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || [[#svcBreak]] || X0=break_reason,X1,X2=info || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || svcOutputDebugString || X0=str, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || svcReturnFromException || X0=result || &lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || [[#svcGetInfo]] || X1=info_id, X2=handle, X3=info_sub_id || W0=result, X1=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || svcFlushEntireDataCache || None || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || svcFlushDataCache || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || [3.0.0+] [[#svcMapPhysicalMemory]] || X0=addr, X1=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || [3.0.0+] svcUnmapPhysicalMemory|| X0=addr, X1=size || W0=result&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x2F || svcGetLastThreadInfo || None || W0=result, W1,W2,W3,W4=unk, W5=truncated_u64, W6=bool&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || svcGetResourceLimitLimitValue || W1=reslimit_handle, W2=[[#LimitableResource]] || W0=result, X1=value&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || svcGetResourceLimitCurrentValue || W1=reslimit_handle, W2=[[#LimitableResource]] || W0=result, X1=value&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || svcSetThreadActivity || W0=thread_handle, W1=bool || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || svcGetThreadContext3 || W0=thread_handle, W1=[[#ThreadContext]]* || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || [4.0.0+] || X0=ptr, W1=type, X2=? X3=timeout ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || [4.0.0+] || X0=ptr, W1=type, X2=? W3=? ||&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x3C || [[#svcDumpInfo]] || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || [4.0.0+] svcDumpInfoNew || ||&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x40 || svcCreateSession || W2=is_light, X3=? || W0=result, W1=server_handle, W2=client_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || [[#svcAcceptSession]] || W1=port_handle || W0=result, W1=session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || svcReplyAndReceiveLight || W0=light_session_handle || W0=result, W1,W2,W3,W4,W5,W6,W7=out&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || [[#svcReplyAndReceive]] || X1=ptr_handles, W2=num_handles, X3=replytarget_handle(0=none), X4=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || svcReplyAndReceiveWithUserBuffer|| X1=buf, X2=sz, X3=ptr_handles, W4=num_handles, X5=replytarget_handle(0=none), X6=timeout || W0=result, W1=handle_idx&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || svcCreateEvent || None || W0=result, W1=client_handle ?, W2=server_handle ?&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x4B || [4.0.0+] [[#svcCreateJitMemory]] || X1=addr, X2=size || W0=result, W1=jit_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || [4.0.0+] [[#svcMapJitMemory]] || W0=jit_handle, W1=[[#MapJitOperation]], X2=dstaddr, X3=size, W4=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D || svcSleepSystem || None || None&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E || [[#svcReadWriteRegister]] || X1=reg_addr, W2=rw_mask, W3=in_val || W0=result, W1=out_val&lt;br /&gt;
|-&lt;br /&gt;
| 0x4F || svcSetProcessActivity || W0=process_handle, W1=bool || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || [[#svcCreateSharedMemory]] || W1=size, W2=myperm, W3=otherperm || W0=result, W1=shmem_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || [[#svcMapTransferMemory]] || X0=tmem_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || [[#svcUnmapTransferMemory]] || W0=tmemhandle, X1=addr, X2=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x53 || svcCreateInterruptEvent || X1=irq_num, W2=flag || W0=result, W1=handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || [[#svcQueryPhysicalAddress]] || X1=addr || W0=result, X1=physaddr, X2=kerneladdr, X3=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x55 || [[#svcQueryIoMapping]] || X1=physaddr, X2=size || W0=result, X1=virtaddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x56 || [[#svcCreateDeviceAddressSpace]] || X1=dev_as_start_addr, X2=dev_as_end_addr || W0=result, W1=dev_as_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x57 || [[#svcAttachDeviceAddressSpace]] || W0=device, X1=dev_as_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || [[#svcDetachDeviceAddressSpace]] || W0=device, X1=dev_as_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || [[#svcMapDeviceAddressSpaceByForce]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr, W5=perm || W0=result &lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || [[#svcMapDeviceAddressSpaceAligned]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr, W5=perm || W0=result &lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || svcMapDeviceAddressSpace || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || [[#svcUnmapDeviceAddressSpace]] || W0=dev_as_handle, W1=proc_handle, X2=dev_map_addr, X3=dev_as_size, X4=dev_as_addr || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D || svcInvalidateProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5E || svcStoreProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F || svcFlushProcessDataCache || W0=process_handle, X1=addr, X2=size || W0=size&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || svcDebugActiveProcess || X1=pid || W0=result, W1=debug_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || svcBreakDebugProcess || W0=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || svcTerminateDebugProcess || W0=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || svcGetDebugEvent || X0=DebugEventInfo*, W1=debug_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || svcContinueDebugEvent || W0=debug_handle, W1=[[#ContinueDebugFlags]], X2=thread_id || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x65 || svcGetProcessList || X1=pids_out_ptr, W2=max_out || W0=result, W1=num_out &lt;br /&gt;
|-&lt;br /&gt;
| 0x66 || svcGetThreadList || X1=tids_out_ptr, W2=max_out, W3=debug_handle_or_zero || W0=result, X1=num_out&lt;br /&gt;
|-&lt;br /&gt;
| 0x67 || svcGetDebugThreadContext || X0=ThreadContext*, X1=debug_handle, X2=thread_id, W3=[[#ThreadContextFlags]] || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x68 || svcSetDebugThreadContext || W0=debug_handle, W1=[[#ThreadContextFlags]], X2=ThreadContext* || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x69 || svcQueryDebugProcessMemory || X0=[[#MemoryInfo]]*, X2=debug_handle, X3=addr || W0=result, W1=PageInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A || svcReadDebugProcessMemory || X0=buffer*, X1=debug_handle, X2=src_addr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x6B || svcWriteDebugProcessMemory || X0=debug_handle, X1=buffer*, X2=dst_addr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C || svcSetHardwareBreakPoint || W0=HardwareBreakpointId, X1=watchpoint_flags, X2=watchpoint_value/debug_handle? || &lt;br /&gt;
|-&lt;br /&gt;
| 0x6D || svcGetDebugThreadParam || X2=debug_handle, X3=thread_id, W4=[[#DebugThreadParam]] || W0=result, X1=out0, W2=out1&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0x70 || svcCreatePort || W2=max_sessions, W3=unk_bool, X4=name_ptr || W0=result, W1=clientport_handle, W2=serverport_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || svcManageNamedPort || X1=name_ptr, W2=max_sessions || W0=result, W1=serverport_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || svcConnectToPort || W1=clientport_handle || W0=result, W1=session_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x73 || [[#svcSetProcessMemoryPermission]] || W0=process_handle, X1=addr, X2=size, W3=perm || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x74 || [[#svcMapProcessMemory]] || X0=srcaddr, W1=process_handle, X2=dstaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x75 || [[#svcUnmapProcessMemory]] || W0=process_handle, X1=dstaddr, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x76 || [[#svcQueryProcessMemory]] || X0=meminfo_ptr, W2=process_handle, X3=addr || W0=result, W1=pageinfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x77 || [[#svcMapProcessCodeMemory]] || W0=process_handle, X1=dstaddr, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x78 || [[#svcUnmapProcessCodeMemory]] || W0=process_handle, X1=dstaddr, X2=srcaddr, X3=size || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x79 || [[#svcCreateProcess]] || X1=procinfo_ptr, X2=caps_ptr, W3=cap_num ||  W0=result, W1=process_handle&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || svcStartProcess || W0=process_handle, W1=main_thread_prio, W2=default_cpuid, W3=main_thread_stacksz || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || svcTerminateProcess || W0=process_handle || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || [[#svcGetProcessInfo]] || W0=process_handle || W0=result, X1=[[#ProcessState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D || svcCreateResourceLimit || None || W0=result, W1=reslimit_handle &lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || svcSetResourceLimitLimitValue || W0=reslimit_handle, W1=[[#LimitableResource]], X2=value || W0=result&lt;br /&gt;
|-&lt;br /&gt;
| 0x7F || svcCallSecureMonitor || X0=smc_sub_id, X1,X2,X3,X4,X5,X6,X7=smc_args || X0,X1,X2,X3,X4,X5,X6,X7=result&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcSetHeapSize ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || OutAddr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set the process heap to a given Size. It can both extend and shrink the heap.&lt;br /&gt;
&lt;br /&gt;
Size must be a multiple of 0x200000.&lt;br /&gt;
&lt;br /&gt;
On success, the heap base-address (which is fixed by kernel, aslr&#039;d) is written to OutAddr.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Size must be less than 0x18000000.&lt;br /&gt;
&lt;br /&gt;
== svcSetMemoryPermission ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#Permission]] || Prot&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Change permission of page-aligned memory region.&lt;br /&gt;
&lt;br /&gt;
Bit2 of permission (exec) is not allowed. Setting write-only is not allowed either (bit1).&lt;br /&gt;
&lt;br /&gt;
This can be used to move back and forth between ---, r-- and rw-.&lt;br /&gt;
&lt;br /&gt;
== svcSetMemoryAttribute ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u32 || State0&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || u32 || State1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Change attribute of page-aligned memory region. &lt;br /&gt;
&lt;br /&gt;
This is used to turn on/off caching for a given memory area. Useful when talking to devices such as the GPU.&lt;br /&gt;
&lt;br /&gt;
What happens &amp;quot;under the hood&amp;quot; is the &amp;quot;Memory Attribute Indirection Register&amp;quot; index is changed from 2 to 3 in the MMU descriptor.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! State0 || State1 || Action&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || Clear bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0 || Clear bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 8 || Set bit3 in [[#MemoryAttribute]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcMapMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps a memory range into a different range.&lt;br /&gt;
&lt;br /&gt;
Mainly used for adding guard pages around stack.&lt;br /&gt;
&lt;br /&gt;
Source range gets reprotected to --- (it can no longer be accessed), and bit0 is set in the source [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
If dstaddr &amp;gt;= LowerTreshold, the dst-range is enforced to be within the process&#039; &amp;quot;MapRegion&amp;quot;. Code can get the range of this region from [[#svcGetInfo]] id0=2,3.&lt;br /&gt;
&lt;br /&gt;
In this case, the mapped memory will have state 0x5C3C0B.&lt;br /&gt;
&lt;br /&gt;
As long as (dstaddr+size) &amp;lt; LowerThreshold, then you can map anywhere but the mapped memory will have state 0x482907 instead.&lt;br /&gt;
&lt;br /&gt;
LowerTreshold is 0x80000000 for 36-bit address spaces, and 0x40000000 for 32-bit ones.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Support for the 0x482907 mappings outside the &amp;quot;MapRegion&amp;quot; were removed.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Unmaps a region that was previously mapped with [[#svcMapMemory]].&lt;br /&gt;
&lt;br /&gt;
It&#039;s possible to unmap ranges partially, you don&#039;t need to unmap the entire range &amp;quot;in one go&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The srcaddr/dstaddr must match what was given when the pages were originally mapped.&lt;br /&gt;
&lt;br /&gt;
== svcQueryMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#MemoryInfo]]* || MemInfo&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || PageInfo || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Query information about an address. Will always fetch the lowest page-aligned mapping that contains the provided address.&lt;br /&gt;
&lt;br /&gt;
Outputs a [[#MemoryInfo]] struct.&lt;br /&gt;
&lt;br /&gt;
== svcExitProcess ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Exits the current process.&lt;br /&gt;
&lt;br /&gt;
== svcCreateThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void(*)(void*) || Entry&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || ThreadContext&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || void* || StackTop&lt;br /&gt;
|-&lt;br /&gt;
| (In) W4 || u32 || Priority&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || u32 || ProcessorId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Create a thread in the current process.&lt;br /&gt;
&lt;br /&gt;
Processor_id must be 0,1,2,3 or -2, where -2 uses the default cpuid for process.&lt;br /&gt;
&lt;br /&gt;
== svcStartThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) None ||  ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Starts the thread for the provided handle.&lt;br /&gt;
&lt;br /&gt;
== svcExitThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Exits the current thread.&lt;br /&gt;
&lt;br /&gt;
== svcSleepThread ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || u64 || Nano&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Sleep for a specified amount of time, or yield thread.&lt;br /&gt;
&lt;br /&gt;
Setting nano=0 means &amp;quot;yield thread&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== svcGetThreadPriority ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1|| Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u64 || Priority&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get priority of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcSetThreadPriority ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0|| Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1|| u32 || Priority&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set priority of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
Priority is a number 0-0x3F. Lower value means higher priority.&lt;br /&gt;
&lt;br /&gt;
== svcGetThreadCoreMask ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u32 || Out0&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || u64 || Out1&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get affinity mask of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcSetThreadCoreMask ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Thread&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u32 || In0&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || In1&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Set affinity mask of provided thread handle.&lt;br /&gt;
&lt;br /&gt;
== svcGetCurrentProcessorNumber ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0/X0 || u64 || CpuId&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Get which cpu is executing the current thread.&lt;br /&gt;
&lt;br /&gt;
Cpu-id is an integer in the range 0-3.&lt;br /&gt;
&lt;br /&gt;
== svcMapSharedMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;SharedMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the block supplied by the handle. The required permissions are different for the process that created the handle and all other processes.&lt;br /&gt;
&lt;br /&gt;
Increases reference count for the KSharedMemory object. Thus in order to release the memory associated with the object, all handles to it must be closed and all mappings must be unmapped.&lt;br /&gt;
&lt;br /&gt;
== svcCreateTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;TransferMemory&amp;gt; || Handle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This one reprotects the src block with perms you give it. It also sets bit0 into [[#MemoryAttribute]].&lt;br /&gt;
&lt;br /&gt;
Executable bit perm not allowed.&lt;br /&gt;
&lt;br /&gt;
Closing all handles automatically causes the bit0 in [[#MemoryAttribute]] to clear, and the permission to reset.&lt;br /&gt;
&lt;br /&gt;
== svcWaitSynchronization ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle* || HandlesPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u64 || HandlesNum&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u64 || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Works with num_handles &amp;lt;= 0x40, error on num_handles == 0.&lt;br /&gt;
&lt;br /&gt;
Does not accept 0xFFFF8001 or 0xFFFF8000 as handles.&lt;br /&gt;
&lt;br /&gt;
=== Object types ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Port:&#039;&#039;&#039; signals when there is an incoming connection waiting to be [[#svcAcceptSession|accepted]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Session (server-side):&#039;&#039;&#039; signals when there is an incoming message waiting to be [[#svcReplyAndReceive|received]] or the pipe is closed.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. One of the objects was signalled before the timeout expired. Handle index is updated to indicate which object signalled.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xe401:&#039;&#039;&#039; Invalid handle. Returned when one of the handles passed is invalid. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xea01:&#039;&#039;&#039; Timeout. Returned when no objects have been signalled within the timeout. Handle index is not updated.&lt;br /&gt;
&lt;br /&gt;
== svcSendSyncRequestWithUserBuffer ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || void* || CmdPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Session&amp;gt; || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size must be 0x1000-aligned.&lt;br /&gt;
&lt;br /&gt;
== svcBreak ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || u64 || Break Reason&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 ||&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Info&lt;br /&gt;
|-&lt;br /&gt;
| (Out) ? || ? || ?&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When used on retail where inx0 bit31 is clear, the system will throw a [[Error_codes|fatal-error]]. Otherwise when bit31 is set, it will return 0 and notify the debugger?&lt;br /&gt;
&lt;br /&gt;
== svcGetInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || InfoId&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle || Handle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || InfoSubId&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || Out&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Handle type || Id0 || Id1 || Description&lt;br /&gt;
|-&lt;br /&gt;
| Process || 0 || 0 || AllowedCpuIdBitmask&lt;br /&gt;
|-&lt;br /&gt;
| Process || 1 || 0 || AllowedThreadPrioBitmask&lt;br /&gt;
|-&lt;br /&gt;
| Process || 2 || 0 || MapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 3 || 0 || MapRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 4 || 0 || HeapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 5 || 0 || HeapRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 6 || 0 || TotalMemoryAvailable. Total memory available(free+used).&lt;br /&gt;
|-&lt;br /&gt;
| Process || 7 || 0 || TotalMemoryUsage. Total used size of codebin memory + main-thread stack + allocated heap.&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 8 || 0 || IsCurrentProcessBeingDebugged&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 9 || 0 || Returns ResourceLimit handle for current process. Used by [[Process_Manager_services|PM]].&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 10 || -1, {current coreid} || IdleTickCount&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 11 || 0-3 || RandomEntropy from current process. TRNG. Used to seed usermode PRNGs.&lt;br /&gt;
|-&lt;br /&gt;
| Process || 12 || 0 || [2.0.0+] AddressSpaceBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 13 || 0 || [2.0.0+] AddressSpaceSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 14 || 0 || [2.0.0+] NewMapRegionBaseAddr&lt;br /&gt;
|-&lt;br /&gt;
| Process || 15 || 0 || [2.0.0+] NewMapRegionSize&lt;br /&gt;
|-&lt;br /&gt;
| Process || 16 || 0 || [3.0.0+] IsVirtualAddressMemoryEnabled&lt;br /&gt;
|-&lt;br /&gt;
| Process || 17 || 0 || [3.0.0+] Some size in bytes.&lt;br /&gt;
|-&lt;br /&gt;
| Process || 18 || 0 || [3.0.0+] TitleId&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 19 || 0 || [4.0.0+] PrivilegedProcessId_LowerBound&lt;br /&gt;
|-&lt;br /&gt;
| Zero    || 19 || 1 || [4.0.0+] PrivilegedProcessId_UpperBound&lt;br /&gt;
|-&lt;br /&gt;
| Thread  || 0xF0000002 || 0 || Performance counter related.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== svcMapPhysicalMemory ==&lt;br /&gt;
This is like svcSetHeapSize except you can allocate heap at any address you&#039;d like.&lt;br /&gt;
&lt;br /&gt;
== svcDumpInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) None || || &lt;br /&gt;
|-&lt;br /&gt;
| (Out) None || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Does nothing, just returns with registers set to all-zero.&lt;br /&gt;
&lt;br /&gt;
== svcAcceptSession ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Port&amp;gt; || Port&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;ServerSession&amp;gt; || Session&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf201:&#039;&#039;&#039; No session waiting to be accepted&lt;br /&gt;
&lt;br /&gt;
== svcReplyAndReceive ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || *Handle&amp;lt;Port or ServerSession&amp;gt; || Handles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u32 || NumHandles&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || Handle&amp;lt;ServerSession&amp;gt; || ReplyTarget&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 (nanoseconds) || Timeout&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Result&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || u32 || HandleIndex&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If ReplyTarget is not zero, a reply from the TLS will be sent to that session.&lt;br /&gt;
Then it will wait until either of the passed sessions has an incoming message, is closed, a passed port has an incoming connection, or the timeout expires.&lt;br /&gt;
If there is an incoming message, it is copied to the TLS.&lt;br /&gt;
&lt;br /&gt;
After being validated, passed handles will be enumerated in order; even if a session has been closed, if one that appears earlier in the list has an incoming message, it will take priority and a result code of 0x0 will be returned.&lt;br /&gt;
&lt;br /&gt;
=== Result codes ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0x0:&#039;&#039;&#039; Success. Either a session has an incoming message or a port has an incoming connection. HandleIndex is set appropriately.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xea01:&#039;&#039;&#039; Timeout. No handles were signalled before the timeout expired. HandleIndex is not updated.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;0xf601:&#039;&#039;&#039; Port remote dead. One of the sessions has been closed. HandleIndex is set appropriately.&lt;br /&gt;
&lt;br /&gt;
== svcCreateJitMemory ==&lt;br /&gt;
Takes an address range with backing memory to create the JIT memory object.&lt;br /&gt;
&lt;br /&gt;
The memory is initially memset to 0xFF after being locked.&lt;br /&gt;
&lt;br /&gt;
== svcMapJitMemory ==&lt;br /&gt;
Maps the backing memory for a JIT memory object into the current process.&lt;br /&gt;
&lt;br /&gt;
For [[#MapJitOperation|MapJitOperation_MapOwner]], memory permission must be RW-.&lt;br /&gt;
&lt;br /&gt;
For [[#MapJitOperation|MapJitOperation_MapSlave]], memory permission must be R-- or R-X.&lt;br /&gt;
&lt;br /&gt;
Operations [[#MapJitOperation|MapJitOperation_UnmapOwner/MapJitOperation_UnmapSlave]] unmap memory that was previously mapped this way.&lt;br /&gt;
&lt;br /&gt;
This allows one &amp;quot;secure JIT&amp;quot; process to map the memory as RW-, and the other &amp;quot;slave&amp;quot; process to map it R-X.&lt;br /&gt;
&lt;br /&gt;
== svcReadWriteRegister ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || RegAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || u64 || RwMask&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || u64 || InValue&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1|| u64 || OutValue&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Read/write IO registers with a hardcoded whitelist. Input address is physical-address and must be aligned to 4.&lt;br /&gt;
&lt;br /&gt;
rw_mask is 0 for reading and 0xffffffff for writing. You can also write individual bits by using a mask value.&lt;br /&gt;
&lt;br /&gt;
You can only write to registers inside physical pages 0x70019000 (MC), 0x7001C000 (MC0), 0x7001D000 (MC1), and they all share the same whitelist.&lt;br /&gt;
&lt;br /&gt;
The whitelist is same for writing as for reading.&lt;br /&gt;
&lt;br /&gt;
The whitelist is:&lt;br /&gt;
&lt;br /&gt;
0x054, 0x090, 0x094, 0x098, 0x09c, 0x0a0, 0x0a4, 0x0a8, 0x0ac, 0x0b0, 0x0b4, 0x0b8, 0x0bc, 0x0c0, 0x0c4, 0x0c8, 0x0d0, 0x0d4, 0x0d8, 0x0dc, 0x0e0, 0x100, 0x108, 0x10c, 0x118, 0x11c, 0x124, 0x128, 0x12c, 0x130, 0x134, 0x138, 0x13c, 0x158, 0x15c, 0x164, 0x168, 0x16c, 0x170, 0x174, 0x178, 0x17c, 0x200, 0x204, 0x2e4, 0x2e8, 0x2ec, 0x2f4, 0x2f8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37c, 0x380, 0x390, 0x394, 0x398, 0x3ac, 0x3b8, 0x3bc, 0x3c0, 0x3c4, 0x3d8, 0x3e8, 0x41c, 0x420, 0x424, 0x428, 0x42c, 0x430, 0x44c, 0x47c, 0x480, 0x484, 0x50c, 0x554, 0x558, 0x55c, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69c, 0x6a0, 0x6a4, 0x6c0, 0x6c4, 0x6f0, 0x6f4, 0x960, 0x970, 0x974, 0xa20, 0xa24, 0xb88, 0xb8c, 0xbc4, 0xbc8, 0xbcc, 0xbd0, 0xbd4, 0xbd8, 0xbdc, 0xbe0, 0xbe4, 0xbe8, 0xbec, 0xc00, 0xc5c, 0xcac&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Whitelist was extended with 0x4c4, 0x4c8, 0x4cc, 0x584, 0x588, 0x58c.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] The IO registers in range 0x7000E400 (PMC) size 0xC00 skip the whitelist, and do a TrustZone call using [[SMC]] Id1 0xC3000008(ReadWriteRegister).&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] Access to the Memory Controller (0x70019000) also uses smcReadWriteRegister.&lt;br /&gt;
&lt;br /&gt;
Here is the whitelist imposed by that SMC, relative to the start of the PMC registers:&lt;br /&gt;
&lt;br /&gt;
0x000, 0x00c, 0x010, 0x014, 0x01c, 0x020, 0x02c, 0x030, 0x034, 0x038, 0x03c, 0x040, 0x044, 0x048, 0x0dc, 0x0e0, 0x0e4, 0x160, 0x164, 0x168, 0x170, 0x1a8, 0x1b8, 0x1bc, 0x1c0, 0x1c4, 0x1c8, 0x2b4, 0x2d4, 0x440, 0x4d8&lt;br /&gt;
&lt;br /&gt;
Here is the whitelist imposed by smcReadWriteRegister (checked in addition to the whitelist in svcReadWriteRegister), relative to the start of the MC registers:&lt;br /&gt;
&lt;br /&gt;
0x000, 0x004, 0x008, 0x00C, 0x010, 0x01C, 0x020, 0x030, 0x034, 0x050, 0x054, 0x090, 0x094, 0x098, 0x09C, 0x0A0, 0x0A4, 0x0A8, 0x0AC, 0x0B0, 0x0B4, 0x0B8, 0x0BC, 0x0C0, 0x0C4, 0x0C8, 0x0D0, 0x0D4, 0x0D8, 0x0DC, 0x0E0, 0x100, 0x108, 0x10C, 0x118, 0x11C, 0x124, 0x128, 0x12C, 0x130, 0x134, 0x138, 0x13C, 0x158, 0x15C, 0x164, 0x168, 0x16C, 0x170, 0x174, 0x178, 0x17C, 0x200, 0x204, 0x238, 0x240, 0x244, 0x250, 0x254, 0x258, 0x264, 0x268, 0x26C, 0x270, 0x274, 0x280, 0x284, 0x288, 0x28C, 0x294, 0x2E4, 0x2E8, 0x2EC, 0x2F4, 0x2F8, 0x310, 0x314, 0x320, 0x328, 0x344, 0x348, 0x370, 0x374, 0x37C, 0x380, 0x390, 0x394, 0x398, 0x3AC, 0x3B8, 0x3BC, 0x3C0, 0x3C4, 0x3D8, 0x3E8, 0x41C, 0x420, 0x424, 0x428, 0x42C, 0x430, 0x44C, 0x47C, 0x480, 0x484, 0x4C4, 0x4C8, 0x4CC, 0x50C, 0x554, 0x558, 0x55C, 0x584, 0x588, 0x58C, 0x670, 0x674, 0x690, 0x694, 0x698, 0x69C, 0x6A0, 0x6A4, 0x6C0, 0x6C4, 0x6F0, 0x6F4, 0x960, 0x970, 0x974, 0x9B8, 0xA20, 0xA24, 0xA88, 0xA94, 0xA98, 0xA9C, 0xAA0, 0xAA4, 0xAA8, 0xAAC, 0xAB0, 0xAB4, 0xAB8, 0xABC, 0xAC0, 0xAC4, 0xAC8, 0xACC, 0xAD0, 0xAD4, 0xAD8, 0xADC, 0xAE0, 0xB88, 0xB8C, 0xBC4, 0xBC8, 0xBCC, 0xBD0, 0xBD4, 0xBD8, 0xBDC, 0xBE0, 0xBE4, 0xBE8, 0xBEC, 0xC00, 0xC5C, 0xCAC&lt;br /&gt;
&lt;br /&gt;
== svcCreateSharedMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || [[#Permission]] || LocalPerm&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || RemotePerm&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;SharedMemory&amp;gt; || MemHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Other perm can be used to enforce permission 1, 3, or 0x10000000 if don&#039;t care.&lt;br /&gt;
&lt;br /&gt;
== svcMapTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || Handle&amp;lt;TransferMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The newly mapped pages will have [[#MemoryState]] type 0xE.&lt;br /&gt;
&lt;br /&gt;
You must pass same size and permissions as given in svcCreateMemoryMirror, otherwise error.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapTransferMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || Handle&amp;lt;TransferMemory&amp;gt; || MemHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Size must match size given in map syscall, otherwise there&#039;s an invalid-size error.&lt;br /&gt;
&lt;br /&gt;
== svcQueryPhysicalAddress ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]]|| Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || u64 || PhysAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X2 || u64 || KernelAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X3 || u64 || Size&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== svcQueryIoMapping ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || PhysAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) X1 || void* || VirtAddr&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Returns a virtual address mapped to a given IO range.&lt;br /&gt;
&lt;br /&gt;
== svcCreateDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || StartAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || EndAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || AddressSpaceHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Creates a virtual address space for binding device address spaces and returns a handle.&lt;br /&gt;
&lt;br /&gt;
dev_as_start_addr is normally set to 0 and dev_as_end_addr is normally set to 0xFFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
== svcAttachDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#DeviceName]] || DeviceId&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Attaches a device address space to a [[#DeviceName|device]].&lt;br /&gt;
&lt;br /&gt;
== svcDetachDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || [[#DeviceName]] || DeviceId&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Detaches a device address space from a [[#DeviceName|device]].&lt;br /&gt;
&lt;br /&gt;
== svcMapDeviceAddressSpaceByForce ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps an attached device address space to an userspace address.&lt;br /&gt;
&lt;br /&gt;
dev_map_addr is the userspace destination address, while dev_as_addr is the source address between dev_as_start_addr and dev_as_end_addr (passed to [[#svcCreateDeviceAddressSpace]]).&lt;br /&gt;
&lt;br /&gt;
The userspace destination address must have the [[SVC#MemoryState|MapDeviceAllowed]] bit set. Bit [[SVC#MemoryAttribute|IsDeviceMapped]] will be set after mapping.&lt;br /&gt;
&lt;br /&gt;
== svcMapDeviceAddressSpaceAligned ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W5 || [[#Permission]] || Permissions&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Maps an attached device address space to an userspace address.&lt;br /&gt;
&lt;br /&gt;
Same as [[#svcMapDeviceAddressSpaceByForce]], but the userspace destination address must have the [[SVC#MemoryState|MapDeviceAlignedAllowed]] bit set instead.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapDeviceAddressSpace ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;DeviceAddressSpace&amp;gt; || DeviceAsHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || DeviceAsSize&lt;br /&gt;
|-&lt;br /&gt;
| (In) X4 || u64 || DeviceAsAddr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Unmaps an attached device address space from an userspace address.&lt;br /&gt;
&lt;br /&gt;
== svcSetProcessMemoryPermission ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (In) W3 || void* || Perm&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This sets the memory permissions for the specified memory with the supplied process handle.&lt;br /&gt;
&lt;br /&gt;
This throws an error(0xD801) when the input perm is &amp;gt;0x5, hence -WX and RWX are not allowed.&lt;br /&gt;
&lt;br /&gt;
== svcMapProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maps the src address from the supplied process handle into the current process.&lt;br /&gt;
&lt;br /&gt;
This allows mapping code and rodata with RW- permission.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || void* || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps what was mapped by [[#svcMapProcessMemory]].&lt;br /&gt;
&lt;br /&gt;
== svcQueryProcessMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X0 || [[#MemoryInfo]]* || MemInfoPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) W2 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Addr&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || PageInfo || PageInfo&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Equivalent to [[#svcQueryMemory]] except takes a process handle.&lt;br /&gt;
&lt;br /&gt;
== svcMapProcessCodeMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes a process handle, and maps normal heap in that process as executable code in that process. Used when loading NROs. This does not support using the current-process handle alias.&lt;br /&gt;
&lt;br /&gt;
== svcUnmapProcessCodeMemory ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || u64 || DstAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || SrcAddr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || Size&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unmaps what was mapped by [[#svcMapProcessCodeMemory]].&lt;br /&gt;
&lt;br /&gt;
== svcCreateProcess ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) X1 || [[#CreateProcessInfo]]* || InfoPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X2 || u64 || CapabilitiesPtr&lt;br /&gt;
|-&lt;br /&gt;
| (In) X3 || u64 || CapabilitiesNum&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes a [[#CreateProcessInfo]] as input.&lt;br /&gt;
&lt;br /&gt;
== svcGetProcessInfo ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: inline-block;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument || Type || Name&lt;br /&gt;
|-&lt;br /&gt;
| (In) W0 || Handle&amp;lt;Process&amp;gt; || ProcessHandle&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W0 || [[#Result]] || Ret&lt;br /&gt;
|-&lt;br /&gt;
| (Out) W1 || [[#ProcessState]] || State&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns an enum with value 0-7.&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
[2.0.0+] Exactly 6 debug SVCs require that [[SPL_services#GetConfig|IsDebugMode]] is non-zero. Error 0x4201 is returned otherwise.&lt;br /&gt;
* svcBreakDebugProcess&lt;br /&gt;
* svcContinueDebugEvent&lt;br /&gt;
* svcWriteDebugProcessMemory&lt;br /&gt;
* svcSetDebugThreadContext&lt;br /&gt;
* svcTerminateDebugProcess&lt;br /&gt;
* svcSetHardwareBreakPoint&lt;br /&gt;
&lt;br /&gt;
svcDebugActiveProcess stops execution of the target process, the normal method for resuming it requires svcContinueDebugEvent(see above). Closing the debug handle also results in execution being resumed.&lt;br /&gt;
&lt;br /&gt;
= Enum/Structures =&lt;br /&gt;
== ThreadContextRequestFlags ==&lt;br /&gt;
Bitfield of one of more of these:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || NormalContext&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 8 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DeviceName ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DeviceName_AFI&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DeviceName_AVPC&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DeviceName_DC&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DeviceName_DCB&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DeviceName_HC&lt;br /&gt;
|-&lt;br /&gt;
| 5 || DeviceName_HDA&lt;br /&gt;
|-&lt;br /&gt;
| 6 || DeviceName_ISP2&lt;br /&gt;
|-&lt;br /&gt;
| 7 || DeviceName_MSENCNVENC&lt;br /&gt;
|-&lt;br /&gt;
| 8 || DeviceName_NV&lt;br /&gt;
|-&lt;br /&gt;
| 9 || DeviceName_NV2&lt;br /&gt;
|-&lt;br /&gt;
| 10 || DeviceName_PPCS&lt;br /&gt;
|-&lt;br /&gt;
| 11 || DeviceName_SATA&lt;br /&gt;
|-&lt;br /&gt;
| 12 || DeviceName_VI&lt;br /&gt;
|-&lt;br /&gt;
| 13 || DeviceName_VIC&lt;br /&gt;
|-&lt;br /&gt;
| 14 || DeviceName_XUSB_HOST&lt;br /&gt;
|-&lt;br /&gt;
| 15 || DeviceName_XUSB_DEV&lt;br /&gt;
|-&lt;br /&gt;
| 16 || DeviceName_TSEC&lt;br /&gt;
|-&lt;br /&gt;
| 17 || DeviceName_PPCS1&lt;br /&gt;
|-&lt;br /&gt;
| 18 || DeviceName_DC1&lt;br /&gt;
|-&lt;br /&gt;
| 19 || DeviceName_SDMMC1A&lt;br /&gt;
|-&lt;br /&gt;
| 20 || DeviceName_SDMMC2A&lt;br /&gt;
|-&lt;br /&gt;
| 21 || DeviceName_SDMMC3A&lt;br /&gt;
|-&lt;br /&gt;
| 22 || DeviceName_SDMMC4A&lt;br /&gt;
|-&lt;br /&gt;
| 23 || DeviceName_ISP2B&lt;br /&gt;
|-&lt;br /&gt;
| 24 || DeviceName_GPU&lt;br /&gt;
|-&lt;br /&gt;
| 25 || DeviceName_GPUB&lt;br /&gt;
|-&lt;br /&gt;
| 26 || DeviceName_PPCS2&lt;br /&gt;
|-&lt;br /&gt;
| 27 || DeviceName_NVDEC&lt;br /&gt;
|-&lt;br /&gt;
| 28 || DeviceName_APE&lt;br /&gt;
|-&lt;br /&gt;
| 29 || DeviceName_SE&lt;br /&gt;
|-&lt;br /&gt;
| 30 || DeviceName_NVJPG&lt;br /&gt;
|-&lt;br /&gt;
| 31 || DeviceName_HC1&lt;br /&gt;
|-&lt;br /&gt;
| 32 || DeviceName_SE1&lt;br /&gt;
|-&lt;br /&gt;
| 33 || DeviceName_AXIAP&lt;br /&gt;
|-&lt;br /&gt;
| 34 || DeviceName_ETR&lt;br /&gt;
|-&lt;br /&gt;
| 35 || DeviceName_TSECB&lt;br /&gt;
|-&lt;br /&gt;
| 36 || DeviceName_TSEC1&lt;br /&gt;
|-&lt;br /&gt;
| 37 || DeviceName_TSECB1&lt;br /&gt;
|-&lt;br /&gt;
| 38 || DeviceName_NVDEC1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MapJitOperation ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || MapJitOperation_MapOwner&lt;br /&gt;
|-&lt;br /&gt;
| 1 || MapJitOperation_MapSlave&lt;br /&gt;
|-&lt;br /&gt;
| 2 || MapJitOperation_UnmapOwner&lt;br /&gt;
|-&lt;br /&gt;
| 3 || MapJitOperation_UnmapSlave&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== LimitableResource ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || LimitableResource_Memory&lt;br /&gt;
|-&lt;br /&gt;
| 1 || LimitableResource_Threads&lt;br /&gt;
|-&lt;br /&gt;
| 2 || LimitableResource_Events&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LimitableResource_TransferMemories&lt;br /&gt;
|-&lt;br /&gt;
| 4 || LimitableResource_Sessions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProcessEvent ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ProcessEvent_Created&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ProcessEvent_DebugAttached&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ProcessEvent_DebugDetached&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ProcessEvent_Crashed&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ProcessEvent_Running&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ProcessEvent_Exiting&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ProcessEvent_Exited&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ProcessEvent_DebugSuspended&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DebugThreadParam ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DebugThreadParam_ActualPriority&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DebugThreadParam_CpuCore&lt;br /&gt;
|-&lt;br /&gt;
| 3 ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DebugThreadParam_CoreMask&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CreateProcessInfo ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 12 || || ProcessName (doesn&#039;t have to be null-terminated)&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 4 || || ProcessCategory (0: regular title, 1: kernel built-in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 8 || || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 8 || || CodeAddr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 4 || || CodeNumPages&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 4 || || MmuFlags&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit0 || IsAarch64&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit3-1 || [[#AddressSpaceType]]&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit4 ||&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit5 || EnableAslr&lt;br /&gt;
|-&lt;br /&gt;
| || || Bit6 || IsSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 4 || || ResourceLimitHandle&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 4 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== AddressSpaceType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Type || Name || Width || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Normal_32Bit || 32 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Normal_36Bit || 36 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || WithoutMap_32Bit || 32 || Appears to be missing map region [?]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [2.0.0+] Normal_39Bit || 39 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryInfo ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 8 || BaseAddress&lt;br /&gt;
|-&lt;br /&gt;
| 8 || 8 || Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 4 || MemoryType: lower 8 bits of [[#MemoryState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 4 || [[#MemoryAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 4 || Permission (bit0: R, bit1: W, bit2: X)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 4 || IpcRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 4 || DeviceRefCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 4 || Padding: always zero&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryAttribute ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || IsBorrowed&lt;br /&gt;
|-&lt;br /&gt;
| 1 || IsIpcMapped: when IpcRefCount &amp;gt; 0.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || IsDeviceMapped: when DeviceRefCount &amp;gt; 0.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsUncached&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== MemoryState ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-0 || Type&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#svcSetMemoryPermission|PermissionChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ForceReadWritableByDebugSyscalls&lt;br /&gt;
|-&lt;br /&gt;
| 10 || IpcSendAllowed_Type0&lt;br /&gt;
|-&lt;br /&gt;
| 11 || IpcSendAllowed_Type3&lt;br /&gt;
|-&lt;br /&gt;
| 12 || IpcSendAllowed_Type1&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#svcSetProcessMemoryPermission|ProcessPermissionChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#svcMapMemory|MapAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#svcUnmapProcessCodeMemory|UnmapProcessCodeMemoryAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#svcCreateTransferMemory|TransferMemoryAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#svcQueryPhysicalAddress|QueryPhysicalAddressAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || MapDeviceAllowed ([[#svcMapDeviceAddressSpace]] and [[#svcMapDeviceAddressSpaceByForce]])&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#svcMapDeviceAddressSpaceAligned|MapDeviceAlignedAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#svcSendSyncRequestWithUserBuffer|IpcBufferAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || IsPoolAllocated/IsReferenceCounted&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [[#svcMapProcessMemory|MapProcessAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [[#svcSetMemoryAttribute|AttributeChangeAllowed]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [4.0.0+] JitMemoryAllowed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Type || Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000000 || MemoryType_Unmapped ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002001 || MemoryType_Io || Mapped by kernel capability parsing in [[#svcCreateProcess]]. &lt;br /&gt;
|-&lt;br /&gt;
| 0x00042002 || MemoryType_Normal || Mapped by kernel capability parsing in [[#svcCreateProcess]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00DC7E03 || MemoryType_CodeStatic || Mapped during [[#svcCreateProcess]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x01FEBD04&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x03FEBD04&lt;br /&gt;
|| MemoryType_CodeMutable || Transition from 0xDC7E03 performed by [[#svcSetProcessMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
0x017EBD05&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x037EBD05&lt;br /&gt;
|| MemoryType_Heap || Mapped using [[#svcSetHeapSize]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402006 || MemoryType_SharedMemory || Mapped using [[#svcMapSharedMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00482907 || [1.0.0] MemoryType_WeirdMappedMemory || Mapped using [[#svcMapMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00DD7E08 || MemoryType_ModuleCodeStatic || Mapped using [[#svcMapProcessCodeMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x01FFBD09&lt;br /&gt;
&lt;br /&gt;
[4.0.0+]&lt;br /&gt;
&lt;br /&gt;
0x03FFBD09&lt;br /&gt;
|| MemoryType_ModuleCodeMutable || Transition from 0xDD7E08 performed by [[#svcSetProcessMemoryPermission]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3C0A || [[IPC_Marshalling|MemoryType_IpcBuffer0]] || IPC buffers with descriptor flags=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3C0B || MemoryType_MappedMemory || Mapped using [[#svcMapMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040200C || [[Thread Local Storage|MemoryType_ThreadLocal]] || Mapped during [[#svcCreateThread]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x015C3C0D || MemoryType_TransferMemoryIsolated || Mapped using [[#svcMapTransferMemory]] when the owning process has perm=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C380E || MemoryType_TransferMemory || Mapped using [[#svcMapTransferMemory]] when the owning process has perm!=0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040380F || MemoryType_ProcessMemory || Mapped using [[#svcMapProcessMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000010 || MemoryType_Reserved ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x005C3811 || [[IPC_Marshalling|MemoryType_IpcBuffer1]] || IPC buffers with descriptor flags=1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x004C2812 || [[IPC_Marshalling|MemoryType_IpcBuffer3]] || IPC buffers with descriptor flags=3.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00002013 || MemoryType_KernelStack || Mapped in kernel during [[#svcCreateThread]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402214 || [4.0.0+] MemoryType_JitReadOnly || Mapped in kernel during [[#svcMapJitMemory]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00402015 || [4.0.0+] MemoryType_JitWritable || Mapped in kernel during [[#svcMapJitMemory]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContinueDebugFlags ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bit || Bitmask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || CancelSynchronization (only if ResumeAllThreads is set; cancels with error 0x6C01)&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || SwallowException&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 4 || ResumeAllThreads&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DebugEventInfo ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || u32 || EventType&lt;br /&gt;
|-&lt;br /&gt;
| 4 || u32 || Flags (bit0: NeedsContinue)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || || PerTypeSpecifics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AttachProcess specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || TitleId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || ProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || char[12] || ProcessName&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || u32 || MmuFlags&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
AttachThread specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || ThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || TlsPtr&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u64 || Entrypoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exit specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || Type (0=PausedThread, 1=RunningThread, 2=TerminatedProcess)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Exception specific:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || u64 || ExceptionType&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || u64 || FaultRegister&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || || PerExceptionSpecifics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugEventType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DebugEvent_AttachProcess&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DebugEvent_AttachThread&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || DebugEvent_Exit&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DebugEvent_Exception&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DebugExceptionType ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Exception_UndefinedInstruction&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Exception_InstructionAbort&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Exception_DataAbortMisc&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Exception_PcSpAlignmentFault&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Exception_DebuggerAttached&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Exception_BreakPoint&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Exception_UserBreak&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Exception_DebuggerBreak&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Exception_BadSvcId&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
UndefinedInstruction specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || Opcode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BreakPoint specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || IsWatchpoint&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
UserBreak specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || Info0&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || u64 || Info1&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || u64 || Info2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
BadSvcId specifics:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset || Length || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || u32 || SvcId&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Exception handling =&lt;br /&gt;
There is userland code for handling exceptions, however this doesn&#039;t seem to be executed on retail mode.&lt;br /&gt;
&lt;br /&gt;
When a usermode exception occurs, it jumps to the main code binary entrypoint (main_binary_address + 0 == &#039;&#039;&#039;_start&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
During normal boot &#039;&#039;&#039;_start&#039;&#039;&#039; is invoked with X0=0 and X1=main_thread_handle (triggering normal crt0 setup).&lt;br /&gt;
During an usermode exception &#039;&#039;&#039;_start&#039;&#039;&#039; is invoked with X0=exception_info0_ptr and X1=exception_info1_ptr instead.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;_start&#039;&#039;&#039; method determines whether to boot normally or handle an exception if X0 is set to 0 or not.&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NPDM&amp;diff=3860</id>
		<title>NPDM</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NPDM&amp;diff=3860"/>
		<updated>2018-02-25T02:11:35Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: /* ACID */ ARMS has this set to 0x3 in its NPDM&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the Switch equivalent of 3DS [https://www.3dbrew.org/wiki/NCCH/Extended_Header exheader]. This is the file with extension &amp;quot;.npdm&amp;quot; in {Switch ExeFS}. The size of this file varies.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x80&lt;br /&gt;
| META&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;Varies&amp;gt;&lt;br /&gt;
| ACID&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;See META&amp;gt;&lt;br /&gt;
| &amp;lt;See META&amp;gt;&lt;br /&gt;
| ACI0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= META =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic &amp;quot;META&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 1&lt;br /&gt;
| Flags, bit0: 64-bit instructions, bits1-3: address space width (1=64-bit, 2=32-bit). Needs to be &amp;lt;= 0xF&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 1&lt;br /&gt;
| MainThreadPrio&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 1&lt;br /&gt;
| DefaultCpuId&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| ProcessCategory (0: regular title, 1: kernel built-in). Should be 0 here.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| MainStackSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| ?&lt;br /&gt;
| Title name&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACI0]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACI0]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACID]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACID]] size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ACID =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 signature, seems to verify the data starting at 0x100 with the size field from 0x204.&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 public key, seems to be used for the second [[NCA_Format|NCA]] signature.&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic &amp;quot;ACID&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x204&lt;br /&gt;
| 0x4&lt;br /&gt;
| s32 Size field used with the above signature(?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x208&lt;br /&gt;
| 0x4&lt;br /&gt;
| Zeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Flags. Bit0 must be 1 on retail, on devunit 0 is also allowed. Bit1 is unknown, set 1 for ARMS?&lt;br /&gt;
|-&lt;br /&gt;
| 0x210&lt;br /&gt;
| 0x8&lt;br /&gt;
| TitleIdRange_Min&lt;br /&gt;
|-&lt;br /&gt;
| 0x218&lt;br /&gt;
| 0x8&lt;br /&gt;
| TitleIdRange_Max&lt;br /&gt;
|-&lt;br /&gt;
| 0x220&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FS Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x224&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FS Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x228&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Service Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x22C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Service Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x230&lt;br /&gt;
| 4&lt;br /&gt;
| [[#Kernel Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x234&lt;br /&gt;
| 4&lt;br /&gt;
| [[#Kernel Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x238&lt;br /&gt;
| 0x8&lt;br /&gt;
| Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ACI0 =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic &amp;quot;ACI0&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| Zeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title id&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FS Access Header]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FS Access Header]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Service Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Service Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 4&lt;br /&gt;
| [[#Kernel Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 4&lt;br /&gt;
| [[#Kernel Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x8&lt;br /&gt;
| Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FS Access Header =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version? Always 1. Must be non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x3&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| Permissions bitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Usually 0x1C&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Usually 0x0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Usually 0x1C&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Usually 0x0&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FS Access Control =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version? Always 1. Must be non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x3&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| Permissions bitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x20&lt;br /&gt;
| Usually all zeroes for applications&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Filesystem_services#Permissions|Permissions]] bitmask:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| MountContent* is accessible when set.&lt;br /&gt;
|-&lt;br /&gt;
| 34&lt;br /&gt;
| Enables access to [[Filesystem_services|Bis]] partitionID 27 and 28?&lt;br /&gt;
|-&lt;br /&gt;
| 63&lt;br /&gt;
| Enables access to everything: all [[Filesystem_services#Permissions|permission-types]] which check a bitmask have this bit set.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For bit62 in permissions, see [[SPL_services#GetConfig|here]].&lt;br /&gt;
&lt;br /&gt;
Web-applets permissions:&lt;br /&gt;
* &amp;quot;LibAppletWeb&amp;quot; and &amp;quot;LibAppletOff&amp;quot; have same access control: bit0 and bit3 set, and bit62 set.&lt;br /&gt;
* Rest of the web-applets: Same as above except bit0 isn&#039;t set.&lt;br /&gt;
&lt;br /&gt;
= Service Access Control =&lt;br /&gt;
This is a list of [[Services_API|service]]-name strings which the title has access to, with the following structure:&lt;br /&gt;
  +0: control_byte&lt;br /&gt;
  +1: {service-name without nul-terminator}&lt;br /&gt;
&lt;br /&gt;
Bitmask 0x0F in control_byte is the {length of the service-name without nul-terminator} - 1.&lt;br /&gt;
&lt;br /&gt;
Bitmask 0x80 in control_byte means service is allowed to be registered.&lt;br /&gt;
&lt;br /&gt;
The service string can contain a wildcard &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; character.&lt;br /&gt;
&lt;br /&gt;
= Kernel Access Control =&lt;br /&gt;
On Switch, descriptors are identified by pattern 01..11 in low bits.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pattern of lower bits&lt;br /&gt;
! Lowest clear bitmask/bit&lt;br /&gt;
! Type&lt;br /&gt;
! Fields&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxxxxx0111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit3&lt;br /&gt;
| KernelFlags&lt;br /&gt;
| Bit31-24: Highest allowed cpu id, bit23-16: Lowest allowed cpu id, bit15-10: Highest allowed thread prio, bit9-4: Lowest allowed thread prio&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxxxx01111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit4&lt;br /&gt;
| SyscallMask&lt;br /&gt;
| Bits 29-31: Syscall mask table index; Bits 5-28: Mask&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxx0111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit6&lt;br /&gt;
| MapIoOrNormalRange&lt;br /&gt;
| Bits 7-30: Alternating start page and number of pages, bit31: Alternating read-only flag then MemoryAttribute 0x2001/0x42002 selector flag&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxx01111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit7&lt;br /&gt;
| MapNormalPage (RW)&lt;br /&gt;
| Bits 8-31: Page&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxx011111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit11&lt;br /&gt;
| InterruptPair&lt;br /&gt;
| Bits 12-21: Irq0, bits 20-31: Irq1, 0x3FF means empty.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxx01111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit13&lt;br /&gt;
| ApplicationType&lt;br /&gt;
| Bit16-14: ApplicationType (0=sysmodule, 1=application, 2=applet), bit16 ignored. Parsed by [[Process Manager services]]. Defaults to 0 if descriptor doesn&#039;t exist. Can only run 1 application at a time.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bx011111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit14&lt;br /&gt;
| KernelReleaseVersion&lt;br /&gt;
| Bits 15-X: Version. The raw descriptor is compared with 0x80000, when less than an error is returned. This is equivalent to comparing the bits starting at bit15 with 0x10. This enforces a minimum required version, not a maximum.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0b0111111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit15&lt;br /&gt;
| HandleTableSize&lt;br /&gt;
| Bit25-16: Number of handles the table shall fit.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0b1111111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit16&lt;br /&gt;
| DebugFlags&lt;br /&gt;
| Bit17: can be debugged, bit18: can debug others&lt;br /&gt;
|-&lt;br /&gt;
| All ones&lt;br /&gt;
| &lt;br /&gt;
| Ignored&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Mapping restrictions ==&lt;br /&gt;
The physaddr range 0x80060000-0x2000000000 is not allowed to be mapped as IO.&lt;br /&gt;
The physaddr range 0x80000000-0x2000000000 is not allowed to be mapped as Normal.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] The range for IO was changed into 0x80060000-0x81D3FFFF.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] A blacklist was added for IO and Normal mappings:&lt;br /&gt;
* 0x50040000-0x50060000 (ARM, Interrupt Controller)&lt;br /&gt;
* 0x6000F000 (Exception Vectors)&lt;br /&gt;
* 0x6001DC00-0x6001E000 (IPATCH)&lt;br /&gt;
* 0x7000E000 (RTC/PMC)&lt;br /&gt;
* 0x70019000 (MC)&lt;br /&gt;
* 0x7001C000 (MC0)&lt;br /&gt;
* 0x7001D000 (MC1)&lt;br /&gt;
&lt;br /&gt;
== Kernel versions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firmware || Kernel Version || Minimum Allowed&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || 5.0.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0 || 6.1.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0 || 7.4.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.2 || 7.4.0 || 3.0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit31-19: Major version&lt;br /&gt;
Bit18-15: Minor version&lt;br /&gt;
Bit14-0: Zeroes&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NPDM&amp;diff=3858</id>
		<title>NPDM</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NPDM&amp;diff=3858"/>
		<updated>2018-02-25T01:54:37Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the Switch equivalent of 3DS [https://www.3dbrew.org/wiki/NCCH/Extended_Header exheader]. This is the file with extension &amp;quot;.npdm&amp;quot; in {Switch ExeFS}. The size of this file varies.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x80&lt;br /&gt;
| META&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| &amp;lt;Varies&amp;gt;&lt;br /&gt;
| ACID&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;See META&amp;gt;&lt;br /&gt;
| &amp;lt;See META&amp;gt;&lt;br /&gt;
| ACI0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= META =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic &amp;quot;META&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 1&lt;br /&gt;
| Flags, bit0: 64-bit instructions, bits1-3: address space width (1=64-bit, 2=32-bit). Needs to be &amp;lt;= 0xF&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 1&lt;br /&gt;
| MainThreadPrio&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 1&lt;br /&gt;
| DefaultCpuId&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| ProcessCategory (0: regular title, 1: kernel built-in). Should be 0 here.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| MainStackSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| ?&lt;br /&gt;
| Title name&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACI0]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x74&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACI0]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x78&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACID]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#ACID]] size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ACID =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 signature, seems to verify the data starting at 0x100 with the size field from 0x204.&lt;br /&gt;
|-&lt;br /&gt;
| 0x100&lt;br /&gt;
| 0x100&lt;br /&gt;
| RSA-2048 public key, seems to be used for the second [[NCA_Format|NCA]] signature.&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic &amp;quot;ACID&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x204&lt;br /&gt;
| 0x4&lt;br /&gt;
| s32 Size field used with the above signature(?).&lt;br /&gt;
|-&lt;br /&gt;
| 0x208&lt;br /&gt;
| 0x4&lt;br /&gt;
| Zeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Retail flag. Must be 1 on retail, on devunit 0 is also allowed.&lt;br /&gt;
|-&lt;br /&gt;
| 0x210&lt;br /&gt;
| 0x8&lt;br /&gt;
| TitleIdRange_Min&lt;br /&gt;
|-&lt;br /&gt;
| 0x218&lt;br /&gt;
| 0x8&lt;br /&gt;
| TitleIdRange_Max&lt;br /&gt;
|-&lt;br /&gt;
| 0x220&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FS Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x224&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FS Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x228&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Service Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x22C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Service Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x230&lt;br /&gt;
| 4&lt;br /&gt;
| [[#Kernel Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x234&lt;br /&gt;
| 4&lt;br /&gt;
| [[#Kernel Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x238&lt;br /&gt;
| 0x8&lt;br /&gt;
| Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ACI0 =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic &amp;quot;ACI0&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0xC&lt;br /&gt;
| Zeroes&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Title id&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FS Access Header]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#FS Access Header]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Service Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[#Service Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 4&lt;br /&gt;
| [[#Kernel Access Control]] offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 4&lt;br /&gt;
| [[#Kernel Access Control]] size&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x8&lt;br /&gt;
| Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FS Access Header =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version? Always 1. Must be non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x3&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| Permissions bitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Usually 0x1C&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| Usually 0x0&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| Usually 0x1C&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Usually 0x0&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= FS Access Control =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Version? Always 1. Must be non-zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x3&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| Permissions bitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x20&lt;br /&gt;
| Usually all zeroes for applications&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Filesystem_services#Permissions|Permissions]] bitmask:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| MountContent* is accessible when set.&lt;br /&gt;
|-&lt;br /&gt;
| 34&lt;br /&gt;
| Enables access to [[Filesystem_services|Bis]] partitionID 27 and 28?&lt;br /&gt;
|-&lt;br /&gt;
| 63&lt;br /&gt;
| Enables access to everything: all [[Filesystem_services#Permissions|permission-types]] which check a bitmask have this bit set.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For bit62 in permissions, see [[SPL_services#GetConfig|here]].&lt;br /&gt;
&lt;br /&gt;
Web-applets permissions:&lt;br /&gt;
* &amp;quot;LibAppletWeb&amp;quot; and &amp;quot;LibAppletOff&amp;quot; have same access control: bit0 and bit3 set, and bit62 set.&lt;br /&gt;
* Rest of the web-applets: Same as above except bit0 isn&#039;t set.&lt;br /&gt;
&lt;br /&gt;
= Service Access Control =&lt;br /&gt;
This is a list of [[Services_API|service]]-name strings which the title has access to, with the following structure:&lt;br /&gt;
  +0: control_byte&lt;br /&gt;
  +1: {service-name without nul-terminator}&lt;br /&gt;
&lt;br /&gt;
Bitmask 0x0F in control_byte is the {length of the service-name without nul-terminator} - 1.&lt;br /&gt;
&lt;br /&gt;
Bitmask 0x80 in control_byte means service is allowed to be registered.&lt;br /&gt;
&lt;br /&gt;
The service string can contain a wildcard &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; character.&lt;br /&gt;
&lt;br /&gt;
= Kernel Access Control =&lt;br /&gt;
On Switch, descriptors are identified by pattern 01..11 in low bits.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pattern of lower bits&lt;br /&gt;
! Lowest clear bitmask/bit&lt;br /&gt;
! Type&lt;br /&gt;
! Fields&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxxxxx0111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit3&lt;br /&gt;
| KernelFlags&lt;br /&gt;
| Bit31-24: Highest allowed cpu id, bit23-16: Lowest allowed cpu id, bit15-10: Highest allowed thread prio, bit9-4: Lowest allowed thread prio&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxxxx01111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit4&lt;br /&gt;
| SyscallMask&lt;br /&gt;
| Bits 29-31: Syscall mask table index; Bits 5-28: Mask&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxxx0111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit6&lt;br /&gt;
| MapIoOrNormalRange&lt;br /&gt;
| Bits 7-30: Alternating start page and number of pages, bit31: Alternating read-only flag then MemoryAttribute 0x2001/0x42002 selector flag&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxxxxxx01111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit7&lt;br /&gt;
| MapNormalPage (RW)&lt;br /&gt;
| Bits 8-31: Page&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxxxx011111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit11&lt;br /&gt;
| InterruptPair&lt;br /&gt;
| Bits 12-21: Irq0, bits 20-31: Irq1, 0x3FF means empty.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bxx01111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit13&lt;br /&gt;
| ApplicationType&lt;br /&gt;
| Bit16-14: ApplicationType (0=sysmodule, 1=application, 2=applet), bit16 ignored. Parsed by [[Process Manager services]]. Defaults to 0 if descriptor doesn&#039;t exist. Can only run 1 application at a time.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0bx011111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit14&lt;br /&gt;
| KernelReleaseVersion&lt;br /&gt;
| Bits 15-X: Version. The raw descriptor is compared with 0x80000, when less than an error is returned. This is equivalent to comparing the bits starting at bit15 with 0x10. This enforces a minimum required version, not a maximum.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0b0111111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit15&lt;br /&gt;
| HandleTableSize&lt;br /&gt;
| Bit25-16: Number of handles the table shall fit.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0b1111111111111111&amp;lt;/code&amp;gt;&lt;br /&gt;
| Bit16&lt;br /&gt;
| DebugFlags&lt;br /&gt;
| Bit17: can be debugged, bit18: can debug others&lt;br /&gt;
|-&lt;br /&gt;
| All ones&lt;br /&gt;
| &lt;br /&gt;
| Ignored&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Mapping restrictions ==&lt;br /&gt;
The physaddr range 0x80060000-0x2000000000 is not allowed to be mapped as IO.&lt;br /&gt;
The physaddr range 0x80000000-0x2000000000 is not allowed to be mapped as Normal.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] The range for IO was changed into 0x80060000-0x81D3FFFF.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] A blacklist was added for IO and Normal mappings:&lt;br /&gt;
* 0x50040000-0x50060000 (ARM, Interrupt Controller)&lt;br /&gt;
* 0x6000F000 (Exception Vectors)&lt;br /&gt;
* 0x6001DC00-0x6001E000 (IPATCH)&lt;br /&gt;
* 0x7000E000 (RTC/PMC)&lt;br /&gt;
* 0x70019000 (MC)&lt;br /&gt;
* 0x7001C000 (MC0)&lt;br /&gt;
* 0x7001D000 (MC1)&lt;br /&gt;
&lt;br /&gt;
== Kernel versions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firmware || Kernel Version || Minimum Allowed&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0 || 5.0.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0 || 6.1.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0 || 7.4.0 || 3.0.0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.2 || 7.4.0 || 3.0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bit31-19: Major version&lt;br /&gt;
Bit18-15: Minor version&lt;br /&gt;
Bit14-0: Zeroes&lt;/div&gt;</summary>
		<author><name>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NV_services&amp;diff=3802</id>
		<title>NV services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NV_services&amp;diff=3802"/>
		<updated>2018-02-20T04:22:32Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: /* /dev/nverpt-ctrl */ someone&amp;#039;s probably going to have to backtrack this but it&amp;#039;s here on 3.0.0&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_CTX_SIZE ===&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>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NV_services&amp;diff=3799</id>
		<title>NV services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NV_services&amp;diff=3799"/>
		<updated>2018-02-20T01:45:13Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: /* /dev/nvsched-ctrl */&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 4.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_CTX_SIZE ===&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>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NV_services&amp;diff=3751</id>
		<title>NV services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NV_services&amp;diff=3751"/>
		<updated>2018-02-15T23:40:11Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: &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 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000602 || - || 0 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40180603 || In || 1056 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40180604 || In || 60 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40080605 || In || 60 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80080606 || Out || 60 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80080607 || Out || 60 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40180608 || In || 24 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40100609 || In || 16 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4010060A || In || 16 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4008060B || In || 8 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x8001060C || Out || 1 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x8010060D || Out || 16 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x400C060E || In || 12 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4008060F || In || 8 || ||&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 4.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_CTX_SIZE ===&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>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NV_services&amp;diff=3750</id>
		<title>NV services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NV_services&amp;diff=3750"/>
		<updated>2018-02-15T23:10:50Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: Neato burrito.&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 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000602 || - || 0 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40180603 || In || 1056 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40180604 || In || 60 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40080605 || In || 60 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80080606 || Out || 60 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80080607 || Out || 60 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40180608 || In || 24 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40100609 || In || 16 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4010060A || In || 16 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4008060B || In || 8 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x8001060C || Out || 1 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x8010060D || Out || 16 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x400C060E || In || 12 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4008060F || In || 8 || ||&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 4.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-open ==&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_CTX_SIZE ===&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>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NV_services&amp;diff=3696</id>
		<title>NV services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NV_services&amp;diff=3696"/>
		<updated>2018-02-10T02:11:51Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: /* Errors */ 0x3000E isn&amp;#039;t a valid error, nvm&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 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000602 || - || 0 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40180603 || In || 1056 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40180604 || In || 60 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40080605 || In || 60 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80080606 || Out || 60 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80080607 || Out || 60 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40180608 || In || 24 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40100609 || In || 16 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4010060A || In || 16 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4008060B || In || 8 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x8001060C || Out || 1 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x8010060D || Out || 16 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x400C060E || In || 12 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4008060F || In || 8 || ||&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 4.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;
Not accessible, but there is code to invoke it.&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-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_CTX_SIZE ===&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>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NV_services&amp;diff=3695</id>
		<title>NV services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NV_services&amp;diff=3695"/>
		<updated>2018-02-10T02:00:30Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: /* Errors */ Actual names&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 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000602 || - || 0 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40180603 || In || 1056 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40180604 || In || 60 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40080605 || In || 60 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80080606 || Out || 60 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80080607 || Out || 60 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40180608 || In || 24 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40100609 || In || 16 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4010060A || In || 16 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4008060B || In || 8 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x8001060C || Out || 1 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x8010060D || Out || 16 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x400C060E || In || 12 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4008060F || In || 8 || ||&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 4.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;
Not accessible, but there is code to invoke it.&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-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_CTX_SIZE ===&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;
| 0x3000E || ?&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>Shinyquagsire23</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NV_services&amp;diff=3694</id>
		<title>NV services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NV_services&amp;diff=3694"/>
		<updated>2018-02-10T01:45:39Z</updated>

		<summary type="html">&lt;p&gt;Shinyquagsire23: /* Errors */ Let&amp;#039;s just get these all in here&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 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000602 || - || 0 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40180603 || In || 1056 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40180604 || In || 60 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40080605 || In || 60 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80080606 || Out || 60 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x80080607 || Out || 60 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40180608 || In || 24 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40100609 || In || 16 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4010060A || In || 16 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4008060B || In || 8 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x8001060C || Out || 1 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x8010060D || Out || 16 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x400C060E || In || 12 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4008060F || In || 8 || ||&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 4.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;
Not accessible, but there is code to invoke it.&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-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_CTX_SIZE ===&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 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x3000E || &lt;br /&gt;
|-&lt;br /&gt;
| 0x3000F || IoctlFailed                        &lt;br /&gt;
|-&lt;br /&gt;
| 0x30010 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30013 ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA000E ||&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>Shinyquagsire23</name></author>
	</entry>
</feed>