<?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=CapNem</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=CapNem"/>
	<link rel="alternate" type="text/html" href="https://switchbrew.org/wiki/Special:Contributions/CapNem"/>
	<updated>2026-04-30T09:24:25Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=12363</id>
		<title>Product Information</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=12363"/>
		<updated>2023-05-26T01:40:08Z</updated>

		<summary type="html">&lt;p&gt;CapNem: /* Prefix */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page details miscellaneous Switch product information (serial numbers, product models, etc...).&lt;br /&gt;
&lt;br /&gt;
= Product List =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001 || Retail Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAC-002 || AC adapter&lt;br /&gt;
|-&lt;br /&gt;
| HAC-003 || Nintendo Switch Battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-004 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-005 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-006 || Joy-Con battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-007 || Dock&lt;br /&gt;
|-&lt;br /&gt;
| HAC-008 || Gamecard&lt;br /&gt;
|-&lt;br /&gt;
| HAC-009 || Gamecard case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-010 || USB charging cable also included in (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-011 || Joy-Con grip&lt;br /&gt;
|-&lt;br /&gt;
| HAC-012 || Joy-Con charge grip&lt;br /&gt;
|-&lt;br /&gt;
| HAC-013 || Pro Controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-014 || Joy-Con strap&lt;br /&gt;
|-&lt;br /&gt;
| HAC-015 || Left Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-016 || Right Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-017 || Joy-Con handle&lt;br /&gt;
|-&lt;br /&gt;
| HAC-018 || Screen protector&lt;br /&gt;
|-&lt;br /&gt;
| HAC-019 || Left Joy-Con extended battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-020 || Right Joy-Con extended battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-021 || Carrying case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-022 || Ring-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-023 || Leg Strap&lt;br /&gt;
|-&lt;br /&gt;
| HAC-024 || Poké Ball Plus controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-025 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-026 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-027 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-028 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-029 || Steelbook Gamecard case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-030 || Poké Ball Plus battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-031 || Charging stand&lt;br /&gt;
|-&lt;br /&gt;
| HAC-032 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-033 || Left NES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-034 || Right NES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-035 || Left Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-036 || Right Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-037 || Kart (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-038 || Battery for kart (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-039 || Gates (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-040 || Touch Pen (&amp;quot;Super Mario Maker 2&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-041 || Touch Pen (&amp;quot;Brain Training for Switch&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-042 || SNES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-043 || N64 controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-044 || Arrow Markers (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-045 || Sega Genesis 3 Button controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-046 || Sega Genesis 6 Button controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-047 || USB charging cable (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;) known as HAC-010 instead&lt;br /&gt;
|-&lt;br /&gt;
| HAC-048 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-049 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-050 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-051 || Nintendo Labo Toy-Con 1: Variety Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-052 || Nintendo Labo Toy-Con 2: Robot Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-053 || Nintendo Labo Toy-Con 3: Vehicle Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-054 || Nintendo Labo Toy-Con 4: VR Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-055 || Nintendo Labo Storage Box&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001(-01) || Retail Nintendo Switch Mariko console (also known as HAD[...])&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAT-001 || SDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-001(-01) || SDEV-D Nintendo Switch Mariko console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-002 || EDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-002(-01) || EDEV-D Nintendo Switch Mariko console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-003 || SDEV cradle&lt;br /&gt;
|-&lt;br /&gt;
| HAT-004 || RelayBox/RelayBox-D&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HDH-001 || Retail Nintendo Switch Lite console&lt;br /&gt;
|-&lt;br /&gt;
| HDH-002 || HDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HDH-003 || Battery&lt;br /&gt;
|-&lt;br /&gt;
| HDH-004 || Carrying case&lt;br /&gt;
|-&lt;br /&gt;
| HDH-005 || Screen protector&lt;br /&gt;
|-&lt;br /&gt;
| HDH-006 || Flip cover&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HEG-001 || Retail Nintendo Switch (OLED Model) console&lt;br /&gt;
|-&lt;br /&gt;
| HEG-002 || ADEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HEG-004 || RelayBox-A&lt;br /&gt;
|-&lt;br /&gt;
| HEG-005 || Nintendo Switch (OLED Model) HDMI cable&lt;br /&gt;
|-&lt;br /&gt;
| HEG-007 || Nintendo Switch (OLED Model) dock&lt;br /&gt;
|-&lt;br /&gt;
| HEG-021 || Nintendo Switch (OLED Model) carrying case&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Product Serial Numbers =&lt;br /&gt;
Serial numbers are composed of at least [[#Prefix|three letters]] followed by ten decimal digits. The tenth digit is a [[#Check_Digit|check digit]], meaning that it is derived from the other digits.&lt;br /&gt;
&lt;br /&gt;
== Prefix ==&lt;br /&gt;
Observed prefixes are normally as follows:&lt;br /&gt;
&lt;br /&gt;
* First letter represents the product line:&lt;br /&gt;
** &amp;quot;X&amp;quot; (NX)&lt;br /&gt;
* Second letter represents the product model:&lt;br /&gt;
** &amp;quot;A&amp;quot; (HAC-001; Nintendo Switch console)&lt;br /&gt;
** &amp;quot;B&amp;quot; (HAC-015; Left Joy-Con)&lt;br /&gt;
** &amp;quot;C&amp;quot; (HAC-016; Right Joy-Con)&lt;br /&gt;
** &amp;quot;D&amp;quot; (HAC-012; Joy-Con charge grip)&lt;br /&gt;
** &amp;quot;E&amp;quot; (HAC-013; Pro Controller)&lt;br /&gt;
** &amp;quot;F&amp;quot; (HAC-007; Dock)&lt;br /&gt;
** &amp;quot;H&amp;quot; (HAC-024; Poké Ball Plus controller)&lt;br /&gt;
** &amp;quot;J&amp;quot; (HDH-001; Nintendo Switch Lite console)&lt;br /&gt;
** &amp;quot;K&amp;quot; (HAC-001-01; Nintendo Switch Mariko console)&lt;br /&gt;
** &amp;quot;L&amp;quot; (HAC-033; Left NES controller)&lt;br /&gt;
** &amp;quot;M&amp;quot; (HAC-034; Right NES controller)&lt;br /&gt;
** &amp;quot;N&amp;quot; (HAC-035; Left Famicom controller)&lt;br /&gt;
** &amp;quot;P&amp;quot; (HAC-036; Right Famicom controller)&lt;br /&gt;
** &amp;quot;Q&amp;quot; (HAC-037; Kart for &amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
** &amp;quot;R&amp;quot; (HAC-042; SNES controller)&lt;br /&gt;
** &amp;quot;S&amp;quot; (HAC-043; N64 controller)&lt;br /&gt;
** &amp;quot;T&amp;quot; (HEG-001; Nintendo Switch (OLED Model) console)&lt;br /&gt;
** &amp;quot;V&amp;quot; (HEG-007; Nintendo Switch (OLED Model) dock)&lt;br /&gt;
** &amp;quot;X&amp;quot; (HAC-045; Sega Genesis controller)&lt;br /&gt;
** &amp;quot;Y&amp;quot; (HAT-004/HEG-004; RelayBox/RelayBox-D/RelayBox-A)&lt;br /&gt;
** &amp;quot;Z&amp;quot; (HAT-003; SDEV cradle)&lt;br /&gt;
* Third letter represents the product region:&lt;br /&gt;
** &amp;quot;C&amp;quot; (China)&lt;br /&gt;
** &amp;quot;E&amp;quot; (Europe)&lt;br /&gt;
** &amp;quot;J&amp;quot; (Japan; and Europe on old models)&lt;br /&gt;
** &amp;quot;K&amp;quot; (Korea)&lt;br /&gt;
** &amp;quot;L&amp;quot; (All; for development only)&lt;br /&gt;
** &amp;quot;W&amp;quot; (Americas)&lt;br /&gt;
* Fourth letter is optional:&lt;br /&gt;
** &amp;quot;F&amp;quot; (Factory)&lt;br /&gt;
&lt;br /&gt;
== Assembly Line ==&lt;br /&gt;
The first two digits immediately after the [[#Prefix|prefix]] represent the assembly line 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;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 00 || Unspecified&lt;br /&gt;
|-&lt;br /&gt;
| 01 || Prototype&lt;br /&gt;
|-&lt;br /&gt;
| 02 || SDEV&lt;br /&gt;
|-&lt;br /&gt;
| 03 || EDEV&lt;br /&gt;
|-&lt;br /&gt;
| 04 || DPRD&lt;br /&gt;
|-&lt;br /&gt;
| 05 || HDEV&lt;br /&gt;
|-&lt;br /&gt;
| 06 || SDEV-D&lt;br /&gt;
|-&lt;br /&gt;
| 07 || EDEV-D&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 40 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 50 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 70 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 80 || Retail Pro Controller&lt;br /&gt;
|-&lt;br /&gt;
| 90 || Refurbished&lt;br /&gt;
|-&lt;br /&gt;
| 14 || Retail Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Retail Joy-Con&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Check Digit ==&lt;br /&gt;
The check digit is an industry-standard algorithm and is calculated just like it was on the [https://www.3dbrew.org/wiki/Serials#Console_Serial_Numbers 3DS].&lt;br /&gt;
&lt;br /&gt;
To calculate the check digit of a Switch console, separate the non-check digits into &amp;quot;odd&amp;quot; and &amp;quot;even&amp;quot; groups, where the &amp;quot;odd&amp;quot; group is digits in odd-numbered positions, and the &amp;quot;even&amp;quot; group is digits in even-numbered positions. (The first digit is &amp;quot;odd&amp;quot;, with &amp;quot;first&amp;quot; representing &amp;quot;1&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
After separating the digits, add the digits in each group together. Multiply the sum of the even digits by 3, then add the sum of the odd digits. To calculate the check digit, take this value modulo 10, and if not 0, subtract from 10.&lt;br /&gt;
&lt;br /&gt;
Example: XAW10075273452&lt;br /&gt;
&lt;br /&gt;
The non-check digits are 1007527345. Separating into odd and even groups, we get the following:&lt;br /&gt;
&lt;br /&gt;
Odds: 1 + 0 + 5 + 7 + 4 = 17 Evens: 0 + 7 + 2 + 3 + 5 = 17&lt;br /&gt;
&lt;br /&gt;
Applying the algorithm, we get ((3 * 17) + 17) % 10 = 8, which is not 0, thus 10 - 8 = 2, matching the example&#039;s check digit.&lt;/div&gt;</summary>
		<author><name>CapNem</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=12342</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=12342"/>
		<updated>2023-04-28T23:07:44Z</updated>

		<summary type="html">&lt;p&gt;CapNem: /* Colors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Firmware =&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
= Protocol =&lt;br /&gt;
The Joy-Con can communicate wirelessly over Bluetooth or through the rails over UART. This uses a Nintendo proprietary protocol called &amp;quot;Nwcp&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
== NwcpPacket ==&lt;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;
| 0x5&lt;br /&gt;
| [[#HciHeader|HciHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x7&lt;br /&gt;
| [[#NwcpHeader|NwcpHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| Variable&lt;br /&gt;
| Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== HciHeader ===&lt;br /&gt;
This is a 5-byte packet header used by Broadcom&#039;s HCI Control Protocol.&lt;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;
| PacketType (always 0x19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#CommandCode|CommandCode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| GroupCode (always 0x03)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x2&lt;br /&gt;
| PacketLength&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CommandCode ====&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;
| 0x1 || SendToDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || ReceiveFromDevice&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== NwcpHeader ===&lt;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;
| [[#CommandType|CommandType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[#DeviceCommand|DeviceCommand]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| DataSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| CommandResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x1&lt;br /&gt;
| DataCrc (CRC8 over Data for DataSize bytes)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x1&lt;br /&gt;
| HeaderCrc (CRC8 over the previous 6 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== CommandType ====&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;
| 0x91 || DeviceCommandToDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x92 || Hid&lt;br /&gt;
|-&lt;br /&gt;
| 0x94 || DeviceCommandFromDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA3 || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA5 || Handshake&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DeviceCommand ==&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;
| 0x01 || Inquiry&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || WriteChargerSettings&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || ReadChargerSettings&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || IsAttachmentEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ReadWakeUpReason&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || CreateHidConnection&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || DisconnectHid&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SetHidInterval&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || GetHidInterval&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Pairing&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || UpdateUartBaudRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || Test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HidCommand ==&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;
| 0x01 || PairingOut&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || GetDeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || SetDataFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || LRButtonDetection&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Page&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Reset&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ClearPairingInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Shipment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || SerialFlashRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || SerialFlashWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SerialFlashSectorErase&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || McuReset&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || McuWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || McuResume&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || McuPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || McuPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || AttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || AttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || GetAttachmentInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || SetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || GetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || SetNotificationLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || SensorSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || SensorConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || SensorWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || SensorRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || MotorEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || WriteChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || ReadChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ExtDevWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || GetExtDevInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || ExtDevPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || ExtDevPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || ExtDevInFormatConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D || &lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || InternalAttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || InternalAttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || InternalAttachmentPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || InternalAttachmentPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A || AddButtonPlayData&lt;br /&gt;
|-&lt;br /&gt;
| 0x7B || StartStopButtonPlayData&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || Ack&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || PairingIn&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || DeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || LRButtonElapsedTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || SerialFlashData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || McuData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || AttachmentData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA9 || AttachmentInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || InternalAttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || IndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || SensorData&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 || BatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ExtDevRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 || ExtDevInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Left &amp;amp; Right Separate Joy-con ==&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Developer Kit Joy-Con || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Black / ブラック || 2015.10.16 || #313131 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
! Standard Retail Joy-Con Color || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Gray / グレー || 2017.03.03 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red / ネオンレッド || 2017.03.03 || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue / ネオンブルー || 2017.03.03 || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow / ネオンイエロー || 2017.06.16 || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green / ネオングリーン || 2017.07.21 || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink / ネオンピンク || 2017.07.21 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Red / レッド || 2017.10.27 || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Blue / ブルー || 2019.10.04 || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Purple / ネオンパープル || 2019.10.04 || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| Neon Orange / ネオンオレンジ || 2019.10.04 || #FAA005 || #0F0A00&lt;br /&gt;
|-&lt;br /&gt;
| White / ホワイト || 2021.10.08 || #E6E6E6 || #323232&lt;br /&gt;
|-&lt;br /&gt;
! Special Edition Joy-Con Color || Release || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Gray Joy-Con / Nintendo Switch グレー || 2017.03.03 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Neon-Blue Left Joy-Con / Nintendo Switch ネオンブルー・ネオンレッド || 2017.03.03 || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch Neon-Red Right Joy-Con / Nintendo Switch ネオンブルー・ネオンレッド || 2017.03.03 || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 Edition Neon-Green Left Joy-Con / スプラトゥーン2 || 2017.07.21 || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 Edition Neon-Pink Right Joy-Con / スプラトゥーン2 || 2017.07.21 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Super Mario Odyssey Edition Red Joy-Con / スーパーマリオ オデッセイ || 2017.10.27 || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate Edition Gray Joy-Con / 大乱闘スマッシュブラザーズ || 2018.11.02 || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Let&#039;s Go! Edition Eevee-Brown Left Joy-Con / ポケットモンスター Let&#039;s Go! イーブイ || 2018.11.16 || #C88C32 || #281900&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Let&#039;s Go! Edition Pikachu-Yellow Right Joy-Con / ポケットモンスター Let&#039;s Go! ピカチュウ || 2018.11.16 || #FFDC00 || #322800&lt;br /&gt;
|-&lt;br /&gt;
| *Nintendo Labo Creators Contest Edition &amp;quot;Cardboard&amp;quot;-Colored Joy-Con || 2018. (...?) || #D7AA73 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| **Dragon Quest XI S Lotto Edition Royal-Blue Joy-Con / ドラゴン クエスト XI S （ロト版） || 2019.09.27 || #1473FA || #00000F&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Edition Neon-Purple Left Joy-Con / ディズニー ツムツム フェスティバル || 2019.10.10 || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Edition Neon-Pink Right Joy-Con / ディズニー ツムツム フェスティバル || 2019.10.10 || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Edition Pastel-Green Left Joy-Con / あつまれ どうぶつの森 || 2020.03.13 || #82FF96 || #0A1E0A&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Edition Pastel-Blue Right Joy-Con / あつまれ どうぶつの森 || 2020.03.13 || #96F5F5 || #0A1E28&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Yellow Left Joy-Con / フォートナイト ワイルドキャット(山猫) || 2020.10.30 || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Dark-Blue Right Joy-Con / フォートナイト ワイルドキャット(山猫) || 2020.10.30 || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red × Blue Edition Red Joy-Con / マリオ レッド × ブルー || 2021.02.12 || #F04614 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Monster Hunter Rise Edition Gray Joy-Con / モンスターハンターライズ || 2021.03.26 || #818282 || #0E0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Dark-Blue Left Joy-Con / フォートナイト フリート フォース(力の艦隊) || 2021.06.04 || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Yellow Right Joy-Con / フォートナイト フリート フォース(力の艦隊) || 2021.06.04 || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Edition Dark-Blue Left Joy-Con / ゼルダの伝説 スカイウォードソード || 2021.07.16 || #2D50F0 || #1E0F46&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Edition Dark-Purple Right Joy-Con / ゼルダの伝説 スカイウォードソード || 2021.07.16 || #500FC8 || #00051E&lt;br /&gt;
|-&lt;br /&gt;
| Nintendo Switch OLED Edition White Joy-Con / Nintendo Switch （有機ELモデル） ホワイト || 2021.10.08 || #E6E6E6 || #323232&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 OLED Edition Blue-Gradient Left Joy-Con / （有機ELモデル） スプラトゥーン3 || 2022.08.26 || #6455F5 || #28282D&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 OLED Edition Neon-Yellow-Gradient Right Joy-Con / （有機ELモデル） スプラトゥーン3 || 2022.08.26 || #C3FA05 || #1E1E28&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Scarlet × Violet OLED Edition Scarlet Left Joy-Con / （有機ELモデル） ポケットモンスター スカーレット・バイオレット || 2022.11.04 || #F07341 || #322D1E&lt;br /&gt;
|-&lt;br /&gt;
| Pokémon: Scarlet × Violet OLED Edition Violet Right Joy-Con / （有機ELモデル） ポケットモンスター スカーレット・バイオレット || 2022.11.04 || #9650AA || #32322D&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Tears of the Kingdom Edition Gold Joy-Con / （有機ELモデル） ゼルダの伝説　ティアーズ オブ ザ キングダムエディション || 2023.04.28 || #D2BE69 || #32322D&lt;br /&gt;
|-&lt;br /&gt;
| // *(Prize Awarded for Labo Contest - No Retail) // **(Available Japan Only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Additional Links =&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>CapNem</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=11881</id>
		<title>Product Information</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=11881"/>
		<updated>2022-09-18T23:31:04Z</updated>

		<summary type="html">&lt;p&gt;CapNem: /* Assembly Line */  Added newer assembly line indexes seen on some newer controllers.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page details miscellaneous Switch product information (serial numbers, product models, etc...).&lt;br /&gt;
&lt;br /&gt;
= Product List =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001 || Retail Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAC-002 || AC adapter&lt;br /&gt;
|-&lt;br /&gt;
| HAC-003 || Nintendo Switch Battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-004 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-005 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-006 || Joy-Con battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-007 || Dock&lt;br /&gt;
|-&lt;br /&gt;
| HAC-008 || Gamecard&lt;br /&gt;
|-&lt;br /&gt;
| HAC-009 || Gamecard case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-010 || USB charging cable also included in (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-011 || Joy-Con grip&lt;br /&gt;
|-&lt;br /&gt;
| HAC-012 || Joy-Con charge grip&lt;br /&gt;
|-&lt;br /&gt;
| HAC-013 || Pro Controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-014 || Joy-Con strap&lt;br /&gt;
|-&lt;br /&gt;
| HAC-015 || Left Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-016 || Right Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-017 || Joy-Con handle&lt;br /&gt;
|-&lt;br /&gt;
| HAC-018 || Screen protector&lt;br /&gt;
|-&lt;br /&gt;
| HAC-019 || Left Joy-Con extended battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-020 || Right Joy-Con extended battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-021 || Carrying case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-022 || Ring-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-023 || Leg Strap&lt;br /&gt;
|-&lt;br /&gt;
| HAC-024 || Poké Ball Plus controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-025 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-026 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-027 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-028 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-029 || Steelbook Gamecard case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-030 || Poké Ball Plus battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-031 || Charging stand&lt;br /&gt;
|-&lt;br /&gt;
| HAC-032 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-033 || Left NES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-034 || Right NES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-035 || Left Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-036 || Right Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-037 || Kart (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-038 || Battery for kart (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-039 || Gates (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-040 || Touch Pen (&amp;quot;Super Mario Maker 2&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-041 || Touch Pen (&amp;quot;Brain Training for Switch&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-042 || SNES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-043 || N64 controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-044 || Arrow Markers (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-045 || Sega Genesis 3 Button controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-046 || Sega Genesis 6 Button controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-047 || USB charging cable (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;) known as HAC-010 instead&lt;br /&gt;
|-&lt;br /&gt;
| HAC-048 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-049 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-050 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-051 || Nintendo Labo Toy-Con 1: Variety Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-052 || Nintendo Labo Toy-Con 2: Robot Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-053 || Nintendo Labo Toy-Con 3: Vehicle Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-054 || Nintendo Labo Toy-Con 4: VR Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-055 || Nintendo Labo Storage Box&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001(-01) || Retail Nintendo Switch Mariko console (also known as HAD[...])&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAT-001 || SDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-001(-01) || SDEV-D Nintendo Switch Mariko console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-002 || EDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-002(-01) || EDEV-D Nintendo Switch Mariko console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-003 || SDEV cradle&lt;br /&gt;
|-&lt;br /&gt;
| HAT-004 || RelayBox/RelayBox-D&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HDH-001 || Retail Nintendo Switch Lite console&lt;br /&gt;
|-&lt;br /&gt;
| HDH-002 || HDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HDH-003 || Battery&lt;br /&gt;
|-&lt;br /&gt;
| HDH-004 || Carrying case&lt;br /&gt;
|-&lt;br /&gt;
| HDH-005 || Screen protector&lt;br /&gt;
|-&lt;br /&gt;
| HDH-006 || Flip cover&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HEG-001 || Retail Nintendo Switch (OLED Model) console&lt;br /&gt;
|-&lt;br /&gt;
| HEG-002 || ADEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HEG-004 || RelayBox-A&lt;br /&gt;
|-&lt;br /&gt;
| HEG-005 || Nintendo Switch (OLED Model) HDMI cable&lt;br /&gt;
|-&lt;br /&gt;
| HEG-007 || Nintendo Switch (OLED Model) dock&lt;br /&gt;
|-&lt;br /&gt;
| HEG-021 || Nintendo Switch (OLED Model) carrying case&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Product Serial Numbers =&lt;br /&gt;
Serial numbers are composed of at least [[#Prefix|three letters]] followed by ten decimal digits. The tenth digit is a [[#Check_Digit|check digit]], meaning that it is derived from the other digits.&lt;br /&gt;
&lt;br /&gt;
== Prefix ==&lt;br /&gt;
Observed prefixes are normally as follows:&lt;br /&gt;
&lt;br /&gt;
* First letter represents the product line:&lt;br /&gt;
** &amp;quot;X&amp;quot; (NX)&lt;br /&gt;
* Second letter represents the product model:&lt;br /&gt;
** &amp;quot;A&amp;quot; (HAC-001; Nintendo Switch console)&lt;br /&gt;
** &amp;quot;B&amp;quot; (HAC-015; Left Joy-Con)&lt;br /&gt;
** &amp;quot;C&amp;quot; (HAC-016; Right Joy-Con)&lt;br /&gt;
** &amp;quot;D&amp;quot; (HAC-012; Joy-Con charge grip)&lt;br /&gt;
** &amp;quot;E&amp;quot; (HAC-013; Pro Controller)&lt;br /&gt;
** &amp;quot;F&amp;quot; (HAC-007; Dock)&lt;br /&gt;
** &amp;quot;H&amp;quot; (HAC-024; Poké Ball Plus controller)&lt;br /&gt;
** &amp;quot;J&amp;quot; (HDH-001; Nintendo Switch Lite console)&lt;br /&gt;
** &amp;quot;K&amp;quot; (HAC-001-01; Nintendo Switch Mariko console)&lt;br /&gt;
** &amp;quot;L&amp;quot; (HAC-033; Left NES controller)&lt;br /&gt;
** &amp;quot;M&amp;quot; (HAC-034; Right NES controller)&lt;br /&gt;
** &amp;quot;Q&amp;quot; (HAC-037; Kart for &amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
** &amp;quot;R&amp;quot; (HAC-042; SNES controller)&lt;br /&gt;
** &amp;quot;S&amp;quot; (HAC-043; N64 controller)&lt;br /&gt;
** &amp;quot;T&amp;quot; (HEG-001; Nintendo Switch (OLED Model) console)&lt;br /&gt;
** &amp;quot;V&amp;quot; (HEG-007; Nintendo Switch (OLED Model) dock)&lt;br /&gt;
** &amp;quot;X&amp;quot; (HAC-045; Sega Genesis controller)&lt;br /&gt;
** &amp;quot;Y&amp;quot; (HAT-004/HEG-004; RelayBox/RelayBox-D/RelayBox-A)&lt;br /&gt;
** &amp;quot;Z&amp;quot; (HAT-003; SDEV cradle)&lt;br /&gt;
* Third letter represents the product region:&lt;br /&gt;
** &amp;quot;C&amp;quot; (China)&lt;br /&gt;
** &amp;quot;E&amp;quot; (Europe)&lt;br /&gt;
** &amp;quot;J&amp;quot; (Japan; and Europe on old models)&lt;br /&gt;
** &amp;quot;K&amp;quot; (Korea)&lt;br /&gt;
** &amp;quot;L&amp;quot; (All; for development only)&lt;br /&gt;
** &amp;quot;W&amp;quot; (Americas)&lt;br /&gt;
* Fourth letter is optional:&lt;br /&gt;
** &amp;quot;F&amp;quot; (Factory)&lt;br /&gt;
&lt;br /&gt;
== Assembly Line ==&lt;br /&gt;
The first two digits immediately after the [[#Prefix|prefix]] represent the assembly line 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;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 00 || Unspecified&lt;br /&gt;
|-&lt;br /&gt;
| 01 || Prototype&lt;br /&gt;
|-&lt;br /&gt;
| 02 || SDEV&lt;br /&gt;
|-&lt;br /&gt;
| 03 || EDEV&lt;br /&gt;
|-&lt;br /&gt;
| 04 || DPRD&lt;br /&gt;
|-&lt;br /&gt;
| 05 || HDEV&lt;br /&gt;
|-&lt;br /&gt;
| 06 || SDEV-D&lt;br /&gt;
|-&lt;br /&gt;
| 07 || EDEV-D&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 40 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 50 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 70 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 80 || Retail Pro Controller&lt;br /&gt;
|-&lt;br /&gt;
| 90 || Refurbished&lt;br /&gt;
|-&lt;br /&gt;
| 14 || Retail Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Retail Joy-Con&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Check Digit ==&lt;br /&gt;
The check digit is an industry-standard algorithm and is calculated just like it was on the [https://www.3dbrew.org/wiki/Serials#Console_Serial_Numbers 3DS].&lt;br /&gt;
&lt;br /&gt;
To calculate the check digit of a Switch console, separate the non-check digits into &amp;quot;odd&amp;quot; and &amp;quot;even&amp;quot; groups, where the &amp;quot;odd&amp;quot; group is digits in odd-numbered positions, and the &amp;quot;even&amp;quot; group is digits in even-numbered positions. (The first digit is &amp;quot;odd&amp;quot;, with &amp;quot;first&amp;quot; representing &amp;quot;1&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
After separating the digits, add the digits in each group together. Multiply the sum of the even digits by 3, then add the sum of the odd digits. To calculate the check digit, take this value modulo 10, and if not 0, subtract from 10.&lt;br /&gt;
&lt;br /&gt;
Example: XAW10075273452&lt;br /&gt;
&lt;br /&gt;
The non-check digits are 1007527345. Separating into odd and even groups, we get the following:&lt;br /&gt;
&lt;br /&gt;
Odds: 1 + 0 + 5 + 7 + 4 = 17 Evens: 0 + 7 + 2 + 3 + 5 = 17&lt;br /&gt;
&lt;br /&gt;
Applying the algorithm, we get ((3 * 17) + 17) % 10 = 8, which is not 0, thus 10 - 8 = 2, matching the example&#039;s check digit.&lt;/div&gt;</summary>
		<author><name>CapNem</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Secure_Monitor&amp;diff=11520</id>
		<title>Secure Monitor</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Secure_Monitor&amp;diff=11520"/>
		<updated>2022-02-28T17:30:12Z</updated>

		<summary type="html">&lt;p&gt;CapNem: /* DramId */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Secure Monitor Calls =&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 with a small change:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7 || Function Number&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Argument Type&lt;br /&gt;
|-&lt;br /&gt;
| 16-23 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 24-29 || Call Range&lt;br /&gt;
|-&lt;br /&gt;
| 30 || Call Convention (0 = SMC32, 1 = SMC64)&lt;br /&gt;
|-&lt;br /&gt;
| 31 || Call Type (0 = Yielding Call, 1 = Fast Call)&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;
== FunctionId0 ==&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;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000401 || SetConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000002 || [[#GetConfig|GetConfig]] (same as in [[#FunctionId1]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000003 || GetResult&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000404 || GetResultData&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000E05 || ModularExponentiate&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000006 || [[#GenerateRandomBytes|GenerateRandomBytes]] (same as in [[#FunctionId1]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000007 || [[#GenerateAesKek|GenerateAesKek]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000008 || [[#LoadAesKey|LoadAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000009 || [[#ComputeAes|ComputeAes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300000A || [[#GenerateSpecificAesKey|GenerateSpecificAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300040B || [[#ComputeCmac|ComputeCmac]]&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-4.1.0] 0xC300100C || [[#DecryptAndImportEsDeviceKey|DecryptAndImportEsDeviceKey]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0xC300D60C || [[#ReencryptDeviceUniqueData|ReencryptDeviceUniqueData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300100D || [[#DecryptDeviceUniqueData|DecryptDeviceUniqueData]]&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-4.1.0] 0xC300100E || [[#DecryptAndImportLotusKey|DecryptAndImportLotusKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300060F || [[#ModularExponentiateByStorageKey|ModularExponentiateByStorageKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000610 || [[#PrepareEsDeviceUniqueKey|PrepareEsDeviceUniqueKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000011 || [[#LoadPreparedAesKey|LoadPreparedAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000012 || [2.0.0+] [[#PrepareEsCommonKey|PrepareEsCommonKey]]&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;
=== GenerateRandomBytes ===&lt;br /&gt;
Takes an u64 &#039;&#039;&#039;Size&#039;&#039;&#039;. Returns [[#Result]] and &#039;&#039;&#039;RandomBytes&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Size&#039;&#039;&#039; is limited to 0x38 (for fitting in return registers).&lt;br /&gt;
&lt;br /&gt;
=== GenerateAesKek ===&lt;br /&gt;
Takes an &amp;quot;access key&amp;quot; as input, an [[#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 [[#CryptoUsecase|CryptoUsecase Aes]].&lt;br /&gt;
&lt;br /&gt;
=== ComputeAes ===&lt;br /&gt;
Encrypts/decrypts using AES (CTR and CBC). Takes an [[#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;
=== DecryptAndImportEsDeviceKey ===&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 [[#CryptoUsecase|CryptoUsecase TitleKey]].&lt;br /&gt;
&lt;br /&gt;
[5.0.0] This function was removed and replaced with [[#ReencryptDeviceUniqueData]].&lt;br /&gt;
&lt;br /&gt;
=== ReencryptDeviceUniqueData ===&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 [[#DecryptDeviceUniqueData]].&lt;br /&gt;
&lt;br /&gt;
=== DecryptDeviceUniqueData ===&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 [[#CryptoUsecase|CryptoUsecase RsaPrivate]].&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] The SMC handler when certain conditions pass and FunctionId0==0xC300100D now returns error 0x6 instead of calling the handler funcptr.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] This function now takes an additional input [[#DecryptOrImportMode]]. This extends the original functionality to enable importing private keys into the security engine instead of decrypting them.&lt;br /&gt;
&lt;br /&gt;
=== DecryptAndImportLotusKey ===&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 [[#CryptoUsecase|CryptoUsecase RsaSecureExpMod]].&lt;br /&gt;
&lt;br /&gt;
[5.0.0] This function was removed.&lt;br /&gt;
&lt;br /&gt;
=== ModularExponentiateByStorageKey ===&lt;br /&gt;
Performs an ExpMod operation using an exponent previously loaded with the [[#DecryptAndImportLotusKey]] command.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] This now uses any exponent previously loaded with [[#DecryptDeviceUniqueData]] and takes an [[#SecureExpModMode]].&lt;br /&gt;
&lt;br /&gt;
=== PrepareEsDeviceUniqueKey ===&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 [[#DecryptAndImportEsDeviceKey]] 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 [[#DecryptDeviceUniqueData]].&lt;br /&gt;
&lt;br /&gt;
=== LoadPreparedAesKey ===&lt;br /&gt;
Takes a session-unique AES key from [[#PrepareEsCommonKey]] or [[#PrepareEsDeviceUniqueKey]].&lt;br /&gt;
&lt;br /&gt;
=== PrepareEsCommonKey ===&lt;br /&gt;
Takes an AES-wrapped common TitleKey and returns a sealed AES key.&lt;br /&gt;
&lt;br /&gt;
== FunctionId1 ==&lt;br /&gt;
Functions exposed to the kernel internally.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0xC4000001 || [[#SuspendCpu|SuspendCpu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x84000002 || [[#PowerOffCpu|PowerOffCpu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC4000003 || [[#PowerOnCpu|PowerOnCpu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000004 || [[#GetConfig|GetConfig]] (same as in [[#FunctionId0]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000005 || [[#GenerateRandomBytes|GenerateRandomBytesNonBlocking]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000006 || [[#ShowError|ShowError]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000007 || [2.0.0+] [[#SetKernelCarveoutRegion|SetKernelCarveoutRegion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000008 || [2.0.0+] [[#ReadWriteRegister|ReadWriteRegister]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SuspendCpu ===&lt;br /&gt;
Takes an u64 &#039;&#039;&#039;PowerState&#039;&#039;&#039;, an u64 &#039;&#039;&#039;EntrypointAddress&#039;&#039;&#039; and an u64 &#039;&#039;&#039;ContextId&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
Suspends the CPU (CPU0).&lt;br /&gt;
&lt;br /&gt;
The kernel calls this SMC on shutdown with &#039;&#039;&#039;PowerState&#039;&#039;&#039; set to 0x0201001B (power level: 0x02==system; power type: 0x01==powerdown; ID: 0x1B).&lt;br /&gt;
&lt;br /&gt;
=== PowerOffCpu ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Turns off the CPU (CPU1, CPU2 or CPU3).&lt;br /&gt;
&lt;br /&gt;
=== PowerOnCpu ===&lt;br /&gt;
Takes an u64 &#039;&#039;&#039;TargetCpu&#039;&#039;&#039;, an u64 &#039;&#039;&#039;EntrypointAddress&#039;&#039;&#039; and an u64 &#039;&#039;&#039;ContextId&#039;&#039;&#039;. Returns [[#Result]].&lt;br /&gt;
&lt;br /&gt;
Turns on the CPU (CPU1, CPU2 or CPU3).&lt;br /&gt;
&lt;br /&gt;
=== GetConfig ===&lt;br /&gt;
Takes a [[#ConfigItem]]. Returns [[#Result]] and a &#039;&#039;&#039;ConfigValue&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== ConfigItem ====&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;
| 1 || [[#DisableProgramVerification]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#DramId]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#SecurityEngineInterruptNumber]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#FuseVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#HardwareType]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#HardwareState]]&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 || [[#MemoryMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#IsDevelopmentFunctionEnabled]]&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+] [[#QuestState]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [5.0.0+] [[#RegulatorType]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [5.0.0+] [[#DeviceUniqueKeyGeneration]]&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;
{| 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;
| EristaIcosaSamsung4gb&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| EristaIcosaHynix4gb&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| EristaIcosaMicron4gb&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [11.0.0+] MarikoIowaHynix1y4gb ([1.0.0-10.2.0] EristaCopperSamsung4gb)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| EristaIcosaSamsung6gb&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [12.0.0+] MarikoHoagHynix1y4gb ([4.0.0+] EristaCopperHynix4gb)&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [13.0.0+] MarikoAulaHynix1y4gb ([4.0.0+] EristaCopperMicron4gb)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [5.0.0+] MarikoIowax1x2Samsung4gb ([4.0.0-4.1.0] Reserved)&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [5.0.0+] MarikoIowaSamsung4gb&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| [5.0.0+] MarikoIowaSamsung8gb&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| [6.0.0+] MarikoIowaHynix4gb ([5.0.0-5.1.0] Reserved)&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| [7.0.0+] MarikoIowaMicron4gb ([5.0.0-6.2.0] Reserved)&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| [5.0.0+] MarikoHoagSamsung4gb&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| [5.0.0+] MarikoHoagSamsung8gb&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| [7.0.0+] MarikoHoagHynix4gb ([5.0.0-6.2.0] Reserved)&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| [7.0.0+] MarikoHoagMicron4gb ([5.0.0-6.2.0] Reserved)&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| [8.0.0+] MarikoIowaSamsung4gbY&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| [9.0.0+] MarikoIowaSamsung1y4gbX&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| [9.0.0+] MarikoIowaSamsung1y8gbX&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| [9.0.0+] MarikoHoagSamsung1y4gbX&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| [9.0.0+] MarikoIowaSamsung1y4gbY&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| [9.0.0+] MarikoIowaSamsung1y8gbY&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| [13.0.0+] Reserved ([9.0.0+] MarikoAulaSamsung1y4gb)&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| [10.0.0+] MarikoHoagSamsung1y8gbX&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| [10.0.0+] MarikoAulaSamsung1y4gbX&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| [11.0.0+] MarikoIowaMicron1y4gb&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| [11.0.0+] MarikoHoagMicron1y4gb&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| [11.0.0+] MarikoAulaMicron1y4gb&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| [11.0.0+] MarikoAulaSamsung1y8gbX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is extracted directly from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]].&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;
! SocType&lt;br /&gt;
! Platform&lt;br /&gt;
! DramId&lt;br /&gt;
! Revision&lt;br /&gt;
! DVFS&lt;br /&gt;
|-&lt;br /&gt;
| Erista&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;
| Erista&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;
| Erista&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;
| Erista&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;
| Erista&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;
| Erista&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;
| Erista&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoIowaSamsung4gbY&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoIowaSamsung1y4gbX&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoIowaSamsung1y8gbX&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoHoagSamsung1y4gbX&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoIowaSamsung1y4gbY&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoIowaSamsung1y8gbY&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoIowaSamsung1y4gbA&lt;br /&gt;
| 0x03&lt;br /&gt;
|  &lt;br /&gt;
 01_204000_NoCfgVersion_V0.4.5_V2.0&lt;br /&gt;
 01_1331200.0_NoCfgVersion_V0.4.5_V2.0&lt;br /&gt;
 01_1600000_NoCfgVersion_V0.4.5_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; in &#039;&#039;&#039;Erista&#039;&#039;&#039;, &#039;&#039;&#039;Iowa&#039;&#039;&#039; in &#039;&#039;&#039;Mariko&#039;&#039;&#039;) hardware types are variations of the retail, EDEV and SDEV form factors.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nx-abcb&#039;&#039;&#039; (&#039;&#039;&#039;Copper&#039;&#039;&#039; in &#039;&#039;&#039;Erista&#039;&#039;&#039;, &#039;&#039;&#039;Calcio&#039;&#039;&#039; in &#039;&#039;&#039;Mariko&#039;&#039;&#039;) is a simulation 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; (&#039;&#039;&#039;Hoag&#039;&#039;&#039;) was added for the Lite retail and HDEV form factors.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] &#039;&#039;&#039;nx-abcd&#039;&#039;&#039; (&#039;&#039;&#039;Aula&#039;&#039;&#039;) was added for the OLED Model retail and ADEV form factors.&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;
===== SecurityEngineInterruptNumber =====&lt;br /&gt;
SPL uses this for setting up the security engine IRQ.&lt;br /&gt;
&lt;br /&gt;
===== FuseVersion =====&lt;br /&gt;
The current [[Package2#Versions|bootloader maximum version]] - 1.&lt;br /&gt;
&lt;br /&gt;
===== HardwareType =====&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Icosa&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Copper&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [8.0.0+] Hoag ([1.0.0-7.0.1] Invalid)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [4.0.0+] Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [8.0.0+] Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [10.0.0+] Aula&lt;br /&gt;
|-&lt;br /&gt;
| 15 || Invalid&lt;br /&gt;
|}&lt;br /&gt;
&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]].&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]].&lt;br /&gt;
&lt;br /&gt;
[7.0.0+] This item can now only be 0 (Icosa) or 15 (Invalid) in Erista units.&lt;br /&gt;
&lt;br /&gt;
Hardware is &#039;&#039;&#039;Icosa&#039;&#039;&#039; (Erista retail, EDEV and SDEV) if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType1]] (bit 2) is 1 and [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType2]] (bit 8) is 0.&lt;br /&gt;
&lt;br /&gt;
Hardware is &#039;&#039;&#039;Copper&#039;&#039;&#039; (Erista simulation) if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType1]] (bit 2) is 0 and [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType2]] (bit 8) is 1.&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] Hardware is &#039;&#039;&#039;Iowa&#039;&#039;&#039; (Mariko retail, EDEV and SDEV) if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType3]] (bits 16-19) is 1.&lt;br /&gt;
&lt;br /&gt;
[8.0.0+] Hardware is &#039;&#039;&#039;Hoag&#039;&#039;&#039; (Mariko Lite retail and HDEV) if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType3]] (bits 16-19) is 2.&lt;br /&gt;
&lt;br /&gt;
[8.0.0+] Hardware is &#039;&#039;&#039;Calcio&#039;&#039;&#039; (Mariko simulation) if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType1]] (bit 2) is 0 and [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType2]] (bit 8) is 1.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] Hardware is &#039;&#039;&#039;Aula&#039;&#039;&#039; (Mariko OLED Model retail and ADEV) if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType3]] (bits 16-19) is 4.&lt;br /&gt;
&lt;br /&gt;
===== HardwareState =====&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Development&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Production&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Invalid&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This item is obtained by checking bits 9 and 0-1 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]].&lt;br /&gt;
&lt;br /&gt;
Hardware is &#039;&#039;&#039;Development&#039;&#039;&#039; if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareState1]] (bits 0-1) is 3 and [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareState2]] (bit 9) is 0.&lt;br /&gt;
&lt;br /&gt;
Hardware is &#039;&#039;&#039;Production&#039;&#039;&#039; if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareState1]] (bits 0-1) is 0 and [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareState2]] (bit 9) is 1.&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;
{| 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;
Used to determine how the system booted.&lt;br /&gt;
&lt;br /&gt;
===== MemoryMode =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| Purpose (0 = None, 1 = ForStandard, 2 = ForAppletDev, 3 = ForSystemDev)&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Size (0 = 4GB, 1 = 6GB, 2 = 8GB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Process Manager services|PM]] and the kernel decide memory arrangement based on MemoryMode.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MemoryArrange&lt;br /&gt;
! MemoryMode&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0x01&lt;br /&gt;
| Standard &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0x02&lt;br /&gt;
| StandardForAppletDev&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 0x03&lt;br /&gt;
| StandardForSystemDev&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 0x11&lt;br /&gt;
| Expanded&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 0x12&lt;br /&gt;
| ExpandedForAppletDev&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 0x21&lt;br /&gt;
| ExpandedForMarikoDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== IsDevelopmentFunctionEnabled =====&lt;br /&gt;
Kernel uses this to determine behavior of [[SVC#svcBreak|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;
===== KernelConfiguration =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| EnableNonZeroFillMemory&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| EnableUserExceptionHandler&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| PerformanceMonitoringUnit&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [8.0.0+] EnableApplicationExtraThread&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| CallShowErrorOnPanic&lt;br /&gt;
|-&lt;br /&gt;
| 16-17&lt;br /&gt;
| MemorySize&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Kernel reads this when setting up memory-related code.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnableNonZeroFillMemory&#039;&#039;&#039; 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;
&#039;&#039;&#039;EnableUserExceptionHandler&#039;&#039;&#039; 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;
&#039;&#039;&#039;PerformanceMonitoringUnit&#039;&#039;&#039; 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;
&#039;&#039;&#039;EnableApplicationExtraThread&#039;&#039;&#039; is a boolean determining whether the kernel should increase the KThread slabheap capacity by 160. This also increases object capacities that are calculated based on number of threads.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CallShowErrorOnPanic&#039;&#039;&#039; is a boolean determining whether kernel should call smcPanic on error instead of infinite-looping.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MemorySize&#039;&#039;&#039; determines 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;
===== QuestState =====&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Disabled&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Enabled&lt;br /&gt;
|}&lt;br /&gt;
&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;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value&lt;br /&gt;
! SocType&lt;br /&gt;
! GPU&lt;br /&gt;
! Power Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Erista&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;
| Mariko&lt;br /&gt;
| GM20B_B (0x12E)&lt;br /&gt;
| max77620_sd0, max77812_cpu and max77812_gpu&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Mariko&lt;br /&gt;
| GM20B_B (0x12E)&lt;br /&gt;
| max77620_sd0, max77812_cpu and max77812_gpu&lt;br /&gt;
|}&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;
&lt;br /&gt;
===== DeviceUniqueKeyGeneration =====&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;
===== 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;
=== ShowError ===&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;Color&#039;&#039;&#039; and issues a system panic.&lt;br /&gt;
&lt;br /&gt;
The kernel always calls this with &#039;&#039;&#039;Color&#039;&#039;&#039; set to 0xF00.&lt;br /&gt;
&lt;br /&gt;
=== SetKernelCarveoutRegion ===&lt;br /&gt;
Takes an u64 &#039;&#039;&#039;Index&#039;&#039;&#039;, an u64 &#039;&#039;&#039;Address&#039;&#039;&#039; and an u64 &#039;&#039;&#039;Size&#039;&#039;&#039;. Returns [[#Result]].&lt;br /&gt;
&lt;br /&gt;
If &#039;&#039;&#039;Index&#039;&#039;&#039; is 0, &#039;&#039;&#039;Address&#039;&#039;&#039; and &#039;&#039;&#039;Size&#039;&#039;&#039; are used to configure &#039;&#039;&#039;MC_SECURITY_CARVEOUT4&#039;&#039;&#039;.&lt;br /&gt;
If &#039;&#039;&#039;Index&#039;&#039;&#039; is 1, &#039;&#039;&#039;Address&#039;&#039;&#039; and &#039;&#039;&#039;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;Index&#039;&#039;&#039; values are invalid.&lt;br /&gt;
&lt;br /&gt;
The kernel calls this with &#039;&#039;&#039;Index&#039;&#039;&#039; set to 0, &#039;&#039;&#039;Address&#039;&#039;&#039; set to 0x80060000 and &#039;&#039;&#039;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;
Takes an u64 &#039;&#039;&#039;Register&#039;&#039;&#039;, an u32 &#039;&#039;&#039;Mask&#039;&#039;&#039; and an u32 &#039;&#039;&#039;InValue&#039;&#039;&#039;. Returns [[#Result]] and an u32 &#039;&#039;&#039;OutValue&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Relays [[SVC#svcReadWriteRegister|svcReadWriteRegister]] to the Secure Monitor.&lt;br /&gt;
&lt;br /&gt;
= CryptoUsecase =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Aes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RsaPrivate&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SecureExpMod&lt;br /&gt;
|-&lt;br /&gt;
| 3 || RsaOaep&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [5.0.0+] RsaImport&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [5.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [5.0.0+]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CipherMode =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CbcEncrypt&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CbcDecrypt&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Ctr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DecryptOrImportMode =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DecryptRsaPrivateKey&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ImportLotusKey&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ImportEsKey&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ImportSslKey&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ImportDrmKey&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SecureExpModMode =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Lotus&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Ssl&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Drm&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= EsKeyType =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || TitleKey&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ElicenseKey&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Result =&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;
| 6 || [8.0.0+] Not permitted&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>CapNem</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Secure_Monitor&amp;diff=11519</id>
		<title>Secure Monitor</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Secure_Monitor&amp;diff=11519"/>
		<updated>2022-02-28T17:29:38Z</updated>

		<summary type="html">&lt;p&gt;CapNem: /* HardwareType */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Secure Monitor Calls =&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 with a small change:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7 || Function Number&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Argument Type&lt;br /&gt;
|-&lt;br /&gt;
| 16-23 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 24-29 || Call Range&lt;br /&gt;
|-&lt;br /&gt;
| 30 || Call Convention (0 = SMC32, 1 = SMC64)&lt;br /&gt;
|-&lt;br /&gt;
| 31 || Call Type (0 = Yielding Call, 1 = Fast Call)&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;
== FunctionId0 ==&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;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000401 || SetConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000002 || [[#GetConfig|GetConfig]] (same as in [[#FunctionId1]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000003 || GetResult&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000404 || GetResultData&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000E05 || ModularExponentiate&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000006 || [[#GenerateRandomBytes|GenerateRandomBytes]] (same as in [[#FunctionId1]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000007 || [[#GenerateAesKek|GenerateAesKek]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000008 || [[#LoadAesKey|LoadAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000009 || [[#ComputeAes|ComputeAes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300000A || [[#GenerateSpecificAesKey|GenerateSpecificAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300040B || [[#ComputeCmac|ComputeCmac]]&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-4.1.0] 0xC300100C || [[#DecryptAndImportEsDeviceKey|DecryptAndImportEsDeviceKey]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0xC300D60C || [[#ReencryptDeviceUniqueData|ReencryptDeviceUniqueData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300100D || [[#DecryptDeviceUniqueData|DecryptDeviceUniqueData]]&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-4.1.0] 0xC300100E || [[#DecryptAndImportLotusKey|DecryptAndImportLotusKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300060F || [[#ModularExponentiateByStorageKey|ModularExponentiateByStorageKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000610 || [[#PrepareEsDeviceUniqueKey|PrepareEsDeviceUniqueKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000011 || [[#LoadPreparedAesKey|LoadPreparedAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000012 || [2.0.0+] [[#PrepareEsCommonKey|PrepareEsCommonKey]]&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;
=== GenerateRandomBytes ===&lt;br /&gt;
Takes an u64 &#039;&#039;&#039;Size&#039;&#039;&#039;. Returns [[#Result]] and &#039;&#039;&#039;RandomBytes&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Size&#039;&#039;&#039; is limited to 0x38 (for fitting in return registers).&lt;br /&gt;
&lt;br /&gt;
=== GenerateAesKek ===&lt;br /&gt;
Takes an &amp;quot;access key&amp;quot; as input, an [[#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 [[#CryptoUsecase|CryptoUsecase Aes]].&lt;br /&gt;
&lt;br /&gt;
=== ComputeAes ===&lt;br /&gt;
Encrypts/decrypts using AES (CTR and CBC). Takes an [[#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;
=== DecryptAndImportEsDeviceKey ===&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 [[#CryptoUsecase|CryptoUsecase TitleKey]].&lt;br /&gt;
&lt;br /&gt;
[5.0.0] This function was removed and replaced with [[#ReencryptDeviceUniqueData]].&lt;br /&gt;
&lt;br /&gt;
=== ReencryptDeviceUniqueData ===&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 [[#DecryptDeviceUniqueData]].&lt;br /&gt;
&lt;br /&gt;
=== DecryptDeviceUniqueData ===&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 [[#CryptoUsecase|CryptoUsecase RsaPrivate]].&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] The SMC handler when certain conditions pass and FunctionId0==0xC300100D now returns error 0x6 instead of calling the handler funcptr.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] This function now takes an additional input [[#DecryptOrImportMode]]. This extends the original functionality to enable importing private keys into the security engine instead of decrypting them.&lt;br /&gt;
&lt;br /&gt;
=== DecryptAndImportLotusKey ===&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 [[#CryptoUsecase|CryptoUsecase RsaSecureExpMod]].&lt;br /&gt;
&lt;br /&gt;
[5.0.0] This function was removed.&lt;br /&gt;
&lt;br /&gt;
=== ModularExponentiateByStorageKey ===&lt;br /&gt;
Performs an ExpMod operation using an exponent previously loaded with the [[#DecryptAndImportLotusKey]] command.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] This now uses any exponent previously loaded with [[#DecryptDeviceUniqueData]] and takes an [[#SecureExpModMode]].&lt;br /&gt;
&lt;br /&gt;
=== PrepareEsDeviceUniqueKey ===&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 [[#DecryptAndImportEsDeviceKey]] 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 [[#DecryptDeviceUniqueData]].&lt;br /&gt;
&lt;br /&gt;
=== LoadPreparedAesKey ===&lt;br /&gt;
Takes a session-unique AES key from [[#PrepareEsCommonKey]] or [[#PrepareEsDeviceUniqueKey]].&lt;br /&gt;
&lt;br /&gt;
=== PrepareEsCommonKey ===&lt;br /&gt;
Takes an AES-wrapped common TitleKey and returns a sealed AES key.&lt;br /&gt;
&lt;br /&gt;
== FunctionId1 ==&lt;br /&gt;
Functions exposed to the kernel internally.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0xC4000001 || [[#SuspendCpu|SuspendCpu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x84000002 || [[#PowerOffCpu|PowerOffCpu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC4000003 || [[#PowerOnCpu|PowerOnCpu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000004 || [[#GetConfig|GetConfig]] (same as in [[#FunctionId0]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000005 || [[#GenerateRandomBytes|GenerateRandomBytesNonBlocking]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000006 || [[#ShowError|ShowError]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000007 || [2.0.0+] [[#SetKernelCarveoutRegion|SetKernelCarveoutRegion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000008 || [2.0.0+] [[#ReadWriteRegister|ReadWriteRegister]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SuspendCpu ===&lt;br /&gt;
Takes an u64 &#039;&#039;&#039;PowerState&#039;&#039;&#039;, an u64 &#039;&#039;&#039;EntrypointAddress&#039;&#039;&#039; and an u64 &#039;&#039;&#039;ContextId&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
Suspends the CPU (CPU0).&lt;br /&gt;
&lt;br /&gt;
The kernel calls this SMC on shutdown with &#039;&#039;&#039;PowerState&#039;&#039;&#039; set to 0x0201001B (power level: 0x02==system; power type: 0x01==powerdown; ID: 0x1B).&lt;br /&gt;
&lt;br /&gt;
=== PowerOffCpu ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Turns off the CPU (CPU1, CPU2 or CPU3).&lt;br /&gt;
&lt;br /&gt;
=== PowerOnCpu ===&lt;br /&gt;
Takes an u64 &#039;&#039;&#039;TargetCpu&#039;&#039;&#039;, an u64 &#039;&#039;&#039;EntrypointAddress&#039;&#039;&#039; and an u64 &#039;&#039;&#039;ContextId&#039;&#039;&#039;. Returns [[#Result]].&lt;br /&gt;
&lt;br /&gt;
Turns on the CPU (CPU1, CPU2 or CPU3).&lt;br /&gt;
&lt;br /&gt;
=== GetConfig ===&lt;br /&gt;
Takes a [[#ConfigItem]]. Returns [[#Result]] and a &#039;&#039;&#039;ConfigValue&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== ConfigItem ====&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;
| 1 || [[#DisableProgramVerification]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#DramId]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#SecurityEngineInterruptNumber]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#FuseVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#HardwareType]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#HardwareState]]&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 || [[#MemoryMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#IsDevelopmentFunctionEnabled]]&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+] [[#QuestState]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [5.0.0+] [[#RegulatorType]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [5.0.0+] [[#DeviceUniqueKeyGeneration]]&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;
{| 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;
| EristaIcosaSamsung4gb&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| EristaIcosaHynix4gb&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| EristaIcosaMicron4gb&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [11.0.0+] MarikoIowaHynix1y4gb ([1.0.0-10.2.0] EristaCopperSamsung4gb)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| EristaIcosaSamsung6gb&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [12.0.0+] MarikoHoagHynix1y4gb ([4.0.0+] EristaCopperHynix4gb)&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [13.0.0+] MarikoAulaHynix1y4gb ([4.0.0+] EristaCopperMicron4gb)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [5.0.0+] MarikoIowax1x2Samsung4gb ([4.0.0-4.1.0] Reserved)&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [5.0.0+] MarikoIowaSamsung4gb&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| [5.0.0+] MarikoIowaSamsung8gb&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| [6.0.0+] MarikoIowaHynix4gb ([5.0.0-5.1.0] Reserved)&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| [7.0.0+] MarikoIowaMicron4gb ([5.0.0-6.2.0] Reserved)&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| [5.0.0+] MarikoHoagSamsung4gb&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| [5.0.0+] MarikoHoagSamsung8gb&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| [7.0.0+] MarikoHoagHynix4gb ([5.0.0-6.2.0] Reserved)&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| [7.0.0+] MarikoHoagMicron4gb ([5.0.0-6.2.0] Reserved)&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| [8.0.0+] MarikoIowaSamsung4gbY&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| [9.0.0+] MarikoIowaSamsung1y4gbX&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| [9.0.0+] MarikoIowaSamsung1y8gbX&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| [9.0.0+] MarikoHoagSamsung1y4gbX&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| [9.0.0+] MarikoIowaSamsung1y4gbY&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| [9.0.0+] MarikoIowaSamsung1y8gbY&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| [13.0.0+] Reserved ([9.0.0+] MarikoAulaSamsung1y4gb)&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| [10.0.0+] MarikoHoagSamsung1y8gbX&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| [10.0.0+] MarikoAulaSamsung1y4gbX&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| [11.0.0+] MarikoIowaMicron1y4gb&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| [11.0.0+] MarikoHoagMicron1y4gb&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| [11.0.0+] MarikoAulaMicron1y4gb&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| [11.0.0+] MarikoAulaSamsung1y8gbX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is extracted directly from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]].&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;
! SocType&lt;br /&gt;
! Platform&lt;br /&gt;
! DramId&lt;br /&gt;
! Revision&lt;br /&gt;
! DVFS&lt;br /&gt;
|-&lt;br /&gt;
| Erista&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;
| Erista&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;
| Erista&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;
| Erista&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;
| Erista&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;
| Erista&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;
| Erista&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoIowaSamsung4gbY&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoIowaSamsung1y4gbX&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoIowaSamsung1y8gbX&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoHoagSamsung1y4gbX&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoIowaSamsung1y4gbY&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoIowaSamsung1y8gbY&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoIowaSamsung1y4gbA&lt;br /&gt;
| 0x03&lt;br /&gt;
|  &lt;br /&gt;
 01_204000_NoCfgVersion_V0.4.5_V2.0&lt;br /&gt;
 01_1331200.0_NoCfgVersion_V0.4.5_V2.0&lt;br /&gt;
 01_1600000_NoCfgVersion_V0.4.5_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; in &#039;&#039;&#039;Erista&#039;&#039;&#039;, &#039;&#039;&#039;Iowa&#039;&#039;&#039; in &#039;&#039;&#039;Mariko&#039;&#039;&#039;) hardware types are variations of the retail, EDEV and SDEV form factors.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nx-abcb&#039;&#039;&#039; (&#039;&#039;&#039;Copper&#039;&#039;&#039; in &#039;&#039;&#039;Erista&#039;&#039;&#039;, &#039;&#039;&#039;Calcio&#039;&#039;&#039; in &#039;&#039;&#039;Mariko&#039;&#039;&#039;) is a simulation 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; (&#039;&#039;&#039;Hoag&#039;&#039;&#039;) was added for the Lite retail and HDEV form factors.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] &#039;&#039;&#039;nx-abcd&#039;&#039;&#039; (&#039;&#039;&#039;Aula&#039;&#039;&#039;) was added for the OLED retail and ADEV form factors.&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;
===== SecurityEngineInterruptNumber =====&lt;br /&gt;
SPL uses this for setting up the security engine IRQ.&lt;br /&gt;
&lt;br /&gt;
===== FuseVersion =====&lt;br /&gt;
The current [[Package2#Versions|bootloader maximum version]] - 1.&lt;br /&gt;
&lt;br /&gt;
===== HardwareType =====&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Icosa&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Copper&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [8.0.0+] Hoag ([1.0.0-7.0.1] Invalid)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [4.0.0+] Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [8.0.0+] Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [10.0.0+] Aula&lt;br /&gt;
|-&lt;br /&gt;
| 15 || Invalid&lt;br /&gt;
|}&lt;br /&gt;
&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]].&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]].&lt;br /&gt;
&lt;br /&gt;
[7.0.0+] This item can now only be 0 (Icosa) or 15 (Invalid) in Erista units.&lt;br /&gt;
&lt;br /&gt;
Hardware is &#039;&#039;&#039;Icosa&#039;&#039;&#039; (Erista retail, EDEV and SDEV) if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType1]] (bit 2) is 1 and [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType2]] (bit 8) is 0.&lt;br /&gt;
&lt;br /&gt;
Hardware is &#039;&#039;&#039;Copper&#039;&#039;&#039; (Erista simulation) if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType1]] (bit 2) is 0 and [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType2]] (bit 8) is 1.&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] Hardware is &#039;&#039;&#039;Iowa&#039;&#039;&#039; (Mariko retail, EDEV and SDEV) if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType3]] (bits 16-19) is 1.&lt;br /&gt;
&lt;br /&gt;
[8.0.0+] Hardware is &#039;&#039;&#039;Hoag&#039;&#039;&#039; (Mariko Lite retail and HDEV) if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType3]] (bits 16-19) is 2.&lt;br /&gt;
&lt;br /&gt;
[8.0.0+] Hardware is &#039;&#039;&#039;Calcio&#039;&#039;&#039; (Mariko simulation) if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType1]] (bit 2) is 0 and [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType2]] (bit 8) is 1.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] Hardware is &#039;&#039;&#039;Aula&#039;&#039;&#039; (Mariko OLED Model retail and ADEV) if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType3]] (bits 16-19) is 4.&lt;br /&gt;
&lt;br /&gt;
===== HardwareState =====&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Development&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Production&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Invalid&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This item is obtained by checking bits 9 and 0-1 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]].&lt;br /&gt;
&lt;br /&gt;
Hardware is &#039;&#039;&#039;Development&#039;&#039;&#039; if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareState1]] (bits 0-1) is 3 and [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareState2]] (bit 9) is 0.&lt;br /&gt;
&lt;br /&gt;
Hardware is &#039;&#039;&#039;Production&#039;&#039;&#039; if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareState1]] (bits 0-1) is 0 and [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareState2]] (bit 9) is 1.&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;
{| 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;
Used to determine how the system booted.&lt;br /&gt;
&lt;br /&gt;
===== MemoryMode =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| Purpose (0 = None, 1 = ForStandard, 2 = ForAppletDev, 3 = ForSystemDev)&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Size (0 = 4GB, 1 = 6GB, 2 = 8GB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Process Manager services|PM]] and the kernel decide memory arrangement based on MemoryMode.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MemoryArrange&lt;br /&gt;
! MemoryMode&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0x01&lt;br /&gt;
| Standard &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0x02&lt;br /&gt;
| StandardForAppletDev&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 0x03&lt;br /&gt;
| StandardForSystemDev&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 0x11&lt;br /&gt;
| Expanded&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 0x12&lt;br /&gt;
| ExpandedForAppletDev&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 0x21&lt;br /&gt;
| ExpandedForMarikoDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== IsDevelopmentFunctionEnabled =====&lt;br /&gt;
Kernel uses this to determine behavior of [[SVC#svcBreak|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;
===== KernelConfiguration =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| EnableNonZeroFillMemory&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| EnableUserExceptionHandler&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| PerformanceMonitoringUnit&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [8.0.0+] EnableApplicationExtraThread&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| CallShowErrorOnPanic&lt;br /&gt;
|-&lt;br /&gt;
| 16-17&lt;br /&gt;
| MemorySize&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Kernel reads this when setting up memory-related code.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnableNonZeroFillMemory&#039;&#039;&#039; 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;
&#039;&#039;&#039;EnableUserExceptionHandler&#039;&#039;&#039; 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;
&#039;&#039;&#039;PerformanceMonitoringUnit&#039;&#039;&#039; 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;
&#039;&#039;&#039;EnableApplicationExtraThread&#039;&#039;&#039; is a boolean determining whether the kernel should increase the KThread slabheap capacity by 160. This also increases object capacities that are calculated based on number of threads.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CallShowErrorOnPanic&#039;&#039;&#039; is a boolean determining whether kernel should call smcPanic on error instead of infinite-looping.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MemorySize&#039;&#039;&#039; determines 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;
===== QuestState =====&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Disabled&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Enabled&lt;br /&gt;
|}&lt;br /&gt;
&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;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value&lt;br /&gt;
! SocType&lt;br /&gt;
! GPU&lt;br /&gt;
! Power Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Erista&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;
| Mariko&lt;br /&gt;
| GM20B_B (0x12E)&lt;br /&gt;
| max77620_sd0, max77812_cpu and max77812_gpu&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Mariko&lt;br /&gt;
| GM20B_B (0x12E)&lt;br /&gt;
| max77620_sd0, max77812_cpu and max77812_gpu&lt;br /&gt;
|}&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;
&lt;br /&gt;
===== DeviceUniqueKeyGeneration =====&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;
===== 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;
=== ShowError ===&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;Color&#039;&#039;&#039; and issues a system panic.&lt;br /&gt;
&lt;br /&gt;
The kernel always calls this with &#039;&#039;&#039;Color&#039;&#039;&#039; set to 0xF00.&lt;br /&gt;
&lt;br /&gt;
=== SetKernelCarveoutRegion ===&lt;br /&gt;
Takes an u64 &#039;&#039;&#039;Index&#039;&#039;&#039;, an u64 &#039;&#039;&#039;Address&#039;&#039;&#039; and an u64 &#039;&#039;&#039;Size&#039;&#039;&#039;. Returns [[#Result]].&lt;br /&gt;
&lt;br /&gt;
If &#039;&#039;&#039;Index&#039;&#039;&#039; is 0, &#039;&#039;&#039;Address&#039;&#039;&#039; and &#039;&#039;&#039;Size&#039;&#039;&#039; are used to configure &#039;&#039;&#039;MC_SECURITY_CARVEOUT4&#039;&#039;&#039;.&lt;br /&gt;
If &#039;&#039;&#039;Index&#039;&#039;&#039; is 1, &#039;&#039;&#039;Address&#039;&#039;&#039; and &#039;&#039;&#039;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;Index&#039;&#039;&#039; values are invalid.&lt;br /&gt;
&lt;br /&gt;
The kernel calls this with &#039;&#039;&#039;Index&#039;&#039;&#039; set to 0, &#039;&#039;&#039;Address&#039;&#039;&#039; set to 0x80060000 and &#039;&#039;&#039;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;
Takes an u64 &#039;&#039;&#039;Register&#039;&#039;&#039;, an u32 &#039;&#039;&#039;Mask&#039;&#039;&#039; and an u32 &#039;&#039;&#039;InValue&#039;&#039;&#039;. Returns [[#Result]] and an u32 &#039;&#039;&#039;OutValue&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Relays [[SVC#svcReadWriteRegister|svcReadWriteRegister]] to the Secure Monitor.&lt;br /&gt;
&lt;br /&gt;
= CryptoUsecase =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Aes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RsaPrivate&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SecureExpMod&lt;br /&gt;
|-&lt;br /&gt;
| 3 || RsaOaep&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [5.0.0+] RsaImport&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [5.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [5.0.0+]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CipherMode =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CbcEncrypt&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CbcDecrypt&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Ctr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DecryptOrImportMode =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DecryptRsaPrivateKey&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ImportLotusKey&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ImportEsKey&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ImportSslKey&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ImportDrmKey&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SecureExpModMode =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Lotus&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Ssl&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Drm&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= EsKeyType =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || TitleKey&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ElicenseKey&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Result =&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;
| 6 || [8.0.0+] Not permitted&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>CapNem</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Secure_Monitor&amp;diff=11518</id>
		<title>Secure Monitor</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Secure_Monitor&amp;diff=11518"/>
		<updated>2022-02-28T17:26:55Z</updated>

		<summary type="html">&lt;p&gt;CapNem: /* DramId */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Secure Monitor Calls =&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 with a small change:&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7 || Function Number&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Argument Type&lt;br /&gt;
|-&lt;br /&gt;
| 16-23 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 24-29 || Call Range&lt;br /&gt;
|-&lt;br /&gt;
| 30 || Call Convention (0 = SMC32, 1 = SMC64)&lt;br /&gt;
|-&lt;br /&gt;
| 31 || Call Type (0 = Yielding Call, 1 = Fast Call)&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;
== FunctionId0 ==&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;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000401 || SetConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000002 || [[#GetConfig|GetConfig]] (same as in [[#FunctionId1]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000003 || GetResult&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000404 || GetResultData&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000E05 || ModularExponentiate&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000006 || [[#GenerateRandomBytes|GenerateRandomBytes]] (same as in [[#FunctionId1]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000007 || [[#GenerateAesKek|GenerateAesKek]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000008 || [[#LoadAesKey|LoadAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000009 || [[#ComputeAes|ComputeAes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300000A || [[#GenerateSpecificAesKey|GenerateSpecificAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300040B || [[#ComputeCmac|ComputeCmac]]&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-4.1.0] 0xC300100C || [[#DecryptAndImportEsDeviceKey|DecryptAndImportEsDeviceKey]]&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0xC300D60C || [[#ReencryptDeviceUniqueData|ReencryptDeviceUniqueData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300100D || [[#DecryptDeviceUniqueData|DecryptDeviceUniqueData]]&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-4.1.0] 0xC300100E || [[#DecryptAndImportLotusKey|DecryptAndImportLotusKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC300060F || [[#ModularExponentiateByStorageKey|ModularExponentiateByStorageKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000610 || [[#PrepareEsDeviceUniqueKey|PrepareEsDeviceUniqueKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000011 || [[#LoadPreparedAesKey|LoadPreparedAesKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000012 || [2.0.0+] [[#PrepareEsCommonKey|PrepareEsCommonKey]]&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;
=== GenerateRandomBytes ===&lt;br /&gt;
Takes an u64 &#039;&#039;&#039;Size&#039;&#039;&#039;. Returns [[#Result]] and &#039;&#039;&#039;RandomBytes&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Size&#039;&#039;&#039; is limited to 0x38 (for fitting in return registers).&lt;br /&gt;
&lt;br /&gt;
=== GenerateAesKek ===&lt;br /&gt;
Takes an &amp;quot;access key&amp;quot; as input, an [[#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 [[#CryptoUsecase|CryptoUsecase Aes]].&lt;br /&gt;
&lt;br /&gt;
=== ComputeAes ===&lt;br /&gt;
Encrypts/decrypts using AES (CTR and CBC). Takes an [[#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;
=== DecryptAndImportEsDeviceKey ===&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 [[#CryptoUsecase|CryptoUsecase TitleKey]].&lt;br /&gt;
&lt;br /&gt;
[5.0.0] This function was removed and replaced with [[#ReencryptDeviceUniqueData]].&lt;br /&gt;
&lt;br /&gt;
=== ReencryptDeviceUniqueData ===&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 [[#DecryptDeviceUniqueData]].&lt;br /&gt;
&lt;br /&gt;
=== DecryptDeviceUniqueData ===&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 [[#CryptoUsecase|CryptoUsecase RsaPrivate]].&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] The SMC handler when certain conditions pass and FunctionId0==0xC300100D now returns error 0x6 instead of calling the handler funcptr.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] This function now takes an additional input [[#DecryptOrImportMode]]. This extends the original functionality to enable importing private keys into the security engine instead of decrypting them.&lt;br /&gt;
&lt;br /&gt;
=== DecryptAndImportLotusKey ===&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 [[#CryptoUsecase|CryptoUsecase RsaSecureExpMod]].&lt;br /&gt;
&lt;br /&gt;
[5.0.0] This function was removed.&lt;br /&gt;
&lt;br /&gt;
=== ModularExponentiateByStorageKey ===&lt;br /&gt;
Performs an ExpMod operation using an exponent previously loaded with the [[#DecryptAndImportLotusKey]] command.&lt;br /&gt;
&lt;br /&gt;
[5.0.0+] This now uses any exponent previously loaded with [[#DecryptDeviceUniqueData]] and takes an [[#SecureExpModMode]].&lt;br /&gt;
&lt;br /&gt;
=== PrepareEsDeviceUniqueKey ===&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 [[#DecryptAndImportEsDeviceKey]] 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 [[#DecryptDeviceUniqueData]].&lt;br /&gt;
&lt;br /&gt;
=== LoadPreparedAesKey ===&lt;br /&gt;
Takes a session-unique AES key from [[#PrepareEsCommonKey]] or [[#PrepareEsDeviceUniqueKey]].&lt;br /&gt;
&lt;br /&gt;
=== PrepareEsCommonKey ===&lt;br /&gt;
Takes an AES-wrapped common TitleKey and returns a sealed AES key.&lt;br /&gt;
&lt;br /&gt;
== FunctionId1 ==&lt;br /&gt;
Functions exposed to the kernel internally.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0xC4000001 || [[#SuspendCpu|SuspendCpu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x84000002 || [[#PowerOffCpu|PowerOffCpu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC4000003 || [[#PowerOnCpu|PowerOnCpu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000004 || [[#GetConfig|GetConfig]] (same as in [[#FunctionId0]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000005 || [[#GenerateRandomBytes|GenerateRandomBytesNonBlocking]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000006 || [[#ShowError|ShowError]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000007 || [2.0.0+] [[#SetKernelCarveoutRegion|SetKernelCarveoutRegion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC3000008 || [2.0.0+] [[#ReadWriteRegister|ReadWriteRegister]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SuspendCpu ===&lt;br /&gt;
Takes an u64 &#039;&#039;&#039;PowerState&#039;&#039;&#039;, an u64 &#039;&#039;&#039;EntrypointAddress&#039;&#039;&#039; and an u64 &#039;&#039;&#039;ContextId&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
Suspends the CPU (CPU0).&lt;br /&gt;
&lt;br /&gt;
The kernel calls this SMC on shutdown with &#039;&#039;&#039;PowerState&#039;&#039;&#039; set to 0x0201001B (power level: 0x02==system; power type: 0x01==powerdown; ID: 0x1B).&lt;br /&gt;
&lt;br /&gt;
=== PowerOffCpu ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Turns off the CPU (CPU1, CPU2 or CPU3).&lt;br /&gt;
&lt;br /&gt;
=== PowerOnCpu ===&lt;br /&gt;
Takes an u64 &#039;&#039;&#039;TargetCpu&#039;&#039;&#039;, an u64 &#039;&#039;&#039;EntrypointAddress&#039;&#039;&#039; and an u64 &#039;&#039;&#039;ContextId&#039;&#039;&#039;. Returns [[#Result]].&lt;br /&gt;
&lt;br /&gt;
Turns on the CPU (CPU1, CPU2 or CPU3).&lt;br /&gt;
&lt;br /&gt;
=== GetConfig ===&lt;br /&gt;
Takes a [[#ConfigItem]]. Returns [[#Result]] and a &#039;&#039;&#039;ConfigValue&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== ConfigItem ====&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;
| 1 || [[#DisableProgramVerification]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#DramId]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#SecurityEngineInterruptNumber]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#FuseVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#HardwareType]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#HardwareState]]&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 || [[#MemoryMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#IsDevelopmentFunctionEnabled]]&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+] [[#QuestState]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [5.0.0+] [[#RegulatorType]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [5.0.0+] [[#DeviceUniqueKeyGeneration]]&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;
{| 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;
| EristaIcosaSamsung4gb&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| EristaIcosaHynix4gb&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| EristaIcosaMicron4gb&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [11.0.0+] MarikoIowaHynix1y4gb ([1.0.0-10.2.0] EristaCopperSamsung4gb)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| EristaIcosaSamsung6gb&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| [12.0.0+] MarikoHoagHynix1y4gb ([4.0.0+] EristaCopperHynix4gb)&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| [13.0.0+] MarikoAulaHynix1y4gb ([4.0.0+] EristaCopperMicron4gb)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| [5.0.0+] MarikoIowax1x2Samsung4gb ([4.0.0-4.1.0] Reserved)&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| [5.0.0+] MarikoIowaSamsung4gb&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| [5.0.0+] MarikoIowaSamsung8gb&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| [6.0.0+] MarikoIowaHynix4gb ([5.0.0-5.1.0] Reserved)&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| [7.0.0+] MarikoIowaMicron4gb ([5.0.0-6.2.0] Reserved)&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| [5.0.0+] MarikoHoagSamsung4gb&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| [5.0.0+] MarikoHoagSamsung8gb&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| [7.0.0+] MarikoHoagHynix4gb ([5.0.0-6.2.0] Reserved)&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| [7.0.0+] MarikoHoagMicron4gb ([5.0.0-6.2.0] Reserved)&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| [8.0.0+] MarikoIowaSamsung4gbY&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| [9.0.0+] MarikoIowaSamsung1y4gbX&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| [9.0.0+] MarikoIowaSamsung1y8gbX&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| [9.0.0+] MarikoHoagSamsung1y4gbX&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| [9.0.0+] MarikoIowaSamsung1y4gbY&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| [9.0.0+] MarikoIowaSamsung1y8gbY&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| [13.0.0+] Reserved ([9.0.0+] MarikoAulaSamsung1y4gb)&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| [10.0.0+] MarikoHoagSamsung1y8gbX&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| [10.0.0+] MarikoAulaSamsung1y4gbX&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| [11.0.0+] MarikoIowaMicron1y4gb&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| [11.0.0+] MarikoHoagMicron1y4gb&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| [11.0.0+] MarikoAulaMicron1y4gb&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| [11.0.0+] MarikoAulaSamsung1y8gbX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is extracted directly from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]].&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;
! SocType&lt;br /&gt;
! Platform&lt;br /&gt;
! DramId&lt;br /&gt;
! Revision&lt;br /&gt;
! DVFS&lt;br /&gt;
|-&lt;br /&gt;
| Erista&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;
| Erista&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;
| Erista&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;
| Erista&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;
| Erista&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;
| Erista&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;
| Erista&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoIowaSamsung4gbY&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoIowaSamsung1y4gbX&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoIowaSamsung1y8gbX&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoHoagSamsung1y4gbX&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoIowaSamsung1y4gbY&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoIowaSamsung1y8gbY&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;
| Mariko&lt;br /&gt;
| nx-abca2, nx-abcb, nx-abcc, nx-abcd&lt;br /&gt;
| MarikoIowaSamsung1y4gbA&lt;br /&gt;
| 0x03&lt;br /&gt;
|  &lt;br /&gt;
 01_204000_NoCfgVersion_V0.4.5_V2.0&lt;br /&gt;
 01_1331200.0_NoCfgVersion_V0.4.5_V2.0&lt;br /&gt;
 01_1600000_NoCfgVersion_V0.4.5_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; in &#039;&#039;&#039;Erista&#039;&#039;&#039;, &#039;&#039;&#039;Iowa&#039;&#039;&#039; in &#039;&#039;&#039;Mariko&#039;&#039;&#039;) hardware types are variations of the retail, EDEV and SDEV form factors.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nx-abcb&#039;&#039;&#039; (&#039;&#039;&#039;Copper&#039;&#039;&#039; in &#039;&#039;&#039;Erista&#039;&#039;&#039;, &#039;&#039;&#039;Calcio&#039;&#039;&#039; in &#039;&#039;&#039;Mariko&#039;&#039;&#039;) is a simulation 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; (&#039;&#039;&#039;Hoag&#039;&#039;&#039;) was added for the Lite retail and HDEV form factors.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] &#039;&#039;&#039;nx-abcd&#039;&#039;&#039; (&#039;&#039;&#039;Aula&#039;&#039;&#039;) was added for the OLED retail and ADEV form factors.&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;
===== SecurityEngineInterruptNumber =====&lt;br /&gt;
SPL uses this for setting up the security engine IRQ.&lt;br /&gt;
&lt;br /&gt;
===== FuseVersion =====&lt;br /&gt;
The current [[Package2#Versions|bootloader maximum version]] - 1.&lt;br /&gt;
&lt;br /&gt;
===== HardwareType =====&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Icosa&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Copper&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [8.0.0+] Hoag ([1.0.0-7.0.1] Invalid)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [4.0.0+] Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [8.0.0+] Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [10.0.0+] Aula&lt;br /&gt;
|-&lt;br /&gt;
| 15 || Invalid&lt;br /&gt;
|}&lt;br /&gt;
&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]].&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]].&lt;br /&gt;
&lt;br /&gt;
[7.0.0+] This item can now only be 0 (Icosa) or 15 (Invalid) in Erista units.&lt;br /&gt;
&lt;br /&gt;
Hardware is &#039;&#039;&#039;Icosa&#039;&#039;&#039; (Erista retail, EDEV and SDEV) if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType1]] (bit 2) is 1 and [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType2]] (bit 8) is 0.&lt;br /&gt;
&lt;br /&gt;
Hardware is &#039;&#039;&#039;Copper&#039;&#039;&#039; (Erista simulation) if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType1]] (bit 2) is 0 and [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType2]] (bit 8) is 1.&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] Hardware is &#039;&#039;&#039;Iowa&#039;&#039;&#039; (Mariko retail, EDEV and SDEV) if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType3]] (bits 16-19) is 1.&lt;br /&gt;
&lt;br /&gt;
[8.0.0+] Hardware is &#039;&#039;&#039;Hoag&#039;&#039;&#039; (Mariko Lite retail and HDEV) if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType3]] (bits 16-19) is 2.&lt;br /&gt;
&lt;br /&gt;
[8.0.0+] Hardware is &#039;&#039;&#039;Calcio&#039;&#039;&#039; (Mariko simulation) if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType1]] (bit 2) is 0 and [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType2]] (bit 8) is 1.&lt;br /&gt;
&lt;br /&gt;
[10.0.0+] Hardware is &#039;&#039;&#039;Aula&#039;&#039;&#039; if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareType3]] (bits 16-19) is 4.&lt;br /&gt;
&lt;br /&gt;
===== HardwareState =====&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Development&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Production&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Invalid&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This item is obtained by checking bits 9 and 0-1 from [[Fuse_registers#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]].&lt;br /&gt;
&lt;br /&gt;
Hardware is &#039;&#039;&#039;Development&#039;&#039;&#039; if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareState1]] (bits 0-1) is 3 and [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareState2]] (bit 9) is 0.&lt;br /&gt;
&lt;br /&gt;
Hardware is &#039;&#039;&#039;Production&#039;&#039;&#039; if [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareState1]] (bits 0-1) is 0 and [[Fuse_registers#FUSE_RESERVED_ODM4|HardwareState2]] (bit 9) is 1.&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;
{| 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;
Used to determine how the system booted.&lt;br /&gt;
&lt;br /&gt;
===== MemoryMode =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| Purpose (0 = None, 1 = ForStandard, 2 = ForAppletDev, 3 = ForSystemDev)&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Size (0 = 4GB, 1 = 6GB, 2 = 8GB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Process Manager services|PM]] and the kernel decide memory arrangement based on MemoryMode.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MemoryArrange&lt;br /&gt;
! MemoryMode&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0x01&lt;br /&gt;
| Standard &lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0x02&lt;br /&gt;
| StandardForAppletDev&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 0x03&lt;br /&gt;
| StandardForSystemDev&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 0x11&lt;br /&gt;
| Expanded&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 0x12&lt;br /&gt;
| ExpandedForAppletDev&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 0x21&lt;br /&gt;
| ExpandedForMarikoDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== IsDevelopmentFunctionEnabled =====&lt;br /&gt;
Kernel uses this to determine behavior of [[SVC#svcBreak|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;
===== KernelConfiguration =====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| EnableNonZeroFillMemory&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| EnableUserExceptionHandler&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| PerformanceMonitoringUnit&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| [8.0.0+] EnableApplicationExtraThread&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| CallShowErrorOnPanic&lt;br /&gt;
|-&lt;br /&gt;
| 16-17&lt;br /&gt;
| MemorySize&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Kernel reads this when setting up memory-related code.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;EnableNonZeroFillMemory&#039;&#039;&#039; 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;
&#039;&#039;&#039;EnableUserExceptionHandler&#039;&#039;&#039; 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;
&#039;&#039;&#039;PerformanceMonitoringUnit&#039;&#039;&#039; 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;
&#039;&#039;&#039;EnableApplicationExtraThread&#039;&#039;&#039; is a boolean determining whether the kernel should increase the KThread slabheap capacity by 160. This also increases object capacities that are calculated based on number of threads.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CallShowErrorOnPanic&#039;&#039;&#039; is a boolean determining whether kernel should call smcPanic on error instead of infinite-looping.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MemorySize&#039;&#039;&#039; determines 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;
===== QuestState =====&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Disabled&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Enabled&lt;br /&gt;
|}&lt;br /&gt;
&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;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value&lt;br /&gt;
! SocType&lt;br /&gt;
! GPU&lt;br /&gt;
! Power Blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Erista&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;
| Mariko&lt;br /&gt;
| GM20B_B (0x12E)&lt;br /&gt;
| max77620_sd0, max77812_cpu and max77812_gpu&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Mariko&lt;br /&gt;
| GM20B_B (0x12E)&lt;br /&gt;
| max77620_sd0, max77812_cpu and max77812_gpu&lt;br /&gt;
|}&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;
&lt;br /&gt;
===== DeviceUniqueKeyGeneration =====&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;
===== 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;
=== ShowError ===&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;Color&#039;&#039;&#039; and issues a system panic.&lt;br /&gt;
&lt;br /&gt;
The kernel always calls this with &#039;&#039;&#039;Color&#039;&#039;&#039; set to 0xF00.&lt;br /&gt;
&lt;br /&gt;
=== SetKernelCarveoutRegion ===&lt;br /&gt;
Takes an u64 &#039;&#039;&#039;Index&#039;&#039;&#039;, an u64 &#039;&#039;&#039;Address&#039;&#039;&#039; and an u64 &#039;&#039;&#039;Size&#039;&#039;&#039;. Returns [[#Result]].&lt;br /&gt;
&lt;br /&gt;
If &#039;&#039;&#039;Index&#039;&#039;&#039; is 0, &#039;&#039;&#039;Address&#039;&#039;&#039; and &#039;&#039;&#039;Size&#039;&#039;&#039; are used to configure &#039;&#039;&#039;MC_SECURITY_CARVEOUT4&#039;&#039;&#039;.&lt;br /&gt;
If &#039;&#039;&#039;Index&#039;&#039;&#039; is 1, &#039;&#039;&#039;Address&#039;&#039;&#039; and &#039;&#039;&#039;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;Index&#039;&#039;&#039; values are invalid.&lt;br /&gt;
&lt;br /&gt;
The kernel calls this with &#039;&#039;&#039;Index&#039;&#039;&#039; set to 0, &#039;&#039;&#039;Address&#039;&#039;&#039; set to 0x80060000 and &#039;&#039;&#039;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;
Takes an u64 &#039;&#039;&#039;Register&#039;&#039;&#039;, an u32 &#039;&#039;&#039;Mask&#039;&#039;&#039; and an u32 &#039;&#039;&#039;InValue&#039;&#039;&#039;. Returns [[#Result]] and an u32 &#039;&#039;&#039;OutValue&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Relays [[SVC#svcReadWriteRegister|svcReadWriteRegister]] to the Secure Monitor.&lt;br /&gt;
&lt;br /&gt;
= CryptoUsecase =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Aes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RsaPrivate&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SecureExpMod&lt;br /&gt;
|-&lt;br /&gt;
| 3 || RsaOaep&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [5.0.0+] RsaImport&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [5.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [5.0.0+]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CipherMode =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CbcEncrypt&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CbcDecrypt&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Ctr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DecryptOrImportMode =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DecryptRsaPrivateKey&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ImportLotusKey&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ImportEsKey&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ImportSslKey&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ImportDrmKey&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= SecureExpModMode =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Lotus&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Ssl&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Drm&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= EsKeyType =&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || TitleKey&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ElicenseKey&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Result =&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;
| 6 || [8.0.0+] Not permitted&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>CapNem</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=11316</id>
		<title>Product Information</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=11316"/>
		<updated>2021-11-03T06:21:18Z</updated>

		<summary type="html">&lt;p&gt;CapNem: /* Prefix */ Added N64 Controller Prefix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page details miscellaneous Switch product information (serial numbers, product models, etc...).&lt;br /&gt;
&lt;br /&gt;
= Product List =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001 || Retail Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAC-002 || AC adapter&lt;br /&gt;
|-&lt;br /&gt;
| HAC-003 || Nintendo Switch Battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-004 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-005 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-006 || Joy-Con battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-007 || Dock&lt;br /&gt;
|-&lt;br /&gt;
| HAC-008 || Gamecard&lt;br /&gt;
|-&lt;br /&gt;
| HAC-009 || Gamecard case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-010 || USB charging cable also included in (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-011 || Joy-Con grip&lt;br /&gt;
|-&lt;br /&gt;
| HAC-012 || Joy-Con charge grip&lt;br /&gt;
|-&lt;br /&gt;
| HAC-013 || Pro Controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-014 || Joy-Con strap&lt;br /&gt;
|-&lt;br /&gt;
| HAC-015 || Left Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-016 || Right Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-017 || Joy-Con handle&lt;br /&gt;
|-&lt;br /&gt;
| HAC-018 || Screen protector&lt;br /&gt;
|-&lt;br /&gt;
| HAC-019 || Left Joy-Con extended battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-020 || Right Joy-Con extended battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-021 || Carrying case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-022 || Ring-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-023 || Leg Strap&lt;br /&gt;
|-&lt;br /&gt;
| HAC-024 || Poké Ball Plus controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-025 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-026 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-027 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-028 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-029 || Steelbook Gamecard case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-030 || Poké Ball Plus battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-031 || Charging stand&lt;br /&gt;
|-&lt;br /&gt;
| HAC-032 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-033 || Left NES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-034 || Right NES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-035 || Left Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-036 || Right Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-037 || Kart (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-038 || Battery for kart (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-039 || Gates (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-040 || Touch Pen (&amp;quot;Super Mario Maker 2&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-041 || Touch Pen (&amp;quot;Brain Training for Switch&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-042 || SNES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-043 || N64 controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-044 || Arrow Markers (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-045 || Sega Genesis controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-046 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-047 || USB charging cable (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;) known as HAC-010 instead&lt;br /&gt;
|-&lt;br /&gt;
| HAC-048 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-049 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-050 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-051 || Nintendo Labo Toy-Con 1: Variety Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-052 || Nintendo Labo Toy-Con 2: Robot Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-053 || Nintendo Labo Toy-Con 3: Vehicle Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-054 || Nintendo Labo Toy-Con 4: VR Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-055 || Nintendo Labo Storage Box&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001(-01) || Retail Nintendo Switch Mariko console (also known as HAD[...])&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAT-001 || SDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-001(-01) || SDEV-D Nintendo Switch Mariko console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-002 || EDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-002(-01) || EDEV-D Nintendo Switch Mariko console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-003 || SDEV cradle&lt;br /&gt;
|-&lt;br /&gt;
| HAT-004 || Relay Box&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HDH-001 || Retail Nintendo Switch Lite console&lt;br /&gt;
|-&lt;br /&gt;
| HDH-002 || HDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HDH-003 || Battery&lt;br /&gt;
|-&lt;br /&gt;
| HDH-004 || Carrying case&lt;br /&gt;
|-&lt;br /&gt;
| HDH-005 || Screen protector&lt;br /&gt;
|-&lt;br /&gt;
| HDH-006 || Flip cover&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HEG-001 || Retail Nintendo Switch (OLED Model) console&lt;br /&gt;
|-&lt;br /&gt;
| HEG-002 || ADEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HEG-004 || ADEV Relay Box&lt;br /&gt;
|-&lt;br /&gt;
| HEG-005 || Nintendo Switch (OLED Model) HDMI cable&lt;br /&gt;
|-&lt;br /&gt;
| HEG-007 || Nintendo Switch (OLED Model) dock&lt;br /&gt;
|-&lt;br /&gt;
| HEG-021 || Nintendo Switch (OLED Model) carrying case&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Product Serial Numbers =&lt;br /&gt;
Serial numbers are composed of at least [[#Prefix|three letters]] followed by ten decimal digits. The tenth digit is a [[#Check_Digit|check digit]], meaning that it is derived from the other digits.&lt;br /&gt;
&lt;br /&gt;
== Prefix ==&lt;br /&gt;
Observed prefixes are normally as follows:&lt;br /&gt;
&lt;br /&gt;
* First letter represents the product line:&lt;br /&gt;
** &amp;quot;X&amp;quot; (NX)&lt;br /&gt;
* Second letter represents the product model:&lt;br /&gt;
** &amp;quot;A&amp;quot; (HAC-001; Nintendo Switch console)&lt;br /&gt;
** &amp;quot;B&amp;quot; (HAC-015; Left Joy-Con)&lt;br /&gt;
** &amp;quot;C&amp;quot; (HAC-016; Right Joy-Con)&lt;br /&gt;
** &amp;quot;D&amp;quot; (HAC-012; Joy-Con charge grip)&lt;br /&gt;
** &amp;quot;E&amp;quot; (HAC-013; Pro Controller)&lt;br /&gt;
** &amp;quot;F&amp;quot; (HAC-007; Dock)&lt;br /&gt;
** &amp;quot;H&amp;quot; (HAC-024; Poké Ball Plus controller)&lt;br /&gt;
** &amp;quot;J&amp;quot; (HDH-001; Nintendo Switch Lite console)&lt;br /&gt;
** &amp;quot;K&amp;quot; (HAC-001-01; Nintendo Switch Mariko console)&lt;br /&gt;
** &amp;quot;L&amp;quot; (HAC-033; Left NES controller)&lt;br /&gt;
** &amp;quot;M&amp;quot; (HAC-034; Right NES controller)&lt;br /&gt;
** &amp;quot;Q&amp;quot; (HAC-037; Kart for &amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
** &amp;quot;R&amp;quot; (HAC-042; SNES controller)&lt;br /&gt;
** &amp;quot;S&amp;quot; (HAC-043; N64 controller)&lt;br /&gt;
** &amp;quot;T&amp;quot; (HEG-001; Nintendo Switch (OLED Model) console)&lt;br /&gt;
** &amp;quot;V&amp;quot; (HEG-007; Nintendo Switch (OLED Model) dock)&lt;br /&gt;
** &amp;quot;X&amp;quot; (HAC-045; Sega Genesis controller)&lt;br /&gt;
** &amp;quot;Y&amp;quot; (HAT-004/HEG-004; EDEV/ADEV Relay Box)&lt;br /&gt;
** &amp;quot;Z&amp;quot; (HAT-003; SDEV cradle)&lt;br /&gt;
* Third letter represents the product region:&lt;br /&gt;
** &amp;quot;C&amp;quot; (China)&lt;br /&gt;
** &amp;quot;E&amp;quot; (Europe)&lt;br /&gt;
** &amp;quot;J&amp;quot; (Japan; and Europe on old models)&lt;br /&gt;
** &amp;quot;K&amp;quot; (Korea)&lt;br /&gt;
** &amp;quot;L&amp;quot; (All; for development only)&lt;br /&gt;
** &amp;quot;W&amp;quot; (Americas)&lt;br /&gt;
* Fourth letter is optional:&lt;br /&gt;
** &amp;quot;F&amp;quot; (Factory)&lt;br /&gt;
&lt;br /&gt;
== Assembly Line ==&lt;br /&gt;
The first two digits immediately after the [[#Prefix|prefix]] represent the assembly line 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;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 00 || Unspecified&lt;br /&gt;
|-&lt;br /&gt;
| 01 || Prototype&lt;br /&gt;
|-&lt;br /&gt;
| 02 || SDEV&lt;br /&gt;
|-&lt;br /&gt;
| 03 || EDEV&lt;br /&gt;
|-&lt;br /&gt;
| 04 || DPRD&lt;br /&gt;
|-&lt;br /&gt;
| 05 || HDEV&lt;br /&gt;
|-&lt;br /&gt;
| 06 || SDEV-D&lt;br /&gt;
|-&lt;br /&gt;
| 07 || EDEV-D&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 40 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 70 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 90 || Refurbished&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Check Digit ==&lt;br /&gt;
The check digit is an industry-standard algorithm and is calculated just like it was on the [https://www.3dbrew.org/wiki/Serials#Console_Serial_Numbers 3DS].&lt;br /&gt;
&lt;br /&gt;
To calculate the check digit of a Switch console, separate the non-check digits into &amp;quot;odd&amp;quot; and &amp;quot;even&amp;quot; groups, where the &amp;quot;odd&amp;quot; group is digits in odd-numbered positions, and the &amp;quot;even&amp;quot; group is digits in even-numbered positions. (The first digit is &amp;quot;odd&amp;quot;, with &amp;quot;first&amp;quot; representing &amp;quot;1&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
After separating the digits, add the digits in each group together. Multiply the sum of the even digits by 3, then add the sum of the odd digits. To calculate the check digit, take this value modulo 10, and if not 0, subtract from 10.&lt;br /&gt;
&lt;br /&gt;
Example: XAW10075273452&lt;br /&gt;
&lt;br /&gt;
The non-check digits are 1007527345. Separating into odd and even groups, we get the following:&lt;br /&gt;
&lt;br /&gt;
Odds: 1 + 0 + 5 + 7 + 4 = 17 Evens: 0 + 7 + 2 + 3 + 5 = 17&lt;br /&gt;
&lt;br /&gt;
Applying the algorithm, we get ((3 * 17) + 17) % 10 = 8, which is not 0, thus 10 - 8 = 2, matching the example&#039;s check digit.&lt;/div&gt;</summary>
		<author><name>CapNem</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=11250</id>
		<title>Product Information</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=11250"/>
		<updated>2021-10-17T15:47:55Z</updated>

		<summary type="html">&lt;p&gt;CapNem: /* Prefix */ Generalize Y prefix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page details miscellaneous Switch product information (serial numbers, product models, etc...).&lt;br /&gt;
&lt;br /&gt;
= Product List =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001 || Retail Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAC-002 || AC adapter&lt;br /&gt;
|-&lt;br /&gt;
| HAC-003 || Nintendo Switch Battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-004 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-005 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-006 || Joy-Con battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-007 || Dock&lt;br /&gt;
|-&lt;br /&gt;
| HAC-008 || Gamecard&lt;br /&gt;
|-&lt;br /&gt;
| HAC-009 || Gamecard case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-010 || USB charging cable also included in (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-011 || Joy-Con grip&lt;br /&gt;
|-&lt;br /&gt;
| HAC-012 || Joy-Con charge grip&lt;br /&gt;
|-&lt;br /&gt;
| HAC-013 || Pro Controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-014 || Joy-Con strap&lt;br /&gt;
|-&lt;br /&gt;
| HAC-015 || Left Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-016 || Right Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-017 || Joy-Con handle&lt;br /&gt;
|-&lt;br /&gt;
| HAC-018 || Screen protector&lt;br /&gt;
|-&lt;br /&gt;
| HAC-019 || Left Joy-Con extended battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-020 || Right Joy-Con extended battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-021 || Carrying case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-022 || Ring-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-023 || Leg Strap&lt;br /&gt;
|-&lt;br /&gt;
| HAC-024 || Poké Ball Plus controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-025 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-026 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-027 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-028 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-029 || Steelbook Gamecard case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-030 || Poké Ball Plus battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-031 || Charging stand&lt;br /&gt;
|-&lt;br /&gt;
| HAC-032 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-033 || Left NES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-034 || Right NES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-035 || Left Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-036 || Right Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-037 || Kart (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-038 || Battery for kart (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-039 || Gates (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-040 || Touch Pen (&amp;quot;Super Mario Maker 2&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-041 || Touch Pen (&amp;quot;Brain Training for Switch&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-042 || SNES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-043 || N64 controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-044 || Arrow Markers (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-045 || Sega Genesis controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-046 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-047 || USB charging cable (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;) known as HAC-010 instead&lt;br /&gt;
|-&lt;br /&gt;
| HAC-048 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-049 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-050 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-051 || Nintendo Labo Toy-Con 1: Variety Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-052 || Nintendo Labo Toy-Con 2: Robot Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-053 || Nintendo Labo Toy-Con 3: Vehicle Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-054 || Nintendo Labo Toy-Con 4: VR Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-055 || Nintendo Labo Storage Box&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001(-01) || Retail Nintendo Switch Mariko console (also known as HAD[...])&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAT-001 || SDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-001(-01) || SDEV-D Nintendo Switch Mariko console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-002 || EDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-002(-01) || EDEV-D Nintendo Switch Mariko console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-003 || SDEV cradle&lt;br /&gt;
|-&lt;br /&gt;
| HAT-004 || Relay Box&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HDH-001 || Retail Nintendo Switch Lite console&lt;br /&gt;
|-&lt;br /&gt;
| HDH-002 || HDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HDH-003 || Battery&lt;br /&gt;
|-&lt;br /&gt;
| HDH-004 || Carrying case&lt;br /&gt;
|-&lt;br /&gt;
| HDH-005 || Screen protector&lt;br /&gt;
|-&lt;br /&gt;
| HDH-006 || Flip cover&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HEG-001 || Retail Nintendo Switch (OLED Model) console&lt;br /&gt;
|-&lt;br /&gt;
| HEG-002 || ADEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HEG-004 || ADEV Relay Box&lt;br /&gt;
|-&lt;br /&gt;
| HEG-005 || Nintendo Switch (OLED Model) HDMI cable&lt;br /&gt;
|-&lt;br /&gt;
| HEG-007 || Nintendo Switch (OLED Model) dock&lt;br /&gt;
|-&lt;br /&gt;
| HEG-021 || Nintendo Switch (OLED Model) carrying case&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Product Serial Numbers =&lt;br /&gt;
Serial numbers are composed of at least [[#Prefix|three letters]] followed by ten decimal digits. The tenth digit is a [[#Check_Digit|check digit]], meaning that it is derived from the other digits.&lt;br /&gt;
&lt;br /&gt;
== Prefix ==&lt;br /&gt;
Observed prefixes are normally as follows:&lt;br /&gt;
&lt;br /&gt;
* First letter represents the product line:&lt;br /&gt;
** &amp;quot;X&amp;quot; (NX)&lt;br /&gt;
* Second letter represents the product model:&lt;br /&gt;
** &amp;quot;A&amp;quot; (HAC-001; Nintendo Switch console)&lt;br /&gt;
** &amp;quot;B&amp;quot; (HAC-015; Left Joy-Con)&lt;br /&gt;
** &amp;quot;C&amp;quot; (HAC-016; Right Joy-Con)&lt;br /&gt;
** &amp;quot;D&amp;quot; (HAC-012; Joy-Con charge grip)&lt;br /&gt;
** &amp;quot;E&amp;quot; (HAC-013; Pro Controller)&lt;br /&gt;
** &amp;quot;F&amp;quot; (HAC-007; Dock)&lt;br /&gt;
** &amp;quot;H&amp;quot; (HAC-024; Poké Ball Plus controller)&lt;br /&gt;
** &amp;quot;J&amp;quot; (HDH-001; Nintendo Switch Lite console)&lt;br /&gt;
** &amp;quot;K&amp;quot; (HAC-001-01; Nintendo Switch Mariko console)&lt;br /&gt;
** &amp;quot;L&amp;quot; (HAC-033; Left NES controller)&lt;br /&gt;
** &amp;quot;M&amp;quot; (HAC-034; Right NES controller)&lt;br /&gt;
** &amp;quot;Q&amp;quot; (HAC-037; Kart for &amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
** &amp;quot;R&amp;quot; (HAC-042; SNES controller)&lt;br /&gt;
** &amp;quot;T&amp;quot; (HEG-001; Nintendo Switch (OLED Model) console)&lt;br /&gt;
** &amp;quot;V&amp;quot; (HEG-007; Nintendo Switch (OLED Model) dock)&lt;br /&gt;
** &amp;quot;X&amp;quot; (HAC-045; Sega Genesis controller)&lt;br /&gt;
** &amp;quot;Y&amp;quot; (HAT-004/HEG-004; EDEV/ADEV Relay Box)&lt;br /&gt;
** &amp;quot;Z&amp;quot; (HAT-003; SDEV cradle)&lt;br /&gt;
* Third letter represents the product region:&lt;br /&gt;
** &amp;quot;C&amp;quot; (China)&lt;br /&gt;
** &amp;quot;E&amp;quot; (Europe)&lt;br /&gt;
** &amp;quot;J&amp;quot; (Japan; and Europe on old models)&lt;br /&gt;
** &amp;quot;K&amp;quot; (Korea)&lt;br /&gt;
** &amp;quot;L&amp;quot; (All; for development only)&lt;br /&gt;
** &amp;quot;W&amp;quot; (Americas)&lt;br /&gt;
* Fourth letter is optional:&lt;br /&gt;
** &amp;quot;F&amp;quot; (Factory)&lt;br /&gt;
&lt;br /&gt;
== Assembly Line ==&lt;br /&gt;
The first two digits immediately after the [[#Prefix|prefix]] represent the assembly line 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;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 00 || Unspecified&lt;br /&gt;
|-&lt;br /&gt;
| 01 || Prototype&lt;br /&gt;
|-&lt;br /&gt;
| 02 || SDEV&lt;br /&gt;
|-&lt;br /&gt;
| 03 || EDEV&lt;br /&gt;
|-&lt;br /&gt;
| 04 || DPRD&lt;br /&gt;
|-&lt;br /&gt;
| 05 || HDEV&lt;br /&gt;
|-&lt;br /&gt;
| 06 || SDEV-D&lt;br /&gt;
|-&lt;br /&gt;
| 07 || EDEV-D&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 40 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 70 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 90 || Refurbished&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Check Digit ==&lt;br /&gt;
The check digit is an industry-standard algorithm and is calculated just like it was on the [https://www.3dbrew.org/wiki/Serials#Console_Serial_Numbers 3DS].&lt;br /&gt;
&lt;br /&gt;
To calculate the check digit of a Switch console, separate the non-check digits into &amp;quot;odd&amp;quot; and &amp;quot;even&amp;quot; groups, where the &amp;quot;odd&amp;quot; group is digits in odd-numbered positions, and the &amp;quot;even&amp;quot; group is digits in even-numbered positions. (The first digit is &amp;quot;odd&amp;quot;, with &amp;quot;first&amp;quot; representing &amp;quot;1&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
After separating the digits, add the digits in each group together. Multiply the sum of the even digits by 3, then add the sum of the odd digits. To calculate the check digit, take this value modulo 10, and if not 0, subtract from 10.&lt;br /&gt;
&lt;br /&gt;
Example: XAW10075273452&lt;br /&gt;
&lt;br /&gt;
The non-check digits are 1007527345. Separating into odd and even groups, we get the following:&lt;br /&gt;
&lt;br /&gt;
Odds: 1 + 0 + 5 + 7 + 4 = 17 Evens: 0 + 7 + 2 + 3 + 5 = 17&lt;br /&gt;
&lt;br /&gt;
Applying the algorithm, we get ((3 * 17) + 17) % 10 = 8, which is not 0, thus 10 - 8 = 2, matching the example&#039;s check digit.&lt;/div&gt;</summary>
		<author><name>CapNem</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=11234</id>
		<title>Product Information</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=11234"/>
		<updated>2021-10-12T20:25:00Z</updated>

		<summary type="html">&lt;p&gt;CapNem: /* Prefix */ Add the Joy-Con charging grip prefix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page details miscellaneous Switch product information (serial numbers, product models, etc...).&lt;br /&gt;
&lt;br /&gt;
= Product List =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001 || Retail Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAC-002 || AC adapter&lt;br /&gt;
|-&lt;br /&gt;
| HAC-003 || Nintendo Switch Battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-004 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-005 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-006 || Joy-Con battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-007 || Dock&lt;br /&gt;
|-&lt;br /&gt;
| HAC-008 || Gamecard&lt;br /&gt;
|-&lt;br /&gt;
| HAC-009 || Gamecard case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-010 || USB charging cable also included in (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-011 || Joy-Con grip&lt;br /&gt;
|-&lt;br /&gt;
| HAC-012 || Joy-Con charge grip&lt;br /&gt;
|-&lt;br /&gt;
| HAC-013 || Pro Controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-014 || Joy-Con strap&lt;br /&gt;
|-&lt;br /&gt;
| HAC-015 || Left Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-016 || Right Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-017 || Joy-Con handle&lt;br /&gt;
|-&lt;br /&gt;
| HAC-018 || Screen protector&lt;br /&gt;
|-&lt;br /&gt;
| HAC-019 || Left Joy-Con extended battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-020 || Right Joy-Con extended battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-021 || Carrying case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-022 || Ring-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-023 || Leg Strap&lt;br /&gt;
|-&lt;br /&gt;
| HAC-024 || Poké Ball Plus controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-025 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-026 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-027 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-028 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-029 || Steelbook Gamecard case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-030 || Poké Ball Plus battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-031 || Charging stand&lt;br /&gt;
|-&lt;br /&gt;
| HAC-032 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-033 || Left NES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-034 || Right NES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-035 || Left Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-036 || Right Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-037 || Kart (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-038 || Battery for kart (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-039 || Gates (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-040 || Touch Pen (&amp;quot;Super Mario Maker 2&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-041 || Touch Pen (&amp;quot;Brain Training for Switch&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-042 || SNES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-043 || N64 controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-044 || Arrow Markers (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-045 || Sega Genesis controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-046 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-047 || USB charging cable (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;) known as HAC-010 instead&lt;br /&gt;
|-&lt;br /&gt;
| HAC-048 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-049 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-050 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-051 || Nintendo Labo Toy-Con 1: Variety Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-052 || Nintendo Labo Toy-Con 2: Robot Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-053 || Nintendo Labo Toy-Con 3: Vehicle Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-054 || Nintendo Labo Toy-Con 4: VR Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-055 || Nintendo Labo Storage Box&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001(-01) || Retail Nintendo Switch Mariko console (also known as HAD[...])&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAT-001 || SDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-001(-01) || SDEV-D Nintendo Switch Mariko console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-002 || EDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-002(-01) || EDEV-D Nintendo Switch Mariko console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-003 || SDEV cradle&lt;br /&gt;
|-&lt;br /&gt;
| HAT-004 || Relay Box&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HDH-001 || Retail Nintendo Switch Lite console&lt;br /&gt;
|-&lt;br /&gt;
| HDH-002 || HDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HDH-003 || Battery&lt;br /&gt;
|-&lt;br /&gt;
| HDH-004 || Carrying case&lt;br /&gt;
|-&lt;br /&gt;
| HDH-005 || Screen protector&lt;br /&gt;
|-&lt;br /&gt;
| HDH-006 || Flip cover&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HEG-001 || Retail Nintendo Switch (OLED Model) console&lt;br /&gt;
|-&lt;br /&gt;
| HEG-002 || ADEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HEG-004 || ADEV Relay Box&lt;br /&gt;
|-&lt;br /&gt;
| HEG-005 || Nintendo Switch (OLED Model) HDMI cable&lt;br /&gt;
|-&lt;br /&gt;
| HEG-007 || Nintendo Switch (OLED Model) dock&lt;br /&gt;
|-&lt;br /&gt;
| HEG-021 || Nintendo Switch (OLED Model) carrying case&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Product Serial Numbers =&lt;br /&gt;
Serial numbers are composed of at least [[#Prefix|three letters]] followed by ten decimal digits. The tenth digit is a [[#Check_Digit|check digit]], meaning that it is derived from the other digits.&lt;br /&gt;
&lt;br /&gt;
== Prefix ==&lt;br /&gt;
Observed prefixes are normally as follows:&lt;br /&gt;
&lt;br /&gt;
* First letter represents the product line:&lt;br /&gt;
** &amp;quot;X&amp;quot; (NX)&lt;br /&gt;
* Second letter represents the product model:&lt;br /&gt;
** &amp;quot;A&amp;quot; (HAC-001; Nintendo Switch console)&lt;br /&gt;
** &amp;quot;B&amp;quot; (HAC-015; Left Joy-Con)&lt;br /&gt;
** &amp;quot;C&amp;quot; (HAC-016; Right Joy-Con)&lt;br /&gt;
** &amp;quot;D&amp;quot; (HAC-012; Joy-Con charge grip)&lt;br /&gt;
** &amp;quot;E&amp;quot; (HAC-013; Pro Controller)&lt;br /&gt;
** &amp;quot;F&amp;quot; (HAC-007; Dock)&lt;br /&gt;
** &amp;quot;H&amp;quot; (HAC-024; Poké Ball Plus controller)&lt;br /&gt;
** &amp;quot;J&amp;quot; (HDH-001; Nintendo Switch Lite console)&lt;br /&gt;
** &amp;quot;K&amp;quot; (HAC-001-01; Nintendo Switch Mariko console)&lt;br /&gt;
** &amp;quot;L&amp;quot; (HAC-033; Left NES controller)&lt;br /&gt;
** &amp;quot;M&amp;quot; (HAC-034; Right NES controller)&lt;br /&gt;
** &amp;quot;Q&amp;quot; (HAC-037; Kart for &amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
** &amp;quot;R&amp;quot; (HAC-042; SNES controller)&lt;br /&gt;
** &amp;quot;T&amp;quot; (HEG-001; Nintendo Switch (OLED Model) console)&lt;br /&gt;
** &amp;quot;V&amp;quot; (HEG-007; Nintendo Switch (OLED Model) dock)&lt;br /&gt;
** &amp;quot;X&amp;quot; (HAC-045; Sega Genesis controller)&lt;br /&gt;
** &amp;quot;Y&amp;quot; (HEG-004; ADEV Relay Box)&lt;br /&gt;
** &amp;quot;Z&amp;quot; (HAT-003; SDEV cradle)&lt;br /&gt;
* Third letter represents the product region:&lt;br /&gt;
** &amp;quot;C&amp;quot; (China)&lt;br /&gt;
** &amp;quot;E&amp;quot; (Europe)&lt;br /&gt;
** &amp;quot;J&amp;quot; (Japan; and Europe on old models)&lt;br /&gt;
** &amp;quot;K&amp;quot; (Korea)&lt;br /&gt;
** &amp;quot;L&amp;quot; (All; for development only)&lt;br /&gt;
** &amp;quot;W&amp;quot; (Americas)&lt;br /&gt;
* Fourth letter is optional:&lt;br /&gt;
** &amp;quot;F&amp;quot; (Factory)&lt;br /&gt;
&lt;br /&gt;
== Assembly Line ==&lt;br /&gt;
The first two digits immediately after the [[#Prefix|prefix]] represent the assembly line 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;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 00 || Unspecified&lt;br /&gt;
|-&lt;br /&gt;
| 01 || Prototype&lt;br /&gt;
|-&lt;br /&gt;
| 02 || SDEV&lt;br /&gt;
|-&lt;br /&gt;
| 03 || EDEV&lt;br /&gt;
|-&lt;br /&gt;
| 04 || DPRD&lt;br /&gt;
|-&lt;br /&gt;
| 05 || HDEV&lt;br /&gt;
|-&lt;br /&gt;
| 06 || SDEV-D&lt;br /&gt;
|-&lt;br /&gt;
| 07 || EDEV-D&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 40 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 70 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 90 || Refurbished&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Check Digit ==&lt;br /&gt;
The check digit is an industry-standard algorithm and is calculated just like it was on the [https://www.3dbrew.org/wiki/Serials#Console_Serial_Numbers 3DS].&lt;br /&gt;
&lt;br /&gt;
To calculate the check digit of a Switch console, separate the non-check digits into &amp;quot;odd&amp;quot; and &amp;quot;even&amp;quot; groups, where the &amp;quot;odd&amp;quot; group is digits in odd-numbered positions, and the &amp;quot;even&amp;quot; group is digits in even-numbered positions. (The first digit is &amp;quot;odd&amp;quot;, with &amp;quot;first&amp;quot; representing &amp;quot;1&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
After separating the digits, add the digits in each group together. Multiply the sum of the even digits by 3, then add the sum of the odd digits. To calculate the check digit, take this value modulo 10, and if not 0, subtract from 10.&lt;br /&gt;
&lt;br /&gt;
Example: XAW10075273452&lt;br /&gt;
&lt;br /&gt;
The non-check digits are 1007527345. Separating into odd and even groups, we get the following:&lt;br /&gt;
&lt;br /&gt;
Odds: 1 + 0 + 5 + 7 + 4 = 17 Evens: 0 + 7 + 2 + 3 + 5 = 17&lt;br /&gt;
&lt;br /&gt;
Applying the algorithm, we get ((3 * 17) + 17) % 10 = 8, which is not 0, thus 10 - 8 = 2, matching the example&#039;s check digit.&lt;/div&gt;</summary>
		<author><name>CapNem</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=11231</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=11231"/>
		<updated>2021-10-10T20:31:38Z</updated>

		<summary type="html">&lt;p&gt;CapNem: /* Colors */ Fix the official white joy-con color hex&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Firmware ==&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
== Bluetooth HID ==&lt;br /&gt;
=== Commands ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || PairingOut&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || GetDeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || SetDataFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || LRButtonDetection&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Page&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || Reset&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ClearPairingInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || Shipment&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || SerialFlashRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || SerialFlashWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || SerialFlashSectorErase&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || McuReset&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || McuWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || McuResume&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || McuPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || McuPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || AttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || AttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || &lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || SetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || GetIndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || SetNotificationLed&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || SensorSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || SensorConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || SensorWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || SensorRead&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || MotorEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || GetBatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0x51 || WriteChargeSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x52 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || ExtDevWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x59 || GetExtDevInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A || ExtDevPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B || ExtDevPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || ExtDevInFormatConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x60 || InternalAttachmentWrite&lt;br /&gt;
|-&lt;br /&gt;
| 0x61 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x62 || InternalAttachmentEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x63 || InternalAttachmentPollingEnable&lt;br /&gt;
|-&lt;br /&gt;
| 0x64 || InternalAttachmentPollingDisable&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || Ack&lt;br /&gt;
|-&lt;br /&gt;
| 0x81 || PairingIn&lt;br /&gt;
|-&lt;br /&gt;
| 0x82 || DeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x83 || LRButtonElapsedTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || SerialFlashData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || McuData&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || AttachmentData&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA || InternalAttachmentRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0 || IndicatorLed&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0 || SensorData&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0 || BatteryVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 0xD8 || ExtDevRead&lt;br /&gt;
|-&lt;br /&gt;
| 0xD9 || ExtDevInfo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Left &amp;amp; Right Separate Joy-con ===&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Colors ==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Retail Color || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Black / ブラック || #313131 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Gray / グレー || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red / ネオンレッド || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue / ネオンブルー || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow / ネオンイエロー || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green / ネオングリーン || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink / ネオンピンク || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Red / レッド || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Blue / ブルー || #4655F5 || #00000A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Purple / ネオンパープル || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| Neon Orange / ネオンオレンジ || #FAA005 || #0F0A00&lt;br /&gt;
|-&lt;br /&gt;
| White / ホワイト || #E6E6E6 || #323232&lt;br /&gt;
|-&lt;br /&gt;
! Special Edition Color || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate Edition Gray Joy-Con / 大乱闘スマッシュブラザーズ SPECIAL || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Eevee-Brown Left Joy-Con / ポケットモンスター Let&#039;s Go! イーブイ || #C88C32 || #281900&lt;br /&gt;
|-&lt;br /&gt;
| Pokemon: Let&#039;s Go! Pikachu-Yellow Right Joy-Con / ポケットモンスター Let&#039;s Go! ピカチュウ || #FFDC00 || #322800&lt;br /&gt;
|-&lt;br /&gt;
| *Nintendo Labo Creators Contest Edition &amp;quot;Cardboard&amp;quot;-Colored Joy-Con || #D7AA73 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| **Dragon Quest XI S Lotto Edition Royal-Blue Joy-Con / ドラゴン クエスト XI S （ロト版） || #1473FA || #00000F&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Neon-Purple Left Joy-Con / ディズニー ツムツム フェスティバル || #B400E6 || #140014&lt;br /&gt;
|-&lt;br /&gt;
| **Disney Tsum Tsum Festival Neon-Pink Right Joy-Con / ディズニー ツムツム フェスティバル || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Pastel-Green Left Joy-Con / あつまれ どうぶつの森 || #82FF96 || #0A1E0A&lt;br /&gt;
|-&lt;br /&gt;
| Animal Crossing: New Horizons Pastel-Blue Right Joy-Con / あつまれ どうぶつの森 || #96F5F5 || #0A1E28&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Yellow Left Joy-Con || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Wildcat Edition Dark-Blue Right Joy-Con || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red &amp;amp; Blue Edition Red Joy-Con / マリオ レッド × ブルー || #F04614 || #1E1914&lt;br /&gt;
|-&lt;br /&gt;
| Monster Hunter Rise Edition Gray Joy-Con / モンスターハンターライズ || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Dark-Blue Left Joy-Con || #0084FF || #000F1E&lt;br /&gt;
|-&lt;br /&gt;
| Fortnite Fleet Force Edition Yellow Right Joy-Con || #FFCC00 || #1A1100&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Dark-Blue Left Joy-Con / ゼルダの伝説 スカイウォードソード || #2D50F0 || #1E0F46&lt;br /&gt;
|-&lt;br /&gt;
| Legend of Zelda: Skyward Sword Dark-Purple Right Joy-Con / ゼルダの伝説 スカイウォードソード || #500FC8 || #00051E&lt;br /&gt;
|-&lt;br /&gt;
| // *(Prize Awarded for Labo Contest - No Retail) // **(Available Japan Only)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Additional Links ==&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>CapNem</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=11229</id>
		<title>Product Information</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=11229"/>
		<updated>2021-10-07T02:32:51Z</updated>

		<summary type="html">&lt;p&gt;CapNem: /* Prefix */ Added the pro controller... since it wasn&amp;#039;t here before...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page details miscellaneous Switch product information (serial numbers, product models, etc...).&lt;br /&gt;
&lt;br /&gt;
= Product List =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001 || Retail Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAC-002 || AC adapter&lt;br /&gt;
|-&lt;br /&gt;
| HAC-003 || Nintendo Switch Battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-004 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-005 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-006 || Joy-Con battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-007 || Dock&lt;br /&gt;
|-&lt;br /&gt;
| HAC-008 || Gamecard&lt;br /&gt;
|-&lt;br /&gt;
| HAC-009 || Gamecard case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-010 || USB charging cable also included in (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-011 || Joy-Con grip&lt;br /&gt;
|-&lt;br /&gt;
| HAC-012 || Joy-Con charge grip&lt;br /&gt;
|-&lt;br /&gt;
| HAC-013 || Pro Controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-014 || Joy-Con strap&lt;br /&gt;
|-&lt;br /&gt;
| HAC-015 || Left Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-016 || Right Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-017 || Joy-Con handle&lt;br /&gt;
|-&lt;br /&gt;
| HAC-018 || Screen protector&lt;br /&gt;
|-&lt;br /&gt;
| HAC-019 || Left Joy-Con extended battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-020 || Right Joy-Con extended battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-021 || Carrying case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-022 || Ring-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-023 || Leg Strap&lt;br /&gt;
|-&lt;br /&gt;
| HAC-024 || Poké Ball Plus controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-025 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-026 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-027 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-028 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-029 || Steelbook Gamecard case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-030 || Poké Ball Plus battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-031 || Charging stand&lt;br /&gt;
|-&lt;br /&gt;
| HAC-032 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-033 || Left NES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-034 || Right NES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-035 || Left Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-036 || Right Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-037 || Kart (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-038 || Battery for kart (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-039 || Gates (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-040 || Touch Pen (&amp;quot;Super Mario Maker 2&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-041 || Touch Pen (&amp;quot;Brain Training for Switch&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-042 || SNES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-043 || N64 controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-044 || Arrow Markers (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-045 || Sega Genesis controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-046 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-047 || USB charging cable (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;) known as HAC-010 instead&lt;br /&gt;
|-&lt;br /&gt;
| HAC-048 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-049 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-050 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-051 || Nintendo Labo Toy-Con 1: Variety Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-052 || Nintendo Labo Toy-Con 2: Robot Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-053 || Nintendo Labo Toy-Con 3: Vehicle Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-054 || Nintendo Labo Toy-Con 4: VR Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-055 || Nintendo Labo Storage Box&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001(-01) || Retail Nintendo Switch Mariko console (also known as HAD[...])&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAT-001 || SDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-001(-01) || SDEV-D Nintendo Switch Mariko console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-002 || EDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-002(-01) || EDEV-D Nintendo Switch Mariko console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-003 || SDEV cradle&lt;br /&gt;
|-&lt;br /&gt;
| HAT-004 || Relay Box&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HDH-001 || Retail Nintendo Switch Lite console&lt;br /&gt;
|-&lt;br /&gt;
| HDH-002 || HDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HDH-003 || Battery&lt;br /&gt;
|-&lt;br /&gt;
| HDH-004 || Carrying case&lt;br /&gt;
|-&lt;br /&gt;
| HDH-005 || Screen protector&lt;br /&gt;
|-&lt;br /&gt;
| HDH-006 || Flip cover&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HEG-001 || Retail Nintendo Switch (OLED Model) console&lt;br /&gt;
|-&lt;br /&gt;
| HEG-002 || ADEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HEG-004 || ADEV Relay Box&lt;br /&gt;
|-&lt;br /&gt;
| HEG-005 || Nintendo Switch (OLED Model) HDMI cable&lt;br /&gt;
|-&lt;br /&gt;
| HEG-007 || Nintendo Switch (OLED Model) dock&lt;br /&gt;
|-&lt;br /&gt;
| HEG-021 || Nintendo Switch (OLED Model) carrying case&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Product Serial Numbers =&lt;br /&gt;
Serial numbers are composed of at least [[#Prefix|three letters]] followed by ten decimal digits. The tenth digit is a [[#Check_Digit|check digit]], meaning that it is derived from the other digits.&lt;br /&gt;
&lt;br /&gt;
== Prefix ==&lt;br /&gt;
Observed prefixes are normally as follows:&lt;br /&gt;
&lt;br /&gt;
* First letter represents the product line:&lt;br /&gt;
** &amp;quot;X&amp;quot; (NX)&lt;br /&gt;
* Second letter represents the product model:&lt;br /&gt;
** &amp;quot;A&amp;quot; (HAC-001; Nintendo Switch console)&lt;br /&gt;
** &amp;quot;B&amp;quot; (HAC-015; Left Joy-Con)&lt;br /&gt;
** &amp;quot;C&amp;quot; (HAC-016; Right Joy-Con)&lt;br /&gt;
** &amp;quot;E&amp;quot; (HAC-013; Pro Controller)&lt;br /&gt;
** &amp;quot;F&amp;quot; (HAC-007; Dock)&lt;br /&gt;
** &amp;quot;H&amp;quot; (HAC-024; Poké Ball Plus controller)&lt;br /&gt;
** &amp;quot;J&amp;quot; (HDH-001; Nintendo Switch Lite console)&lt;br /&gt;
** &amp;quot;K&amp;quot; (HAC-001-01; Nintendo Switch Mariko console)&lt;br /&gt;
** &amp;quot;L&amp;quot; (HAC-033; Left NES controller)&lt;br /&gt;
** &amp;quot;M&amp;quot; (HAC-034; Right NES controller)&lt;br /&gt;
** &amp;quot;Q&amp;quot; (HAC-037; Kart for &amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
** &amp;quot;R&amp;quot; (HAC-042; SNES controller)&lt;br /&gt;
** &amp;quot;T&amp;quot; (HEG-001; Nintendo Switch (OLED Model) console)&lt;br /&gt;
** &amp;quot;V&amp;quot; (HEG-007; Nintendo Switch (OLED Model) dock)&lt;br /&gt;
** &amp;quot;X&amp;quot; (HAC-045; Sega Genesis controller)&lt;br /&gt;
** &amp;quot;Z&amp;quot; (HAT-003; SDEV cradle)&lt;br /&gt;
* Third letter represents the product region:&lt;br /&gt;
** &amp;quot;C&amp;quot; (China)&lt;br /&gt;
** &amp;quot;E&amp;quot; (Europe)&lt;br /&gt;
** &amp;quot;J&amp;quot; (Japan; and Europe on old models)&lt;br /&gt;
** &amp;quot;K&amp;quot; (Korea)&lt;br /&gt;
** &amp;quot;L&amp;quot; (All; for development only)&lt;br /&gt;
** &amp;quot;W&amp;quot; (Americas)&lt;br /&gt;
* Fourth letter is optional:&lt;br /&gt;
** &amp;quot;F&amp;quot; (Factory)&lt;br /&gt;
&lt;br /&gt;
== Assembly Line ==&lt;br /&gt;
The first two digits immediately after the [[#Prefix|prefix]] represent the assembly line 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;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 00 || Unspecified&lt;br /&gt;
|-&lt;br /&gt;
| 01 || Prototype&lt;br /&gt;
|-&lt;br /&gt;
| 02 || SDEV&lt;br /&gt;
|-&lt;br /&gt;
| 03 || EDEV&lt;br /&gt;
|-&lt;br /&gt;
| 04 || DPRD&lt;br /&gt;
|-&lt;br /&gt;
| 05 || HDEV&lt;br /&gt;
|-&lt;br /&gt;
| 06 || SDEV-D&lt;br /&gt;
|-&lt;br /&gt;
| 07 || EDEV-D&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 40 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 70 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 90 || Refurbished&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Check Digit ==&lt;br /&gt;
The check digit is an industry-standard algorithm and is calculated just like it was on the [https://www.3dbrew.org/wiki/Serials#Console_Serial_Numbers 3DS].&lt;br /&gt;
&lt;br /&gt;
To calculate the check digit of a Switch console, separate the non-check digits into &amp;quot;odd&amp;quot; and &amp;quot;even&amp;quot; groups, where the &amp;quot;odd&amp;quot; group is digits in odd-numbered positions, and the &amp;quot;even&amp;quot; group is digits in even-numbered positions. (The first digit is &amp;quot;odd&amp;quot;, with &amp;quot;first&amp;quot; representing &amp;quot;1&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
After separating the digits, add the digits in each group together. Multiply the sum of the even digits by 3, then add the sum of the odd digits. To calculate the check digit, take this value modulo 10, and if not 0, subtract from 10.&lt;br /&gt;
&lt;br /&gt;
Example: XAW10075273452&lt;br /&gt;
&lt;br /&gt;
The non-check digits are 1007527345. Separating into odd and even groups, we get the following:&lt;br /&gt;
&lt;br /&gt;
Odds: 1 + 0 + 5 + 7 + 4 = 17 Evens: 0 + 7 + 2 + 3 + 5 = 17&lt;br /&gt;
&lt;br /&gt;
Applying the algorithm, we get ((3 * 17) + 17) % 10 = 8, which is not 0, thus 10 - 8 = 2, matching the example&#039;s check digit.&lt;/div&gt;</summary>
		<author><name>CapNem</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=11200</id>
		<title>Product Information</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Product_Information&amp;diff=11200"/>
		<updated>2021-09-27T14:13:10Z</updated>

		<summary type="html">&lt;p&gt;CapNem: /* Prefix */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page details miscellaneous Switch product information (serial numbers, product models, etc...).&lt;br /&gt;
&lt;br /&gt;
= Product List =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001 || Retail Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAC-002 || AC adapter&lt;br /&gt;
|-&lt;br /&gt;
| HAC-003 || Nintendo Switch Battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-004 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-005 || &lt;br /&gt;
|-&lt;br /&gt;
| HAC-006 || Joy-Con battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-007 || Dock&lt;br /&gt;
|-&lt;br /&gt;
| HAC-008 || Gamecard&lt;br /&gt;
|-&lt;br /&gt;
| HAC-009 || Gamecard case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-010 || USB charging cable also included in (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-011 || Joy-Con grip&lt;br /&gt;
|-&lt;br /&gt;
| HAC-012 || Joy-Con charge grip&lt;br /&gt;
|-&lt;br /&gt;
| HAC-013 || Pro Controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-014 || Joy-Con strap&lt;br /&gt;
|-&lt;br /&gt;
| HAC-015 || Left Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-016 || Right Joy-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-017 || Joy-Con handle&lt;br /&gt;
|-&lt;br /&gt;
| HAC-018 || Screen protector&lt;br /&gt;
|-&lt;br /&gt;
| HAC-019 || Left Joy-Con extended battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-020 || Right Joy-Con extended battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-021 || Carrying case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-022 || Ring-Con&lt;br /&gt;
|-&lt;br /&gt;
| HAC-023 || Leg Strap&lt;br /&gt;
|-&lt;br /&gt;
| HAC-024 || Poké Ball Plus controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-025 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-026 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-027 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-028 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-029 || Steelbook Gamecard case&lt;br /&gt;
|-&lt;br /&gt;
| HAC-030 || Poké Ball Plus battery&lt;br /&gt;
|-&lt;br /&gt;
| HAC-031 || Charging stand&lt;br /&gt;
|-&lt;br /&gt;
| HAC-032 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-033 || Left NES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-034 || Right NES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-035 || Left Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-036 || Right Famicom controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-037 || Kart (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-038 || Battery for kart (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-039 || Gates (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-040 || Touch Pen (&amp;quot;Super Mario Maker 2&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-041 || Touch Pen (&amp;quot;Brain Training for Switch&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-042 || SNES controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-043 || N64 controller&lt;br /&gt;
|-&lt;br /&gt;
| HAC-044 || Arrow Markers (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| HAC-045 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-046 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-047 || USB charging cable (&amp;quot;Mario Kart Live: Home Circuit&amp;quot;) known as HAC-010 instead&lt;br /&gt;
|-&lt;br /&gt;
| HAC-048 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-049 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-050 ||&lt;br /&gt;
|-&lt;br /&gt;
| HAC-051 || Nintendo Labo Toy-Con 1: Variety Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-052 || Nintendo Labo Toy-Con 2: Robot Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-053 || Nintendo Labo Toy-Con 3: Vehicle Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-054 || Nintendo Labo Toy-Con 4: VR Kit&lt;br /&gt;
|-&lt;br /&gt;
| HAC-055 || Nintendo Labo Storage Box&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAC-001(-01) || Retail Nintendo Switch Mariko console (also known as HAD[...])&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HAT-001 || SDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-001(-01) || SDEV-D Nintendo Switch Mariko console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-002 || EDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-002(-01) || EDEV-D Nintendo Switch Mariko console&lt;br /&gt;
|-&lt;br /&gt;
| HAT-003 || SDEV cradle&lt;br /&gt;
|-&lt;br /&gt;
| HAT-004 || Relay Box&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HDH-001 || Retail Nintendo Switch Lite console&lt;br /&gt;
|-&lt;br /&gt;
| HDH-002 || HDEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HDH-003 || Battery&lt;br /&gt;
|-&lt;br /&gt;
| HDH-004 || Carrying case&lt;br /&gt;
|-&lt;br /&gt;
| HDH-005 || Screen protector&lt;br /&gt;
|-&lt;br /&gt;
| HDH-006 || Flip cover&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Product Code || Description&lt;br /&gt;
|-&lt;br /&gt;
| HEG-001 || Retail Nintendo Switch (OLED Model) console&lt;br /&gt;
|-&lt;br /&gt;
| HEG-002 || ADEV Nintendo Switch console&lt;br /&gt;
|-&lt;br /&gt;
| HEG-004 || ADEV Relay Box&lt;br /&gt;
|-&lt;br /&gt;
| HEG-005 || Nintendo Switch (OLED Model) HDMI cable&lt;br /&gt;
|-&lt;br /&gt;
| HEG-007 || Nintendo Switch (OLED Model) dock&lt;br /&gt;
|-&lt;br /&gt;
| HEG-021 || Nintendo Switch (OLED Model) carrying case&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Product Serial Numbers =&lt;br /&gt;
Serial numbers are composed of at least [[#Prefix|three letters]] followed by ten decimal digits. The tenth digit is a [[#Check_Digit|check digit]], meaning that it is derived from the other digits.&lt;br /&gt;
&lt;br /&gt;
== Prefix ==&lt;br /&gt;
Observed prefixes are normally as follows:&lt;br /&gt;
&lt;br /&gt;
* First letter represents the product line:&lt;br /&gt;
** &amp;quot;X&amp;quot; (NX)&lt;br /&gt;
* Second letter represents the product model:&lt;br /&gt;
** &amp;quot;A&amp;quot; (HAC-001; Nintendo Switch console)&lt;br /&gt;
** &amp;quot;B&amp;quot; (HAC-015; Left Joy-Con)&lt;br /&gt;
** &amp;quot;C&amp;quot; (HAC-016; Right Joy-Con)&lt;br /&gt;
** &amp;quot;F&amp;quot; (HAC-007; Dock)&lt;br /&gt;
** &amp;quot;H&amp;quot; (HAC-024; Poké Ball Plus controller)&lt;br /&gt;
** &amp;quot;J&amp;quot; (HDH-001; Nintendo Switch Lite console)&lt;br /&gt;
** &amp;quot;K&amp;quot; (HAC-001-01; Nintendo Switch Mariko console)&lt;br /&gt;
** &amp;quot;L&amp;quot; (HAC-033; Left NES controller)&lt;br /&gt;
** &amp;quot;M&amp;quot; (HAC-034; Right NES controller)&lt;br /&gt;
** &amp;quot;Q&amp;quot; (HAC-037; Kart for &amp;quot;Mario Kart Live: Home Circuit&amp;quot;)&lt;br /&gt;
** &amp;quot;R&amp;quot; (HAC-042; SNES controller)&lt;br /&gt;
** &amp;quot;T&amp;quot; (HEG-001; Nintendo Switch (OLED Model) console)&lt;br /&gt;
** &amp;quot;V&amp;quot; (HEG-007; Nintendo Switch (OLED Model) Dock)&lt;br /&gt;
** &amp;quot;Z&amp;quot; (HAT-003; SDEV cradle)&lt;br /&gt;
* Third letter represents the product region:&lt;br /&gt;
** &amp;quot;C&amp;quot; (China)&lt;br /&gt;
** &amp;quot;E&amp;quot; (Europe)&lt;br /&gt;
** &amp;quot;J&amp;quot; (Japan; and Europe on old models)&lt;br /&gt;
** &amp;quot;K&amp;quot; (Korea)&lt;br /&gt;
** &amp;quot;L&amp;quot; (All; for development only)&lt;br /&gt;
** &amp;quot;W&amp;quot; (Americas)&lt;br /&gt;
* Fourth letter is optional:&lt;br /&gt;
** &amp;quot;F&amp;quot; (Factory)&lt;br /&gt;
&lt;br /&gt;
== Assembly Line ==&lt;br /&gt;
The first two digits immediately after the [[#Prefix|prefix]] represent the assembly line 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;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 00 || Unspecified&lt;br /&gt;
|-&lt;br /&gt;
| 01 || Prototype&lt;br /&gt;
|-&lt;br /&gt;
| 02 || SDEV&lt;br /&gt;
|-&lt;br /&gt;
| 03 || EDEV&lt;br /&gt;
|-&lt;br /&gt;
| 04 || DPRD&lt;br /&gt;
|-&lt;br /&gt;
| 05 || HDEV&lt;br /&gt;
|-&lt;br /&gt;
| 06 || SDEV-D&lt;br /&gt;
|-&lt;br /&gt;
| 07 || EDEV-D&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 40 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 70 || Retail&lt;br /&gt;
|-&lt;br /&gt;
| 90 || Refurbished&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Check Digit ==&lt;br /&gt;
The check digit is an industry-standard algorithm and is calculated just like it was on the [https://www.3dbrew.org/wiki/Serials#Console_Serial_Numbers 3DS].&lt;br /&gt;
&lt;br /&gt;
To calculate the check digit of a Switch console, separate the non-check digits into &amp;quot;odd&amp;quot; and &amp;quot;even&amp;quot; groups, where the &amp;quot;odd&amp;quot; group is digits in odd-numbered positions, and the &amp;quot;even&amp;quot; group is digits in even-numbered positions. (The first digit is &amp;quot;odd&amp;quot;, with &amp;quot;first&amp;quot; representing &amp;quot;1&amp;quot;.)&lt;br /&gt;
&lt;br /&gt;
After separating the digits, add the digits in each group together. Multiply the sum of the even digits by 3, then add the sum of the odd digits. To calculate the check digit, take this value modulo 10, and if not 0, subtract from 10.&lt;br /&gt;
&lt;br /&gt;
Example: XAW10075273452&lt;br /&gt;
&lt;br /&gt;
The non-check digits are 1007527345. Separating into odd and even groups, we get the following:&lt;br /&gt;
&lt;br /&gt;
Odds: 1 + 0 + 5 + 7 + 4 = 17 Evens: 0 + 7 + 2 + 3 + 5 = 17&lt;br /&gt;
&lt;br /&gt;
Applying the algorithm, we get ((3 * 17) + 17) % 10 = 8, which is not 0, thus 10 - 8 = 2, matching the example&#039;s check digit.&lt;/div&gt;</summary>
		<author><name>CapNem</name></author>
	</entry>
</feed>