<?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=Missile</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=Missile"/>
	<link rel="alternate" type="text/html" href="https://switchbrew.org/wiki/Special:Contributions/Missile"/>
	<updated>2026-05-14T19:25:43Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=System_Version_Title&amp;diff=4084</id>
		<title>System Version Title</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=System_Version_Title&amp;diff=4084"/>
		<updated>2018-03-15T05:14:42Z</updated>

		<summary type="html">&lt;p&gt;Missile: /* Retail Firmware Updates */ , 4.0.0 and 5.0.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The FS for the system-version title(TID 0100000000000809) contains &amp;quot;/file&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Major&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| Minor&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| Micro&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| Unknown/Build?&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| Revision Number&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x3&lt;br /&gt;
| Normally all-zero. Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x20&lt;br /&gt;
| Platform string (&amp;quot;NX&amp;quot; with zeros afterwards)&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x40&lt;br /&gt;
| Hex ASCII string. 0x28-bytes(not including NUL-terminator) normally with zeros afterwards. The value of this string differs from [[2.0.0]] and [[2.1.0]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x68&lt;br /&gt;
| 0x18&lt;br /&gt;
| System-version in string form with zeros afterwards. For example: &amp;quot;2.1.0&amp;quot;. This is what is displayed in System settings.&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x80&lt;br /&gt;
| ASCII string with zeros / padding afterwards. For example: &amp;quot;NintendoSDK Firmware for NX 2.0.0-15&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Versions ==&lt;br /&gt;
=== Retail Firmware Updates ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Firmware&lt;br /&gt;
! Version String&lt;br /&gt;
! Hex ASCII String&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 1.0.0-15&lt;br /&gt;
| 84b8da475a02261c456e6472b403b31416480165&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 2.0.0-15&lt;br /&gt;
| 25233e518f580062b41f45fae7ce56bff261094a&lt;br /&gt;
|-&lt;br /&gt;
| 2.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 2.1.0-0&lt;br /&gt;
| e548f82b0aaff5fd18cfd80e7b9bd9808eeb7c99&lt;br /&gt;
|-&lt;br /&gt;
| 2.2.0&lt;br /&gt;
| NintendoSDK Firmware for NX 2.2.0-1&lt;br /&gt;
| c83b637205048e61e73c870f21271cc3c6364396&lt;br /&gt;
|-&lt;br /&gt;
| 2.3.0&lt;br /&gt;
| NintendoSDK Firmware for NX 2.3.0-0&lt;br /&gt;
| 3ed3bbc8885b6362f4f244dcecd2b430fa27310e&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 3.0.0-10.0&lt;br /&gt;
| 7fbde2b0bba4d14107bf836e4643043d9f6c8e47&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 3.0.1-0.0&lt;br /&gt;
| a3363e086791370ed89dca69c697b4a8bc443d66&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.2&lt;br /&gt;
| NintendoSDK Firmware for NX 3.0.2-0.0&lt;br /&gt;
| 56bc7f71d0e13179ccb6543bbb33d7f537859e49&lt;br /&gt;
|-&lt;br /&gt;
| 4.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 4.0.0-4.0&lt;br /&gt;
| 875be0f6edc29b23938b7aea50764421b9f217e5&lt;br /&gt;
|-&lt;br /&gt;
| 4.0.1&lt;br /&gt;
| NintendoSDK Firmware for NX 4.0.1-0.0&lt;br /&gt;
| 826588c45cecab1672c46f5de87d83ea6008d583&lt;br /&gt;
|-&lt;br /&gt;
| 4.1.0&lt;br /&gt;
| NintendoSDK Firmware for NX 4.1.0-0.0&lt;br /&gt;
| 314f9468b704e84e1ffed449dfa6108ba4be221d&lt;br /&gt;
|-&lt;br /&gt;
| 5.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 5.0.0-3.0&lt;br /&gt;
| 66790aa646927601523df36a6750205cd944b3de&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Firmware&lt;br /&gt;
! Version String&lt;br /&gt;
! Hex ASCII String&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0-2&lt;br /&gt;
| NintendoSDK Firmware for NX 2.0.0-2&lt;br /&gt;
| 665fafc03935d12eebba8060a135516b021ccbaa&lt;br /&gt;
| Revision of [[Factory Setup|factory firmware]].&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0-13&lt;br /&gt;
| NintendoSDK Firmware for NX 2.0.0-13&lt;br /&gt;
| 60b5fa391b0055f50fec362d29ac18395f387412&lt;br /&gt;
| Revision of [[Factory Setup|factory firmware]].&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| NintendoSDK Firmware for NX 3.0.0-10.0&lt;br /&gt;
| 83480e96a810a6c7cd3a8fb58dfb5b53961ac781&lt;br /&gt;
| Revision of [[Factory Setup|factory firmware]].&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Flash_Filesystem&amp;diff=1826</id>
		<title>Flash Filesystem</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Flash_Filesystem&amp;diff=1826"/>
		<updated>2017-07-28T18:58:25Z</updated>

		<summary type="html">&lt;p&gt;Missile: add a summary, also rpmb is definitely not used at all&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NAND structure =&lt;br /&gt;
The Switch&#039;s eMMC storage features a large user area, two smaller boot partitions, and a replay-protected memory block which is unused (no authentication key is programmed).&lt;br /&gt;
&lt;br /&gt;
== Boot Partitions ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot Partition 0 (0 of 1)&#039;&#039;&#039;&lt;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;
|  0x000000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Title 0100000000000819 BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x004000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Title 010000000000081A BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x008000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Title 0100000000000819 BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x00C000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Title 010000000000081A BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x100000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|  Title 0100000000000819 &amp;quot;package1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  0x140000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|  Title 0100000000000819 &amp;quot;package1&amp;quot; (Backup)&lt;br /&gt;
|-&lt;br /&gt;
|  0x180000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Keyblob area&lt;br /&gt;
|-&lt;br /&gt;
|  0x184000&lt;br /&gt;
|  0x20&lt;br /&gt;
|  Unknown pseudorandom data, often changes on reboot. All zero on 1.0.&lt;br /&gt;
|-&lt;br /&gt;
|  0x184020&lt;br /&gt;
|  0x8?&lt;br /&gt;
| Increments on every boot until hitting a certain number? Bottom 10 bits (0x3FF) are always zero. All zero on 1.0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot Partition 1 (1 of 1)&#039;&#039;&#039;&lt;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;
|  0x000000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|  Title 010000000000081A &amp;quot;package1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  0x040000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|  Title 010000000000081A &amp;quot;package1&amp;quot; (Backup)&lt;br /&gt;
|-&lt;br /&gt;
|  0x080000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|  0x0C0000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyblob ===&lt;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;
| 0x10&lt;br /&gt;
| Keyblob AES-CMAC over the remaining 0xA0-bytes (Checked with a mem-diff function which is safe against timing attacks, calls the general panic() func on failure)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| Keyblob AES CTR&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x90&lt;br /&gt;
| Keyblob encrypted payload&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0&lt;br /&gt;
| 0x150&lt;br /&gt;
| Unused, all-zero.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Decrypted Keydata format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x80&lt;br /&gt;
| Array of master static key encryption keys&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x10 &lt;br /&gt;
| [[Package1|Stage 2]] key&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Starting at 0x180000 is an array of 0x200-byte entries, for a total of 32 keyblobs. Each one is unique compared to the others. They are all console unique.&lt;br /&gt;
&lt;br /&gt;
The 0xB0-byte keyblob is installed to the &amp;quot;customer data&amp;quot; section in BCTs (BCT+0x450).&lt;br /&gt;
&lt;br /&gt;
BCT offset 0x2330 is the field controlling which keyblob gets used. NS uses this to inject the appropriate keyblob on system update. [[Boot]] also uses this index for repairing corrupt sectors.&lt;br /&gt;
&lt;br /&gt;
With [ [[3.0.0]] + ] index 2 is used instead of index 1.&lt;br /&gt;
&lt;br /&gt;
The Tegra 210 BCT format can be found in nvidia&#039;s cbootimage [https://github.com/thierryreding/tegra-avp/blob/35f467996e532357db54894c975acab93293d219/include/avp/tegra210/bct.h#L521]&lt;br /&gt;
&lt;br /&gt;
== User Partitions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Partition name&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  [[Filesystem_services|Bis]] Partition ID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  N/A&lt;br /&gt;
|  0x0&lt;br /&gt;
|  &lt;br /&gt;
|  20&lt;br /&gt;
|  GPT header, Bis-storage also allows raw access to the entire NAND eMMC sectors starting at sector0.&lt;br /&gt;
|-&lt;br /&gt;
|  PRODINFO&lt;br /&gt;
|  0x00004400&lt;br /&gt;
|  0x003FBC00&lt;br /&gt;
|  27&lt;br /&gt;
|  &amp;quot;CAL0&amp;quot; raw partition containing set:cal data.&lt;br /&gt;
|-&lt;br /&gt;
|  PRODINFOF&lt;br /&gt;
|  0x00400000&lt;br /&gt;
|  0x00400000&lt;br /&gt;
|  28&lt;br /&gt;
|  FAT12 filesystem, additional calibration.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-1-Normal-Main&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  21&lt;br /&gt;
|  For all these packages, data starts at offset 0x4000 and is not console-unique. This is installed from &amp;quot;package2&amp;quot; in firmware package A (0100000000000819) by default. With the exFAT update installed, this is switched to firmware package C (010000000000081B). The data stored here matches the raw /nx/package2 file stored in the 81[9AB] data archives -- there is no additional encryption.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-2-Normal-Sub&lt;br /&gt;
|  0x01000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  22&lt;br /&gt;
|  Identical to BCPKG2-1-Normal-Main, probably used as a backup partition.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-3-SafeMode-Main&lt;br /&gt;
|  0x01800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  23&lt;br /&gt;
|  This is installed from &amp;quot;package2&amp;quot; in firmware package B (010000000000081A).&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-4-SafeMode-Sub&lt;br /&gt;
|  0x02000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  24&lt;br /&gt;
|  Identical to BCPKG2-3-SafeMode-Main.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-5-Repair-Main&lt;br /&gt;
|  0x02800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  25&lt;br /&gt;
|  Installed at the factory.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-6-Repair-Sub&lt;br /&gt;
|  0x03000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  26&lt;br /&gt;
|  Identical to BCPKG2-5-Repair-Main.&lt;br /&gt;
|-&lt;br /&gt;
|  SAFE&lt;br /&gt;
|  0x03800000&lt;br /&gt;
|  0x04000000&lt;br /&gt;
|  29&lt;br /&gt;
|  FAT32 filesystem.&lt;br /&gt;
|-&lt;br /&gt;
|  SYSTEM&lt;br /&gt;
|  0x07800000 &lt;br /&gt;
|  0xA0000000&lt;br /&gt;
|  31 (and 32?)&lt;br /&gt;
|  FAT32 filesystem.&lt;br /&gt;
|-&lt;br /&gt;
|  USER&lt;br /&gt;
|  0xA7800000&lt;br /&gt;
|  0x680000000&lt;br /&gt;
|  30&lt;br /&gt;
|  FAT32 filesystem.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x747BFFE00&lt;br /&gt;
| 0x200&lt;br /&gt;
| &lt;br /&gt;
| This is the backup GPT header specified by the main GPT header. This is also the last sector readable with Bis-storage paritionID 20.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the client process lacks the relevant permission for any of the above partition IDs, error 0x2EE202 is returned.&lt;br /&gt;
&lt;br /&gt;
[[NCA]]s stored in NAND are raw, identical to the data readable with [[Content_Manager_services#ReadEntryRaw]].&lt;br /&gt;
&lt;br /&gt;
The filenames for saveimages is just &amp;quot;&amp;lt;lower-case hex u64 saveID&amp;gt;&amp;quot;. SYSTEM-partition saveIDs are specified by [[Filesystem_services|FS]] commands, while USER-partition saveIDs are determined by FS-module internally. The high u32 of the saveID is normally either 0x00000000 or 0x80000000.&lt;br /&gt;
&lt;br /&gt;
=== PRODINFOF ===&lt;br /&gt;
 PRODINFOF&lt;br /&gt;
 ├── Certifications&lt;br /&gt;
 │   └── WirelessCertification.png&lt;br /&gt;
 └── ptd&lt;br /&gt;
     ├── DeviceIdWithEmsBit.dat&lt;br /&gt;
     ├── Ecid.dat&lt;br /&gt;
     ├── prodCode.dat&lt;br /&gt;
     └── log&lt;br /&gt;
         ├── Process_asm1.log&lt;br /&gt;
         ├── Process_board1.log&lt;br /&gt;
         ├── TestFlagLine.log&lt;br /&gt;
         ├── TestFlagQc.log&lt;br /&gt;
         ├── AGING&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── BOARD_TEST&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── BOARD_WIRELESS&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── FINAL_CHECK&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── LCD_AND_KEY&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         └── USB_AND_HP&lt;br /&gt;
             └── Sequence.log&lt;br /&gt;
&lt;br /&gt;
==== DeviceIdWithEmsBit.dat ====&lt;br /&gt;
Contains a 0x10-byte uppercase hex string, identical to the DeviceId in the [[Settings_services|DeviceCert]].&lt;br /&gt;
&lt;br /&gt;
=== SYSTEM ===&lt;br /&gt;
 SYSTEM&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]]&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 ├── [[Savegames|save]]&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── saveMeta&lt;br /&gt;
     └── ... (empty?)&lt;br /&gt;
&lt;br /&gt;
The saves stored under this partition are only for system-titles / etc.&lt;br /&gt;
&lt;br /&gt;
=== USER ===&lt;br /&gt;
 USER&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Album (Same layout as [[SD_Filesystem|SD]])&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]]&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 ├── [[Savegames|save]]&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── saveMeta&lt;br /&gt;
 │   └── ... &lt;br /&gt;
 └── temp &lt;br /&gt;
&lt;br /&gt;
The saves for all non-system applications, regardless of where the application is located(storageID), is stored here. Each user account which has savedata has a separate saveimage. Save-common for an application is presumably a separate saveimage too. Every saveimage here is &#039;&#039;only&#039;&#039; for applications.&lt;br /&gt;
&lt;br /&gt;
=== SAFE ===&lt;br /&gt;
 SAFE&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]] (nothing installed?)&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 └── [[Savegames|save]]&lt;br /&gt;
     ├── 8000000000000000&lt;br /&gt;
     └── 8000000000000120&lt;br /&gt;
&lt;br /&gt;
On a v2.1 system with MountBis, the only thing under here is &amp;quot;PRF2SAFE.RCV&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= System Savegames =&lt;br /&gt;
&lt;br /&gt;
This is a listing of known System Savedata and what titles they correspond to.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! SaveID || Owner || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x80000000000000d1 || erpt || Contains &amp;quot;/journal&amp;quot; report listing + actual crash reports (&amp;quot;/%08x-%04x-%04x-%02x%02x-%04x%08x&amp;quot;), which are serialized via [http://msgpack.org/ MsgPack].&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Cryptosystem&amp;diff=1808</id>
		<title>Cryptosystem</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Cryptosystem&amp;diff=1808"/>
		<updated>2017-07-27T00:08:28Z</updated>

		<summary type="html">&lt;p&gt;Missile: oops, both keys are needed of course&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Like the 3DS, the Switch relies on a number of cryptographic keys to prevent unauthorized persons from dumping and analyzing its software and assets. This page will focus on the &amp;quot;symmetric&amp;quot; cryptography involved in the Switch&#039;s cryptosystem.&lt;br /&gt;
&lt;br /&gt;
== BootROM ==&lt;br /&gt;
&lt;br /&gt;
The Switch&#039;s BootROM does no symmetric cryptographic operations. However, it sets up two keys in the hardware security engine&#039;s keyslots: the SBK (Secure Boot Key) in keyslot 0xE and the SSK (Secure Storage Key) in keyslot 0xF. Reads from both of these keyslots are disabled by the bootROM. The material used to generate these keys is stored in special fuses that have their access disabled by the bootROM.&lt;br /&gt;
&lt;br /&gt;
The SBK is common to all consoles while the SSK is console unique. The SSK is not used on retail devices.&lt;br /&gt;
== Falcon coprocessor ==&lt;br /&gt;
&lt;br /&gt;
The falcon processor (TSEC) stores a special console-unique key (that will be referred to as the &amp;quot;device keyblob seed generation key&amp;quot;) in fuses that only microcode authenticated by NVidia has access to.&lt;br /&gt;
&lt;br /&gt;
== Bootloader stage 0 ==&lt;br /&gt;
&lt;br /&gt;
=== Key generation ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keyslot&lt;br /&gt;
! Name&lt;br /&gt;
! Set by&lt;br /&gt;
! Cleared by&lt;br /&gt;
! Per-console&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| Pk11DecryptionKey&lt;br /&gt;
| [[Package1]]&lt;br /&gt;
| [[Package1]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| MasterKey&lt;br /&gt;
| [[Package1]]&lt;br /&gt;
| Forever&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| ConsoleKey&lt;br /&gt;
| [[Package1]]&lt;br /&gt;
| Forever&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| SecureBootKey&lt;br /&gt;
| Bootrom&lt;br /&gt;
| [[Package1]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| SecureStorageKey&lt;br /&gt;
| Bootrom&lt;br /&gt;
| [[Package1]]&lt;br /&gt;
| Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bootloader stage 0 generates three keys. Keyslot 0xB is cleared after it is used to decrypt the stage 2 bootloader; only keyslots 0xC and 0xD will be transferred to stage 2. Additionally, keyslots 0xC and 0xD are set read-only after they are generated. The SBK and the SSK are also cleared after use (although the SSK isn&#039;t used at all, except on dev units).&lt;br /&gt;
&lt;br /&gt;
The master static key is generated by decrypting the master static seed (a constant stored in bootloader .data) with the master static key encryption key. The master static seed used varies depending on whether the console is a retail unit or a dev unit.&lt;br /&gt;
Both the master static key encryption key and the stage 2 key are stored in a keyblob. The keyblob format is described [[Flash_Filesystem#Keyblob|here]].&lt;br /&gt;
&lt;br /&gt;
The 32 blobs are stored in the eMMC. Only one at a time is loaded, it is controlled by the bootloader version field in the BCT (at +0x2330).&lt;br /&gt;
&lt;br /&gt;
Although the keydata is presumably common to all consoles, each keyblob is console-unique, because the key used to encrypt it is at the factory is console unique. Each keyblob has its own encryption key, with keyblob key N generated by decrypting keyblob key seed N with the SBK, and keyblob key seed N generated by decrypting keyblob N&#039;s seed constant with the device keyblob seed generation key obtained from the Falcon. Keyblob key 1 is special: In addition to being used to decrypt keyblob 1, it is also used to generate the master device key by decrypting a constant block.&lt;br /&gt;
&lt;br /&gt;
The key used to verify a keyblob&#039;s MAC is not the keyblob key but a key derived from it; this is likely part of an attempt to mitigate side-channel attacks as the MAC is an alterable part of the keyblob.&lt;br /&gt;
&lt;br /&gt;
The bootloader only stores the seed constants for the keyblob loaded by the current revision and for keyblob 1 (So that the master device key can be generated). &lt;br /&gt;
&lt;br /&gt;
This mechanism provides several advantages. If the stage 2 bootloader is compromised, stage 1 can just use another master static key in the keyblob. If stage 1 itself is glitched or exploited in such a way the keyblob is dumped, Nintendo just has to change the loaded keyblob: the vulnerable bootloader won&#039;t be able to decrypt the new keyblob, as the keyblob key it knows is different from the one needed. Even if somehow an exploit or glitch allowed one to be able to use the SBK to generate keyblob keys, the seed constants for future keyblobs are unknown (and will be until Nintendo releases new bootloaders that use them), and so the exploit or glitch would have to be re-done on each new bootloader revision (if it&#039;s not patched).&lt;br /&gt;
&lt;br /&gt;
Dumping the fuses and TSEC key of any single system would effectively bypass all of the above security mechanisms.&lt;br /&gt;
&lt;br /&gt;
The key-derivation is described [[Package1#Key_generation|here]].&lt;br /&gt;
&lt;br /&gt;
==== Table of used keyblobs ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! System version&lt;br /&gt;
! Used keyblob&lt;br /&gt;
! Used master static key encryption key in keyblob&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0-2.3.0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bootloader stage 1 ==&lt;br /&gt;
&lt;br /&gt;
It is currently unknown what key generation the stage 2 bootloader does.&lt;br /&gt;
&lt;br /&gt;
== Secure Monitor ==&lt;br /&gt;
&lt;br /&gt;
The secure monitor performs some runtime cryptographic operations. See [[SMC]] for what operations it provides.&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Cryptosystem&amp;diff=1807</id>
		<title>Cryptosystem</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Cryptosystem&amp;diff=1807"/>
		<updated>2017-07-27T00:07:07Z</updated>

		<summary type="html">&lt;p&gt;Missile: nintendo and nvidia don&amp;#039;t know what a microscope is :P&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Like the 3DS, the Switch relies on a number of cryptographic keys to prevent unauthorized persons from dumping and analyzing its software and assets. This page will focus on the &amp;quot;symmetric&amp;quot; cryptography involved in the Switch&#039;s cryptosystem.&lt;br /&gt;
&lt;br /&gt;
== BootROM ==&lt;br /&gt;
&lt;br /&gt;
The Switch&#039;s BootROM does no symmetric cryptographic operations. However, it sets up two keys in the hardware security engine&#039;s keyslots: the SBK (Secure Boot Key) in keyslot 0xE and the SSK (Secure Storage Key) in keyslot 0xF. Reads from both of these keyslots are disabled by the bootROM. The material used to generate these keys is stored in special fuses that have their access disabled by the bootROM.&lt;br /&gt;
&lt;br /&gt;
The SBK is common to all consoles while the SSK is console unique. The SSK is not used on retail devices.&lt;br /&gt;
== Falcon coprocessor ==&lt;br /&gt;
&lt;br /&gt;
The falcon processor (TSEC) stores a special console-unique key (that will be referred to as the &amp;quot;device keyblob seed generation key&amp;quot;) in fuses that only microcode authenticated by NVidia has access to.&lt;br /&gt;
&lt;br /&gt;
== Bootloader stage 0 ==&lt;br /&gt;
&lt;br /&gt;
=== Key generation ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Keyslot&lt;br /&gt;
! Name&lt;br /&gt;
! Set by&lt;br /&gt;
! Cleared by&lt;br /&gt;
! Per-console&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| Pk11DecryptionKey&lt;br /&gt;
| [[Package1]]&lt;br /&gt;
| [[Package1]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| MasterKey&lt;br /&gt;
| [[Package1]]&lt;br /&gt;
| Forever&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| ConsoleKey&lt;br /&gt;
| [[Package1]]&lt;br /&gt;
| Forever&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| SecureBootKey&lt;br /&gt;
| Bootrom&lt;br /&gt;
| [[Package1]]&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| SecureStorageKey&lt;br /&gt;
| Bootrom&lt;br /&gt;
| [[Package1]]&lt;br /&gt;
| Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Bootloader stage 0 generates three keys. Keyslot 0xB is cleared after it is used to decrypt the stage 2 bootloader; only keyslots 0xC and 0xD will be transferred to stage 2. Additionally, keyslots 0xC and 0xD are set read-only after they are generated. The SBK and the SSK are also cleared after use (although the SSK isn&#039;t used at all, except on dev units).&lt;br /&gt;
&lt;br /&gt;
The master static key is generated by decrypting the master static seed (a constant stored in bootloader .data) with the master static key encryption key. The master static seed used varies depending on whether the console is a retail unit or a dev unit.&lt;br /&gt;
Both the master static key encryption key and the stage 2 key are stored in a keyblob. The keyblob format is described [[Flash_Filesystem#Keyblob|here]].&lt;br /&gt;
&lt;br /&gt;
The 32 blobs are stored in the eMMC. Only one at a time is loaded, it is controlled by the bootloader version field in the BCT (at +0x2330).&lt;br /&gt;
&lt;br /&gt;
Although the keydata is presumably common to all consoles, each keyblob is console-unique, because the key used to encrypt it is at the factory is console unique. Each keyblob has its own encryption key, with keyblob key N generated by decrypting keyblob key seed N with the SBK, and keyblob key seed N generated by decrypting keyblob N&#039;s seed constant with the device keyblob seed generation key obtained from the Falcon. Keyblob key 1 is special: In addition to being used to decrypt keyblob 1, it is also used to generate the master device key by decrypting a constant block.&lt;br /&gt;
&lt;br /&gt;
The key used to verify a keyblob&#039;s MAC is not the keyblob key but a key derived from it; this is likely part of an attempt to mitigate side-channel attacks as the MAC is an alterable part of the keyblob.&lt;br /&gt;
&lt;br /&gt;
The bootloader only stores the seed constants for the keyblob loaded by the current revision and for keyblob 1 (So that the master device key can be generated). &lt;br /&gt;
&lt;br /&gt;
This mechanism provides several advantages. If the stage 2 bootloader is compromised, stage 1 can just use another master static key in the keyblob. If stage 1 itself is glitched or exploited in such a way the keyblob is dumped, Nintendo just has to change the loaded keyblob: the vulnerable bootloader won&#039;t be able to decrypt the new keyblob, as the keyblob key it knows is different from the one needed. Even if somehow an exploit or glitch allowed one to be able to use the SBK to generate keyblob keys, the seed constants for future keyblobs are unknown (and will be until Nintendo releases new bootloaders that use them), and so the exploit or glitch would have to be re-done on each new bootloader revision (if it&#039;s not patched).&lt;br /&gt;
&lt;br /&gt;
Dumping the fuses of any single system would effectively bypass all of the above security mechanisms.&lt;br /&gt;
&lt;br /&gt;
The key-derivation is described [[Package1#Key_generation|here]].&lt;br /&gt;
&lt;br /&gt;
==== Table of used keyblobs ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! System version&lt;br /&gt;
! Used keyblob&lt;br /&gt;
! Used master static key encryption key in keyblob&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0-2.3.0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| 2&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bootloader stage 1 ==&lt;br /&gt;
&lt;br /&gt;
It is currently unknown what key generation the stage 2 bootloader does.&lt;br /&gt;
&lt;br /&gt;
== Secure Monitor ==&lt;br /&gt;
&lt;br /&gt;
The secure monitor performs some runtime cryptographic operations. See [[SMC]] for what operations it provides.&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Package1&amp;diff=1806</id>
		<title>Package1</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Package1&amp;diff=1806"/>
		<updated>2017-07-26T23:50:57Z</updated>

		<summary type="html">&lt;p&gt;Missile: clarify and clean up grammar in downgrade check section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo Switch&#039;s bootloader (called &amp;quot;package1&amp;quot;) is the first custom piece of code running on the Switch. It is loaded in the IRAM and launched by the Tegra X1 bootROM according to the BCT. It runs on the boot processor, an ARM7TDMI called &amp;quot;BPMP&amp;quot; by NVidia (Boot and Power Management Processor).&lt;br /&gt;
It is split into two parts, one that is in plaintext, one that is encrypted. The bootROM does not perform any symmetric cryptographic operations on the bootloader it loads.&lt;br /&gt;
&lt;br /&gt;
== Stage 1 ==&lt;br /&gt;
&lt;br /&gt;
The first stage of the bootloader is the plaintext part of the bootloader. It has four goals: to power on devices, to look for incoherencies, to generate keys, and to decrypt and launch the second stage.&lt;br /&gt;
The stage 1 bootloader&#039;s authors knew that the code was in plaintext, and thus took extra care to try to protect the bootloader from side-channel attacks.&lt;br /&gt;
&lt;br /&gt;
=== Execution flow ===&lt;br /&gt;
&lt;br /&gt;
==== Startup ====&lt;br /&gt;
&lt;br /&gt;
After setting up the stack and branching to main, stage 1 poisons all the exception vectors to point at the panic function.&lt;br /&gt;
It then clears the (empty) bss and calls the functions in the (empty) init array.&lt;br /&gt;
&lt;br /&gt;
==== Main ====&lt;br /&gt;
&lt;br /&gt;
* Registers are setup&lt;br /&gt;
* A device (?) is powered on&lt;br /&gt;
* Flags are set on the clock-reset registers&lt;br /&gt;
* [3.0.0+] The security engine address is setup&lt;br /&gt;
* [3.0.0+] Bit30 of offset 0x800 of the security engine is checked: if set, panic.&lt;br /&gt;
* The SKU info is checked. If it doesn&#039;t match 0x83, panic.&lt;br /&gt;
* Fuse coherency is checked, potentially panicking.&lt;br /&gt;
* The copy of the BCT left by the bootROM is checked. If the version field doesn&#039;t match the expected version field, panic.&lt;br /&gt;
* Anti-downgrade fuses are checked, potentially panicking.&lt;br /&gt;
* [1.0.0-2.3.0] Fuse programming is disabled until next reboot.&lt;br /&gt;
* The memory controller is powered on and setup to allow GPU DMA to the IRAM. This will be needed to interact with the Falcon and with the security engine.&lt;br /&gt;
* [1.0.0-2.3.0] The security engine address is setup&lt;br /&gt;
* [1.0.0-2.3.0] Bit30 of offset 0x800 of the security engine is checked: if set, panic.&lt;br /&gt;
* Key generation is performed. If the unit type is equal to 0 (non-retail) AND if some fuse is clear, the secondary method will be used. Else, the main method will be used.&lt;br /&gt;
* Stage 2 is decrypted with keyslot 0xB. Keyslot 0xB is cleared, and the second stage&#039;s header validity is checked. If any of this fails, panic.&lt;br /&gt;
* The entrypoint of stage 2 is computed.&lt;br /&gt;
* The stack is pivoted to a secondary stack, the main stack and the key area are cleared, and stage 1 jumps to stage 2&#039;s entrypoint.&lt;br /&gt;
&lt;br /&gt;
==== Fuse coherency ====&lt;br /&gt;
&lt;br /&gt;
Unit type is computed from data from a fuse. It must be either 0 (non-retail) or 1 (retail). If it&#039;s neither, 2 will be returned by the function, and the check will call panic.&lt;br /&gt;
&lt;br /&gt;
==== Downgrade check ====&lt;br /&gt;
&lt;br /&gt;
The bootloader verifies a lockdown fuse counter to prevent downgrading. A 32-bit lockdown value at fuse offset 0x1E4 is checked. If too many fuses are burned the bootloader will panic. If too few are burned, the bootloader will program the expected number of bits and force a reset. The expected lockdown value differs between unit type 0 (non-retail) and unit type 1 (retail).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! System version&lt;br /&gt;
! Expected number of burnt fuses (retail)&lt;br /&gt;
! Expected number of burnt fuses (non-retail)&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0-2.3.0&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Panic ====&lt;br /&gt;
&lt;br /&gt;
The panic function does the following things:&lt;br /&gt;
* It clears the stack&lt;br /&gt;
* It disables(?) and clears the security engine&lt;br /&gt;
* It disables fuse programming&lt;br /&gt;
* It clears the key area&lt;br /&gt;
* It clears the data for stage 2&lt;br /&gt;
* It signals over the debug interface that a panic occurred until the Switch is reset.&lt;br /&gt;
&lt;br /&gt;
=== Key generation ===&lt;br /&gt;
For more detail on the Switch&#039;s Cryptosystem, please see [[Cryptosystem|this page]].&lt;br /&gt;
&lt;br /&gt;
In all cases, at the end of the key generation function three keys are generated: the stage 2 key (stored in keyslot 0xB), the master static key (stored in keyslot 0xC), and the master device key (stored in keyslot 0xD).&lt;br /&gt;
The two keys initialized by the bootROM (the SBK, stored in keyslot 0xE, and the SSK, stored in keyslot 0xF) are cleared immediately after the bootloader is finished using them.&lt;br /&gt;
Keyslots 0xC and 0xD are marked unreadable. Keyslot 0xB is not, but is is cleared by stage 1 after stage 2&#039;s decryption anyway.&lt;br /&gt;
&lt;br /&gt;
==== Main method ====&lt;br /&gt;
&lt;br /&gt;
This method is called when the unit type is equal to 1 (retail) OR when unit type is equal to 0 and some fuse is set. &lt;br /&gt;
&lt;br /&gt;
The master static seed selected depends on whether the unit type is zero and whether the last byte of the bootloader&#039;s RSA modulus is 0x4F.&lt;br /&gt;
&lt;br /&gt;
* Falcon microcode is loaded, the device keyblob seed generation key is obtained from the Falcon.&lt;br /&gt;
* The device keyblob seed generation key is stored in keyslot 0xD.&lt;br /&gt;
* [3.0.0+] keyblob key seed 1 is generated by decrypting the keyblob seed constant 1 with the device keyblob seed generation key&lt;br /&gt;
* [3.0.0+] keyblob key 1 is generated by decrypting keyblob key seed 1 with the SBK. The result is directly stored in keyslot 0xA without leaving the crypto engine.&lt;br /&gt;
* keyblob key seed N is generated by decrypting the keyblob seed constant N with the device keyblob seed generation key&lt;br /&gt;
* keyblob key N is generated by decrypting keyblob key seed N with the SBK. The result is directly stored in keyslot 0xD without leaving the crypto engine.&lt;br /&gt;
* The SBK and the SSK are cleared.&lt;br /&gt;
* The constant MAC key generator block is decrypted with keyblob key N to generate keyblob MAC key N. The result is directly stored in keyslot 0xB without leaving the crypto engine.&lt;br /&gt;
* With keyblob MAC key N, AES CMAC is performed over the keyblob.&lt;br /&gt;
* With a comparison function which is safe against timing attacks, the CMAC is compared with the stored CMAC. If they differ, panic is called.&lt;br /&gt;
* The keyblob data is decrypted with AES-CTR, using the keyblob key N and the stored CTR.&lt;br /&gt;
* The stage 2 decryption key (the ninth key in the blob) is loaded in keyslot 0xB.&lt;br /&gt;
* The master static key encryption key. is loaded in keyslot 0xC.&lt;br /&gt;
* The decrypted keyblob data is erased.&lt;br /&gt;
* The master static key is generated by decrypting the master static seed with the master static key encryption key. The result is directly stored in keyslot 0xC without leaving the crypto engine.&lt;br /&gt;
* [1.0.0-2.3.0] The master device key is generated by decrypting a constant block with keyslot 0xD (which contains keyblob N&#039;s key 1). The result is directly stored in keyslot 0xD without leaving the crypto engine.&lt;br /&gt;
* [3.0.0+] The master device key is generated by decrypting a constant block with keyslot 0xA (which contains keyblob 1&#039;s key 1). The result is directly stored in keyslot 0xD without leaving the crypto engine.&lt;br /&gt;
* [3.0.0+] Keyslot 0xA is cleared.&lt;br /&gt;
&lt;br /&gt;
==== Secondary method ====&lt;br /&gt;
&lt;br /&gt;
The secondary method (which is never launched on retail units) is very simple.&lt;br /&gt;
First a master static seed is selected (depending on whether the bootloader&#039;s RSA modulus ends with 0x11).&lt;br /&gt;
Then, a constant block is decrypted by the SBK. The result is the stage 2 key and will be stored in keyslot 0xB. &lt;br /&gt;
A constant block will be decrypted by the SBK and temporarily stored in keyslot 0xC. Another constant block will be decrypted by the SSK and temporarily stored in keyslot 0xD.&lt;br /&gt;
Both the SBK and the SSK are cleared.&lt;br /&gt;
The master static seed is decrypted with keyslot 0xC and stored in keyslot 0xC.&lt;br /&gt;
A constant block is decrypted with keyslot 0xD and stored in keyslot 0xD. &lt;br /&gt;
&lt;br /&gt;
== Stage 2 (package1.1) ==&lt;br /&gt;
&lt;br /&gt;
The second stage of the bootloader is the encrypted part of the bootloader. It is much bigger than stage 1, but what it does is currently unknown due to its being encrypted.&lt;br /&gt;
&lt;br /&gt;
=== Header format ===&lt;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;
| 4&lt;br /&gt;
| Magic &amp;quot;PK11&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| Size of section 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Size of section 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| Entrypoint of section 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Size of section 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| Entrypoint of section 1?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Entrypoints are relative to the section.&lt;br /&gt;
Stage 1 jumps to the entrypoint of section 2.&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Package1&amp;diff=1805</id>
		<title>Package1</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Package1&amp;diff=1805"/>
		<updated>2017-07-26T23:34:58Z</updated>

		<summary type="html">&lt;p&gt;Missile: LDV &amp;gt; expected just immediately panics&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo Switch&#039;s bootloader (called &amp;quot;package1&amp;quot;) is the first custom piece of code running on the Switch. It is loaded in the IRAM and launched by the Tegra X1 bootROM according to the BCT. It runs on the boot processor, an ARM7TDMI called &amp;quot;BPMP&amp;quot; by NVidia (Boot and Power Management Processor).&lt;br /&gt;
It is split into two parts, one that is in plaintext, one that is encrypted. The bootROM does not perform any symmetric cryptographic operations on the bootloader it loads.&lt;br /&gt;
&lt;br /&gt;
== Stage 1 ==&lt;br /&gt;
&lt;br /&gt;
The first stage of the bootloader is the plaintext part of the bootloader. It has four goals: to power on devices, to look for incoherencies, to generate keys, and to decrypt and launch the second stage.&lt;br /&gt;
The stage 1 bootloader&#039;s authors knew that the code was in plaintext, and thus took extra care to try to protect the bootloader from side-channel attacks.&lt;br /&gt;
&lt;br /&gt;
=== Execution flow ===&lt;br /&gt;
&lt;br /&gt;
==== Startup ====&lt;br /&gt;
&lt;br /&gt;
After setting up the stack and branching to main, stage 1 poisons all the exception vectors to point at the panic function.&lt;br /&gt;
It then clears the (empty) bss and calls the functions in the (empty) init array.&lt;br /&gt;
&lt;br /&gt;
==== Main ====&lt;br /&gt;
&lt;br /&gt;
* Registers are setup&lt;br /&gt;
* A device (?) is powered on&lt;br /&gt;
* Flags are set on the clock-reset registers&lt;br /&gt;
* [3.0.0+] The security engine address is setup&lt;br /&gt;
* [3.0.0+] Bit30 of offset 0x800 of the security engine is checked: if set, panic.&lt;br /&gt;
* The SKU info is checked. If it doesn&#039;t match 0x83, panic.&lt;br /&gt;
* Fuse coherency is checked, potentially panicking.&lt;br /&gt;
* The copy of the BCT left by the bootROM is checked. If the version field doesn&#039;t match the expected version field, panic.&lt;br /&gt;
* Anti-downgrade fuses are checked, potentially panicking.&lt;br /&gt;
* [1.0.0-2.3.0] Fuse programming is disabled until next reboot.&lt;br /&gt;
* The memory controller is powered on and setup to allow GPU DMA to the IRAM. This will be needed to interact with the Falcon and with the security engine.&lt;br /&gt;
* [1.0.0-2.3.0] The security engine address is setup&lt;br /&gt;
* [1.0.0-2.3.0] Bit30 of offset 0x800 of the security engine is checked: if set, panic.&lt;br /&gt;
* Key generation is performed. If the unit type is equal to 0 (non-retail) AND if some fuse is clear, the secondary method will be used. Else, the main method will be used.&lt;br /&gt;
* Stage 2 is decrypted with keyslot 0xB. Keyslot 0xB is cleared, and the second stage&#039;s header validity is checked. If any of this fails, panic.&lt;br /&gt;
* The entrypoint of stage 2 is computed.&lt;br /&gt;
* The stack is pivoted to a secondary stack, the main stack and the key area are cleared, and stage 1 jumps to stage 2&#039;s entrypoint.&lt;br /&gt;
&lt;br /&gt;
==== Fuse coherency ====&lt;br /&gt;
&lt;br /&gt;
Unit type is computed from data from a fuse. It must be either 0 (non-retail) or 1 (retail). If it&#039;s neither, 2 will be returned by the function, and the check will call panic.&lt;br /&gt;
&lt;br /&gt;
==== Downgrade check ====&lt;br /&gt;
&lt;br /&gt;
The bootloader will check if someone attempted to downgrade it. A fuse array will be checked, if too many fuses are burnt the bootloader will panic. If too little are set, the bootloader will program the expected bitmap and force a reset. The fuse array and the expected number of burnt fuses is different on unit type 0 (non-retail) and unit type 1 (retail).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! System version&lt;br /&gt;
! Expected number of burnt fuses (retail)&lt;br /&gt;
! Expected number of burnt fuses (non-retail)&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0-2.3.0&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Panic ====&lt;br /&gt;
&lt;br /&gt;
The panic function does the following things:&lt;br /&gt;
* It clears the stack&lt;br /&gt;
* It disables(?) and clears the security engine&lt;br /&gt;
* It disables fuse programming&lt;br /&gt;
* It clears the key area&lt;br /&gt;
* It clears the data for stage 2&lt;br /&gt;
* It signals over the debug interface that a panic occurred until the Switch is reset.&lt;br /&gt;
&lt;br /&gt;
=== Key generation ===&lt;br /&gt;
For more detail on the Switch&#039;s Cryptosystem, please see [[Cryptosystem|this page]].&lt;br /&gt;
&lt;br /&gt;
In all cases, at the end of the key generation function three keys are generated: the stage 2 key (stored in keyslot 0xB), the master static key (stored in keyslot 0xC), and the master device key (stored in keyslot 0xD).&lt;br /&gt;
The two keys initialized by the bootROM (the SBK, stored in keyslot 0xE, and the SSK, stored in keyslot 0xF) are cleared immediately after the bootloader is finished using them.&lt;br /&gt;
Keyslots 0xC and 0xD are marked unreadable. Keyslot 0xB is not, but is is cleared by stage 1 after stage 2&#039;s decryption anyway.&lt;br /&gt;
&lt;br /&gt;
==== Main method ====&lt;br /&gt;
&lt;br /&gt;
This method is called when the unit type is equal to 1 (retail) OR when unit type is equal to 0 and some fuse is set. &lt;br /&gt;
&lt;br /&gt;
The master static seed selected depends on whether the unit type is zero and whether the last byte of the bootloader&#039;s RSA modulus is 0x4F.&lt;br /&gt;
&lt;br /&gt;
* Falcon microcode is loaded, the device keyblob seed generation key is obtained from the Falcon.&lt;br /&gt;
* The device keyblob seed generation key is stored in keyslot 0xD.&lt;br /&gt;
* [3.0.0+] keyblob key seed 1 is generated by decrypting the keyblob seed constant 1 with the device keyblob seed generation key&lt;br /&gt;
* [3.0.0+] keyblob key 1 is generated by decrypting keyblob key seed 1 with the SBK. The result is directly stored in keyslot 0xA without leaving the crypto engine.&lt;br /&gt;
* keyblob key seed N is generated by decrypting the keyblob seed constant N with the device keyblob seed generation key&lt;br /&gt;
* keyblob key N is generated by decrypting keyblob key seed N with the SBK. The result is directly stored in keyslot 0xD without leaving the crypto engine.&lt;br /&gt;
* The SBK and the SSK are cleared.&lt;br /&gt;
* The constant MAC key generator block is decrypted with keyblob key N to generate keyblob MAC key N. The result is directly stored in keyslot 0xB without leaving the crypto engine.&lt;br /&gt;
* With keyblob MAC key N, AES CMAC is performed over the keyblob.&lt;br /&gt;
* With a comparison function which is safe against timing attacks, the CMAC is compared with the stored CMAC. If they differ, panic is called.&lt;br /&gt;
* The keyblob data is decrypted with AES-CTR, using the keyblob key N and the stored CTR.&lt;br /&gt;
* The stage 2 decryption key (the ninth key in the blob) is loaded in keyslot 0xB.&lt;br /&gt;
* The master static key encryption key. is loaded in keyslot 0xC.&lt;br /&gt;
* The decrypted keyblob data is erased.&lt;br /&gt;
* The master static key is generated by decrypting the master static seed with the master static key encryption key. The result is directly stored in keyslot 0xC without leaving the crypto engine.&lt;br /&gt;
* [1.0.0-2.3.0] The master device key is generated by decrypting a constant block with keyslot 0xD (which contains keyblob N&#039;s key 1). The result is directly stored in keyslot 0xD without leaving the crypto engine.&lt;br /&gt;
* [3.0.0+] The master device key is generated by decrypting a constant block with keyslot 0xA (which contains keyblob 1&#039;s key 1). The result is directly stored in keyslot 0xD without leaving the crypto engine.&lt;br /&gt;
* [3.0.0+] Keyslot 0xA is cleared.&lt;br /&gt;
&lt;br /&gt;
==== Secondary method ====&lt;br /&gt;
&lt;br /&gt;
The secondary method (which is never launched on retail units) is very simple.&lt;br /&gt;
First a master static seed is selected (depending on whether the bootloader&#039;s RSA modulus ends with 0x11).&lt;br /&gt;
Then, a constant block is decrypted by the SBK. The result is the stage 2 key and will be stored in keyslot 0xB. &lt;br /&gt;
A constant block will be decrypted by the SBK and temporarily stored in keyslot 0xC. Another constant block will be decrypted by the SSK and temporarily stored in keyslot 0xD.&lt;br /&gt;
Both the SBK and the SSK are cleared.&lt;br /&gt;
The master static seed is decrypted with keyslot 0xC and stored in keyslot 0xC.&lt;br /&gt;
A constant block is decrypted with keyslot 0xD and stored in keyslot 0xD. &lt;br /&gt;
&lt;br /&gt;
== Stage 2 (package1.1) ==&lt;br /&gt;
&lt;br /&gt;
The second stage of the bootloader is the encrypted part of the bootloader. It is much bigger than stage 1, but what it does is currently unknown due to its being encrypted.&lt;br /&gt;
&lt;br /&gt;
=== Header format ===&lt;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;
| 4&lt;br /&gt;
| Magic &amp;quot;PK11&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| Size of section 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| Size of section 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| Entrypoint of section 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Size of section 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| Entrypoint of section 1?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Entrypoints are relative to the section.&lt;br /&gt;
Stage 1 jumps to the entrypoint of section 2.&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Flash_Filesystem&amp;diff=1711</id>
		<title>Flash Filesystem</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Flash_Filesystem&amp;diff=1711"/>
		<updated>2017-07-19T01:54:34Z</updated>

		<summary type="html">&lt;p&gt;Missile: beats me&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NAND structure =&lt;br /&gt;
&lt;br /&gt;
== Boot Partitions ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot Partition 0 (0 of 1)&#039;&#039;&#039;&lt;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;
|  0x000000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Title 0100000000000819 BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x004000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Title 010000000000081A BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x008000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Title 0100000000000819 BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x00C000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Title 010000000000081A BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x100000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|  Title 0100000000000819 &amp;quot;package1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  0x140000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|  Title 0100000000000819 &amp;quot;package1&amp;quot; (Backup)&lt;br /&gt;
|-&lt;br /&gt;
|  0x180000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Keyblob area&lt;br /&gt;
|-&lt;br /&gt;
|  0x184000&lt;br /&gt;
|  0x20&lt;br /&gt;
|  Unknown pseudorandom data, often changes on reboot. All zero on 1.0.&lt;br /&gt;
|-&lt;br /&gt;
|  0x184020&lt;br /&gt;
|  0x8?&lt;br /&gt;
| Increments on every boot until hitting a certain number? Bottom 10 bits (0x3FF) are always zero. All zero on 1.0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot Partition 1 (1 of 1)&#039;&#039;&#039;&lt;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;
|  0x000000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|  Title 010000000000081A &amp;quot;package1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  0x040000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|  Title 010000000000081A &amp;quot;package1&amp;quot; (Backup)&lt;br /&gt;
|-&lt;br /&gt;
|  0x080000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|  0x0C0000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyblob ===&lt;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;
| 0x10&lt;br /&gt;
| Keyblob AES-CMAC over the remaining 0xA0-bytes (Checked with a mem-diff function which is safe against timing attacks, calls the general panic() func on failure)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| Keyblob AES CTR&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x90&lt;br /&gt;
| Keyblob encrypted payload&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0&lt;br /&gt;
| 0x150&lt;br /&gt;
| Unused, all-zero.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Starting at 0x180000 is an array of 0x200-byte entries, for a total of 32 keyblobs. Each one is unique compared to the others. They are all console unique.&lt;br /&gt;
&lt;br /&gt;
The 0xB0-byte keyblob is installed to the &amp;quot;customer data&amp;quot; section in BCTs (BCT+0x450).&lt;br /&gt;
&lt;br /&gt;
BCT offset 0x2330 is the field controlling which keyblob gets used. NS uses this to inject the appropriate keyblob on system update. [[Boot]] also uses this index for repairing corrupt sectors.&lt;br /&gt;
&lt;br /&gt;
With [ [[3.0.0]] + ] index 2 is used instead of index 1.&lt;br /&gt;
&lt;br /&gt;
The Tegra 210 BCT format can be found in nvidia&#039;s cbootimage [https://github.com/thierryreding/tegra-avp/blob/35f467996e532357db54894c975acab93293d219/include/avp/tegra210/bct.h#L521]&lt;br /&gt;
&lt;br /&gt;
== User Partitions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Partition name&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  [[Filesystem_services|Bis]] Partition ID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  N/A&lt;br /&gt;
|  0x0&lt;br /&gt;
|  &lt;br /&gt;
|  20&lt;br /&gt;
|  GPT header, Bis-storage also allows raw access to the entire NAND eMMC sectors starting at sector0.&lt;br /&gt;
|-&lt;br /&gt;
|  PRODINFO&lt;br /&gt;
|  0x00004400&lt;br /&gt;
|  0x003FBC00&lt;br /&gt;
|  27&lt;br /&gt;
|  &amp;quot;CAL0&amp;quot; raw partition containing set:cal data.&lt;br /&gt;
|-&lt;br /&gt;
|  PRODINFOF&lt;br /&gt;
|  0x00400000&lt;br /&gt;
|  0x00400000&lt;br /&gt;
|  28&lt;br /&gt;
|  FAT12 filesystem, additional calibration.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-1-Normal-Main&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  21&lt;br /&gt;
|  For all these packages, data starts at offset 0x4000 and is not console-unique. This is installed from &amp;quot;package2&amp;quot; in firmware package A (0100000000000819) by default. With the exFAT update installed, this is switched to firmware package C (010000000000081B). The data stored here matches the raw /nx/package2 file stored in the 81[9AB] data archives -- there is no additional encryption.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-2-Normal-Sub&lt;br /&gt;
|  0x01000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  22&lt;br /&gt;
|  Identical to BCPKG2-1-Normal-Main, probably used as a backup partition.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-3-SafeMode-Main&lt;br /&gt;
|  0x01800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  23&lt;br /&gt;
|  This is installed from &amp;quot;package2&amp;quot; in firmware package B (010000000000081A).&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-4-SafeMode-Sub&lt;br /&gt;
|  0x02000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  24&lt;br /&gt;
|  Identical to BCPKG2-3-SafeMode-Main.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-5-Repair-Main&lt;br /&gt;
|  0x02800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  25&lt;br /&gt;
|  Installed at the factory.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-6-Repair-Sub&lt;br /&gt;
|  0x03000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  26&lt;br /&gt;
|  Identical to BCPKG2-5-Repair-Main.&lt;br /&gt;
|-&lt;br /&gt;
|  SAFE&lt;br /&gt;
|  0x03800000&lt;br /&gt;
|  0x04000000&lt;br /&gt;
|  29&lt;br /&gt;
|  FAT32 filesystem.&lt;br /&gt;
|-&lt;br /&gt;
|  SYSTEM&lt;br /&gt;
|  0x07800000 &lt;br /&gt;
|  0xA0000000&lt;br /&gt;
|  31 (and 32?)&lt;br /&gt;
|  FAT32 filesystem.&lt;br /&gt;
|-&lt;br /&gt;
|  USER&lt;br /&gt;
|  0xA7800000&lt;br /&gt;
|  0x680000000&lt;br /&gt;
|  30&lt;br /&gt;
|  FAT32 filesystem.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x747BFFE00&lt;br /&gt;
| 0x200&lt;br /&gt;
| &lt;br /&gt;
| This is the backup GPT header specified by the main GPT header. This is also the last sector readable with Bis-storage paritionID 20.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the client process lacks the relevant permission for any of the above partition IDs, error 0x2EE202 is returned.&lt;br /&gt;
&lt;br /&gt;
[[NCA]]s stored in NAND are raw, identical to the data readable with [[Content_Manager_services#ReadEntryRaw]].&lt;br /&gt;
&lt;br /&gt;
The filenames for saveimages is just &amp;quot;&amp;lt;lower-case hex u64 saveID&amp;gt;&amp;quot;. SYSTEM-partition saveIDs are specified by [[Filesystem_services|FS]] commands, while USER-partition saveIDs are determined by FS-module internally. The high u32 of the saveID is normally either 0x00000000 or 0x80000000.&lt;br /&gt;
&lt;br /&gt;
=== PRODINFOF ===&lt;br /&gt;
 PRODINFOF&lt;br /&gt;
 ├── Certifications&lt;br /&gt;
 │   └── WirelessCertification.png&lt;br /&gt;
 └── ptd&lt;br /&gt;
     ├── DeviceIdWithEmsBit.dat&lt;br /&gt;
     ├── Ecid.dat&lt;br /&gt;
     ├── prodCode.dat&lt;br /&gt;
     └── log&lt;br /&gt;
         ├── Process_asm1.log&lt;br /&gt;
         ├── Process_board1.log&lt;br /&gt;
         ├── TestFlagLine.log&lt;br /&gt;
         ├── TestFlagQc.log&lt;br /&gt;
         ├── AGING&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── BOARD_TEST&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── BOARD_WIRELESS&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── FINAL_CHECK&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── LCD_AND_KEY&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         └── USB_AND_HP&lt;br /&gt;
             └── Sequence.log&lt;br /&gt;
&lt;br /&gt;
==== DeviceIdWithEmsBit.dat ====&lt;br /&gt;
Contains a 0x10-byte uppercase hex string, identical to the DeviceId in the [[Settings_services|DeviceCert]].&lt;br /&gt;
&lt;br /&gt;
=== SYSTEM ===&lt;br /&gt;
 SYSTEM&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]]&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 ├── [[Savegames|save]]&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── saveMeta&lt;br /&gt;
     └── ... (empty?)&lt;br /&gt;
&lt;br /&gt;
The saves stored under this partition are only for system-titles / etc.&lt;br /&gt;
&lt;br /&gt;
=== USER ===&lt;br /&gt;
 USER&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Album (Same layout as [[SD_Filesystem|SD]])&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]]&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 ├── [[Savegames|save]]&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── saveMeta&lt;br /&gt;
 │   └── ... &lt;br /&gt;
 └── temp &lt;br /&gt;
&lt;br /&gt;
The saves for all non-system applications, regardless of where the application is located(storageID), is stored here. Each user account which has savedata has a separate saveimage. Save-common for an application is presumably a separate saveimage too. Every saveimage here is &#039;&#039;only&#039;&#039; for applications.&lt;br /&gt;
&lt;br /&gt;
=== SAFE ===&lt;br /&gt;
 SAFE&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]] (nothing installed?)&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 └── [[Savegames|save]]&lt;br /&gt;
     ├── 8000000000000000&lt;br /&gt;
     └── 8000000000000120&lt;br /&gt;
&lt;br /&gt;
On a v2.1 system with MountBis, the only thing under here is &amp;quot;PRF2SAFE.RCV&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= System Savegames =&lt;br /&gt;
&lt;br /&gt;
This is a listing of known System Savedata and what titles they correspond to.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! SaveID || Owner || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x80000000000000d1 || erpt || Contains &amp;quot;/journal&amp;quot; report listing + actual crash reports (&amp;quot;/%08x-%04x-%04x-%02x%02x-%04x%08x&amp;quot;), which are serialized via [http://msgpack.org/ MsgPack].&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Flash_Filesystem&amp;diff=1699</id>
		<title>Flash Filesystem</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Flash_Filesystem&amp;diff=1699"/>
		<updated>2017-07-18T22:43:05Z</updated>

		<summary type="html">&lt;p&gt;Missile: 0x184000 analysis - feel free to break this out into its own section if it&amp;#039;s cluttery or more is discovered&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NAND structure =&lt;br /&gt;
&lt;br /&gt;
== Boot Partitions ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot Partition 0 (0 of 1)&#039;&#039;&#039;&lt;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;
|  0x000000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Title 0100000000000819 BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x004000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Title 010000000000081A BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x008000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Title 0100000000000819 BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x00C000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Title 010000000000081A BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x100000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|  Title 0100000000000819 &amp;quot;package1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  0x140000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|  Title 0100000000000819 &amp;quot;package1&amp;quot; (Backup)&lt;br /&gt;
|-&lt;br /&gt;
|  0x180000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Keyblob area&lt;br /&gt;
|-&lt;br /&gt;
|  0x184000&lt;br /&gt;
|  0x20&lt;br /&gt;
|  Unknown pseudorandom data, changes every boot. All zero on 1.0.&lt;br /&gt;
|-&lt;br /&gt;
|  0x184020&lt;br /&gt;
|  0x8?&lt;br /&gt;
| Increments on every boot. Bottom 10 bits (0x3FF) are always zero. All zero on 1.0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot Partition 1 (1 of 1)&#039;&#039;&#039;&lt;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;
|  0x000000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|  Title 010000000000081A &amp;quot;package1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  0x040000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|  Title 010000000000081A &amp;quot;package1&amp;quot; (Backup)&lt;br /&gt;
|-&lt;br /&gt;
|  0x080000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|  0x0C0000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyblob ===&lt;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;
| 0x10&lt;br /&gt;
| Keyblob AES-CMAC over the remaining 0xA0-bytes (Checked with a mem-diff function which is safe against timing attacks, calls the general panic() func on failure)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| Keyblob AES CTR&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x90&lt;br /&gt;
| Keyblob encrypted payload&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0&lt;br /&gt;
| 0x150&lt;br /&gt;
| Unused, all-zero.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Starting at 0x180000 is an array of 0x200-byte entries, for a total of 32 keyblobs. Each one is unique compared to the others. They are all console unique.&lt;br /&gt;
&lt;br /&gt;
The 0xB0-byte keyblob is installed to the &amp;quot;customer data&amp;quot; section in BCTs (BCT+0x450).&lt;br /&gt;
&lt;br /&gt;
BCT offset 0x2330 is the field controlling which keyblob gets used. NS uses this to inject the appropriate keyblob on system update. [[Boot]] also uses this index for repairing corrupt sectors.&lt;br /&gt;
&lt;br /&gt;
With [ [[3.0.0]] + ] index 2 is used instead of index 1.&lt;br /&gt;
&lt;br /&gt;
The Tegra 210 BCT format can be found in nvidia&#039;s cbootimage [https://github.com/thierryreding/tegra-avp/blob/35f467996e532357db54894c975acab93293d219/include/avp/tegra210/bct.h#L521]&lt;br /&gt;
&lt;br /&gt;
== User Partitions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Partition name&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  [[Filesystem_services|Bis]] Partition ID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  N/A&lt;br /&gt;
|  0x0&lt;br /&gt;
|  &lt;br /&gt;
|  20&lt;br /&gt;
|  GPT header, Bis-storage also allows raw access to the entire NAND eMMC sectors starting at sector0.&lt;br /&gt;
|-&lt;br /&gt;
|  PRODINFO&lt;br /&gt;
|  0x00004400&lt;br /&gt;
|  0x003FBC00&lt;br /&gt;
|  27&lt;br /&gt;
|  &amp;quot;CAL0&amp;quot; raw partition containing set:cal data.&lt;br /&gt;
|-&lt;br /&gt;
|  PRODINFOF&lt;br /&gt;
|  0x00400000&lt;br /&gt;
|  0x00400000&lt;br /&gt;
|  28&lt;br /&gt;
|  FAT12 filesystem, additional calibration.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-1-Normal-Main&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  21&lt;br /&gt;
|  For all these packages, data starts at offset 0x4000 and is not console-unique. This is installed from &amp;quot;package2&amp;quot; in firmware package A (0100000000000819) by default. With the exFAT update installed, this is switched to firmware package C (010000000000081B). The data stored here matches the raw /nx/package2 file stored in the 81[9AB] data archives -- there is no additional encryption.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-2-Normal-Sub&lt;br /&gt;
|  0x01000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  22&lt;br /&gt;
|  Identical to BCPKG2-1-Normal-Main, probably used as a backup partition.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-3-SafeMode-Main&lt;br /&gt;
|  0x01800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  23&lt;br /&gt;
|  This is installed from &amp;quot;package2&amp;quot; in firmware package B (010000000000081A).&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-4-SafeMode-Sub&lt;br /&gt;
|  0x02000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  24&lt;br /&gt;
|  Identical to BCPKG2-3-SafeMode-Main.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-5-Repair-Main&lt;br /&gt;
|  0x02800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  25&lt;br /&gt;
|  Installed at the factory.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-6-Repair-Sub&lt;br /&gt;
|  0x03000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  26&lt;br /&gt;
|  Identical to BCPKG2-5-Repair-Main.&lt;br /&gt;
|-&lt;br /&gt;
|  SAFE&lt;br /&gt;
|  0x03800000&lt;br /&gt;
|  0x04000000&lt;br /&gt;
|  29&lt;br /&gt;
|  FAT32 filesystem.&lt;br /&gt;
|-&lt;br /&gt;
|  SYSTEM&lt;br /&gt;
|  0x07800000 &lt;br /&gt;
|  0xA0000000&lt;br /&gt;
|  31 (and 32?)&lt;br /&gt;
|  FAT32 filesystem.&lt;br /&gt;
|-&lt;br /&gt;
|  USER&lt;br /&gt;
|  0xA7800000&lt;br /&gt;
|  0x680000000&lt;br /&gt;
|  30&lt;br /&gt;
|  FAT32 filesystem.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x747BFFE00&lt;br /&gt;
| 0x200&lt;br /&gt;
| &lt;br /&gt;
| This is the backup GPT header specified by the main GPT header. This is also the last sector readable with Bis-storage paritionID 20.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the client process lacks the relevant permission for any of the above partition IDs, error 0x2EE202 is returned.&lt;br /&gt;
&lt;br /&gt;
[[NCA]]s stored in NAND are raw, identical to the data readable with [[Content_Manager_services#ReadEntryRaw]].&lt;br /&gt;
&lt;br /&gt;
The filenames for saveimages is just &amp;quot;&amp;lt;lower-case hex u64 saveID&amp;gt;&amp;quot;. SYSTEM-partition saveIDs are specified by [[Filesystem_services|FS]] commands, while USER-partition saveIDs are determined by FS-module internally. The high u32 of the saveID is normally either 0x00000000 or 0x80000000.&lt;br /&gt;
&lt;br /&gt;
=== PRODINFOF ===&lt;br /&gt;
 PRODINFOF&lt;br /&gt;
 ├── Certifications&lt;br /&gt;
 │   └── WirelessCertification.png&lt;br /&gt;
 └── ptd&lt;br /&gt;
     ├── DeviceIdWithEmsBit.dat&lt;br /&gt;
     ├── Ecid.dat&lt;br /&gt;
     ├── prodCode.dat&lt;br /&gt;
     └── log&lt;br /&gt;
         ├── Process_asm1.log&lt;br /&gt;
         ├── Process_board1.log&lt;br /&gt;
         ├── TestFlagLine.log&lt;br /&gt;
         ├── TestFlagQc.log&lt;br /&gt;
         ├── AGING&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── BOARD_TEST&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── BOARD_WIRELESS&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── FINAL_CHECK&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── LCD_AND_KEY&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         └── USB_AND_HP&lt;br /&gt;
             └── Sequence.log&lt;br /&gt;
&lt;br /&gt;
==== DeviceIdWithEmsBit.dat ====&lt;br /&gt;
Contains a 0x10-byte uppercase hex string, identical to the DeviceId in the [[Settings_services|DeviceCert]].&lt;br /&gt;
&lt;br /&gt;
=== SYSTEM ===&lt;br /&gt;
 SYSTEM&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]]&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 ├── [[Savegames|save]]&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── saveMeta&lt;br /&gt;
     └── ... (empty?)&lt;br /&gt;
&lt;br /&gt;
The saves stored under this partition are only for system-titles / etc.&lt;br /&gt;
&lt;br /&gt;
=== USER ===&lt;br /&gt;
 USER&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Album (Same layout as [[SD_Filesystem|SD]])&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]]&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 ├── [[Savegames|save]]&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── saveMeta&lt;br /&gt;
 │   └── ... &lt;br /&gt;
 └── temp &lt;br /&gt;
&lt;br /&gt;
The saves for all non-system applications, regardless of where the application is located(storageID), is stored here. Each user account which has savedata has a separate saveimage. Save-common for an application is presumably a separate saveimage too. Every saveimage here is &#039;&#039;only&#039;&#039; for applications.&lt;br /&gt;
&lt;br /&gt;
=== SAFE ===&lt;br /&gt;
 SAFE&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]] (nothing installed?)&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 └── [[Savegames|save]]&lt;br /&gt;
     ├── 8000000000000000&lt;br /&gt;
     └── 8000000000000120&lt;br /&gt;
&lt;br /&gt;
On a v2.1 system with MountBis, the only thing under here is &amp;quot;PRF2SAFE.RCV&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= System Savegames =&lt;br /&gt;
&lt;br /&gt;
This is a listing of known System Savedata and what titles they correspond to.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! SaveID || Owner || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x80000000000000d1 || erpt || Contains &amp;quot;/journal&amp;quot; report listing + actual crash reports (&amp;quot;/%08x-%04x-%04x-%02x%02x-%04x%08x&amp;quot;), which are serialized via [http://msgpack.org/ MsgPack].&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Flash_Filesystem&amp;diff=1697</id>
		<title>Flash Filesystem</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Flash_Filesystem&amp;diff=1697"/>
		<updated>2017-07-18T22:11:31Z</updated>

		<summary type="html">&lt;p&gt;Missile: clarify the intention of cmac check function, this is actually identical to a fix deployed on xbox360 cb&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NAND structure =&lt;br /&gt;
&lt;br /&gt;
== Boot Partitions ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot Partition 0 (0 of 1)&#039;&#039;&#039;&lt;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;
|  0x000000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Title 0100000000000819 BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x004000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Title 010000000000081A BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x008000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Title 0100000000000819 BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x00C000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Title 010000000000081A BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x100000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|  Title 0100000000000819 &amp;quot;package1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  0x140000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|  Title 0100000000000819 &amp;quot;package1&amp;quot; (Backup)&lt;br /&gt;
|-&lt;br /&gt;
|  0x180000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Keyblob area&lt;br /&gt;
|-&lt;br /&gt;
|  0x184000&lt;br /&gt;
|  &lt;br /&gt;
|  Unknown, 0x20-bytes hash (updated when bcpkg-2-1 updates) + one u64? (may be incremented on bcpkg update) All zero on 1.0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot Partition 1 (1 of 1)&#039;&#039;&#039;&lt;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;
|  0x000000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|  Title 010000000000081A &amp;quot;package1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  0x040000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|  Title 010000000000081A &amp;quot;package1&amp;quot; (Backup)&lt;br /&gt;
|-&lt;br /&gt;
|  0x080000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|  0x0C0000&lt;br /&gt;
|  0x40000&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyblob ===&lt;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;
| 0x10&lt;br /&gt;
| Keyblob AES-CMAC over the remaining 0xA0-bytes (Checked with a mem-diff function which is safe against timing attacks, calls the general panic() func on failure)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| Keyblob AES CTR&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x90&lt;br /&gt;
| Keyblob encrypted payload&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0&lt;br /&gt;
| 0x150&lt;br /&gt;
| Unused, all-zero.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Starting at 0x180000 is an array of 0x200-byte entries, for a total of 32 keyblobs. Each one is unique compared to the others. They are all console unique.&lt;br /&gt;
&lt;br /&gt;
The 0xB0-byte keyblob is installed to the &amp;quot;customer data&amp;quot; section in BCTs (BCT+0x450).&lt;br /&gt;
&lt;br /&gt;
BCT offset 0x2330 is the field controlling which keyblob gets used. NS uses this to inject the appropriate keyblob on system update. [[Boot]] also uses this index for repairing corrupt sectors.&lt;br /&gt;
&lt;br /&gt;
With [ [[3.0.0]] + ] index 2 is used instead of index 1.&lt;br /&gt;
&lt;br /&gt;
The Tegra 210 BCT format can be found in nvidia&#039;s cbootimage [https://github.com/thierryreding/tegra-avp/blob/35f467996e532357db54894c975acab93293d219/include/avp/tegra210/bct.h#L521]&lt;br /&gt;
&lt;br /&gt;
== User Partitions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Partition name&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  [[Filesystem_services|Bis]] Partition ID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  N/A&lt;br /&gt;
|  0x0&lt;br /&gt;
|  &lt;br /&gt;
|  20&lt;br /&gt;
|  GPT header, Bis-storage also allows raw access to the entire NAND eMMC sectors starting at sector0.&lt;br /&gt;
|-&lt;br /&gt;
|  PRODINFO&lt;br /&gt;
|  0x00004400&lt;br /&gt;
|  0x003FBC00&lt;br /&gt;
|  27&lt;br /&gt;
|  &amp;quot;CAL0&amp;quot; raw partition containing set:cal data.&lt;br /&gt;
|-&lt;br /&gt;
|  PRODINFOF&lt;br /&gt;
|  0x00400000&lt;br /&gt;
|  0x00400000&lt;br /&gt;
|  28&lt;br /&gt;
|  FAT12 filesystem, additional calibration.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-1-Normal-Main&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  21&lt;br /&gt;
|  For all these packages, data starts at offset 0x4000 and is not console-unique. This is installed from &amp;quot;package2&amp;quot; in firmware package A (0100000000000819) by default. With the exFAT update installed, this is switched to firmware package C (010000000000081B). The data stored here matches the raw /nx/package2 file stored in the 81[9AB] data archives -- there is no additional encryption.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-2-Normal-Sub&lt;br /&gt;
|  0x01000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  22&lt;br /&gt;
|  Identical to BCPKG2-1-Normal-Main, probably used as a backup partition.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-3-SafeMode-Main&lt;br /&gt;
|  0x01800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  23&lt;br /&gt;
|  This is installed from &amp;quot;package2&amp;quot; in firmware package B (010000000000081A).&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-4-SafeMode-Sub&lt;br /&gt;
|  0x02000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  24&lt;br /&gt;
|  Identical to BCPKG2-3-SafeMode-Main.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-5-Repair-Main&lt;br /&gt;
|  0x02800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  25&lt;br /&gt;
|  Installed at the factory.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-6-Repair-Sub&lt;br /&gt;
|  0x03000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  26&lt;br /&gt;
|  Identical to BCPKG2-5-Repair-Main.&lt;br /&gt;
|-&lt;br /&gt;
|  SAFE&lt;br /&gt;
|  0x03800000&lt;br /&gt;
|  0x04000000&lt;br /&gt;
|  29&lt;br /&gt;
|  FAT32 filesystem.&lt;br /&gt;
|-&lt;br /&gt;
|  SYSTEM&lt;br /&gt;
|  0x07800000 &lt;br /&gt;
|  0xA0000000&lt;br /&gt;
|  31 (and 32?)&lt;br /&gt;
|  FAT32 filesystem.&lt;br /&gt;
|-&lt;br /&gt;
|  USER&lt;br /&gt;
|  0xA7800000&lt;br /&gt;
|  0x680000000&lt;br /&gt;
|  30&lt;br /&gt;
|  FAT32 filesystem.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x747BFFE00&lt;br /&gt;
| 0x200&lt;br /&gt;
| &lt;br /&gt;
| This is the backup GPT header specified by the main GPT header. This is also the last sector readable with Bis-storage paritionID 20.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the client process lacks the relevant permission for any of the above partition IDs, error 0x2EE202 is returned.&lt;br /&gt;
&lt;br /&gt;
[[NCA]]s stored in NAND are raw, identical to the data readable with [[Content_Manager_services#ReadEntryRaw]].&lt;br /&gt;
&lt;br /&gt;
The filenames for saveimages is just &amp;quot;&amp;lt;lower-case hex u64 saveID&amp;gt;&amp;quot;. SYSTEM-partition saveIDs are specified by [[Filesystem_services|FS]] commands, while USER-partition saveIDs are determined by FS-module internally. The high u32 of the saveID is normally either 0x00000000 or 0x80000000.&lt;br /&gt;
&lt;br /&gt;
=== PRODINFOF ===&lt;br /&gt;
 PRODINFOF&lt;br /&gt;
 ├── Certifications&lt;br /&gt;
 │   └── WirelessCertification.png&lt;br /&gt;
 └── ptd&lt;br /&gt;
     ├── DeviceIdWithEmsBit.dat&lt;br /&gt;
     ├── Ecid.dat&lt;br /&gt;
     ├── prodCode.dat&lt;br /&gt;
     └── log&lt;br /&gt;
         ├── Process_asm1.log&lt;br /&gt;
         ├── Process_board1.log&lt;br /&gt;
         ├── TestFlagLine.log&lt;br /&gt;
         ├── TestFlagQc.log&lt;br /&gt;
         ├── AGING&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── BOARD_TEST&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── BOARD_WIRELESS&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── FINAL_CHECK&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── LCD_AND_KEY&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         └── USB_AND_HP&lt;br /&gt;
             └── Sequence.log&lt;br /&gt;
&lt;br /&gt;
==== DeviceIdWithEmsBit.dat ====&lt;br /&gt;
Contains a 0x10-byte uppercase hex string, identical to the DeviceId in the [[Settings_services|DeviceCert]].&lt;br /&gt;
&lt;br /&gt;
=== SYSTEM ===&lt;br /&gt;
 SYSTEM&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]]&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 ├── [[Savegames|save]]&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── saveMeta&lt;br /&gt;
     └── ... (empty?)&lt;br /&gt;
&lt;br /&gt;
The saves stored under this partition are only for system-titles / etc.&lt;br /&gt;
&lt;br /&gt;
=== USER ===&lt;br /&gt;
 USER&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Album (Same layout as [[SD_Filesystem|SD]])&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]]&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 ├── [[Savegames|save]]&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── saveMeta&lt;br /&gt;
 │   └── ... &lt;br /&gt;
 └── temp &lt;br /&gt;
&lt;br /&gt;
The saves for all non-system applications, regardless of where the application is located(storageID), is stored here. Each user account which has savedata has a separate saveimage. Save-common for an application is presumably a separate saveimage too. Every saveimage here is &#039;&#039;only&#039;&#039; for applications.&lt;br /&gt;
&lt;br /&gt;
=== SAFE ===&lt;br /&gt;
 SAFE&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]] (nothing installed?)&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 └── [[Savegames|save]]&lt;br /&gt;
     ├── 8000000000000000&lt;br /&gt;
     └── 8000000000000120&lt;br /&gt;
&lt;br /&gt;
On a v2.1 system with MountBis, the only thing under here is &amp;quot;PRF2SAFE.RCV&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= System Savegames =&lt;br /&gt;
&lt;br /&gt;
This is a listing of known System Savedata and what titles they correspond to.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! SaveID || Owner || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x80000000000000d1 || erpt || Contains &amp;quot;/journal&amp;quot; report listing + actual crash reports (&amp;quot;/%08x-%04x-%04x-%02x%02x-%04x%08x&amp;quot;), which are serialized via [http://msgpack.org/ MsgPack].&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Services_API&amp;diff=1500</id>
		<title>Services API</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Services_API&amp;diff=1500"/>
		<updated>2017-07-12T19:06:57Z</updated>

		<summary type="html">&lt;p&gt;Missile: capsrv internal service names&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Services are system processes running in the background which wait for incoming requests. When a process wants to communicate with a service, it first needs to get a handle to the named service, and then it can communicate with the service via inter-process communication (each service has a name up to 8 characters).&lt;br /&gt;
&lt;br /&gt;
Handles for services are retrieved from the service manager port, &amp;quot;sm:&amp;quot;. Manager service &amp;quot;sm:m&amp;quot; also exists. Services are an abstraction of ports, they operate the same way except regular ports can have their handles retrieved directly from a SVC.&lt;br /&gt;
&lt;br /&gt;
= sm: =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetService]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#RegisterService]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#UnregisterService]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Initialize ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Word || Value&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0x00000004&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x8000000A&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x00000001&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0-1 || Pid&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0 || &amp;quot;SFCI&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x00000000&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Always 0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetService ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Word || Value&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0x00000004&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x0000000A&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0 || &amp;quot;SFCI&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x00000001&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Service name, zero padded and casted to u64.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RegisterService ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Word || Value&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0x00000004&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x0000000C&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0 || &amp;quot;SFCI&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x00000002&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Service name, zero padded and casted to u64.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Max sessions? 32-bit integer.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Unknown bool&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UnregisterService ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Word || Value&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0x00000004&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x0000000A&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0 || &amp;quot;SFCI&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x00000003&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Service name, zero padded and casted to u64.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= sm:m =&lt;br /&gt;
This service is presumably equivalent to 3DS &amp;quot;srv:pm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Service List =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Service names&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;200&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;200&amp;quot; | Notes&lt;br /&gt;
|-&lt;br /&gt;
| acc:u0, acc:u1, acc:aa, acc:su&lt;br /&gt;
| [[Account services]]&lt;br /&gt;
| u0: System, u1: User, su: Admin, aa: Baas&lt;br /&gt;
|-&lt;br /&gt;
| ahid:cd, ahid:hdr, hid, hid:dbg, hid:sys, (htc?), irs, irs:sys, xcd:sys&lt;br /&gt;
| [[HID services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| appletAE, appletOE, idle:sys, omm, spsm&lt;br /&gt;
| Applet services, [[OMM services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| aoc:u, mii:u, mii:e, ns:am, ns:su, ns:dev, pl:u, ovln:rcv, ovln:snd, pdm:ntfy, pdm:qry&lt;br /&gt;
| [[NS Services]]&lt;br /&gt;
| am: Application Manager, su: System Update&lt;br /&gt;
|-&lt;br /&gt;
| apm, apm:p, apm:sys, fgm, fgm:0, fgm:9, (fgm:dbg?)&lt;br /&gt;
| [[APM services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| arp:r, arp:w, bgtc:t, bgtc:sc&lt;br /&gt;
| Glue services&lt;br /&gt;
| r: Reader, w: Writer&lt;br /&gt;
|-&lt;br /&gt;
| audin:a, audin:d, audin:u, audout:a, audout:d, audout:u, audren:a, audren:d, audren:u, audrec:a, audrec:d, audrec:u, audctl, codecctl, hwopus&lt;br /&gt;
| Audio services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;bcat:a, bcat:u, bcat:m, bcat:s, news:a, news:c, news:m, news:p, news:v, prepo:u, prepo:s, prepo:m, prepo:a&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| [[BCAT services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| bpc, bpc:r, pcv, pcv:imm, time:u, time:a, time:s&lt;br /&gt;
| [[BPC services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| bsd:u, bsd:s, bsdcfg, ethc:c, ethc:i, nsd:u, nsd:a, sfdnsres&lt;br /&gt;
| [[Sockets services]], [[NSD services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| btdrv&lt;br /&gt;
| Bluetooth Driver services&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| btm, btm:dbg, btm:sys&lt;br /&gt;
| Battery services&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| caps:a, caps:c&lt;br /&gt;
| Capture services&lt;br /&gt;
| a: AlbumAccessor, c: AlbumControl&lt;br /&gt;
|-&lt;br /&gt;
| caps:sc, caps:ss, mm:u, vi:m, vi:s, vi:u, cec-mgr&lt;br /&gt;
| [[Display services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| csrng&lt;br /&gt;
| [[Secure RNG services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| dispdrv&lt;br /&gt;
| Nvnflinger services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| erpt:c, erpt:r&lt;br /&gt;
| Error Report services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| es&lt;br /&gt;
| ETicket services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| fan, psm, tc, ts&lt;br /&gt;
| PTM services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| fatal:u, fatal:p&lt;br /&gt;
| Fatal Error services&lt;br /&gt;
| u: User, p: Privileged&lt;br /&gt;
|-&lt;br /&gt;
| friend:u, friend:v, friend:m, friend:s, friend:a&lt;br /&gt;
| Friend services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| fsp-srv, fsp-ldr, fsp-pr&lt;br /&gt;
| [[Filesystem services]]&lt;br /&gt;
| srv: Main, ldr: Loader, pr: Program Registry&lt;br /&gt;
|-&lt;br /&gt;
| gpio, i2c, i2c:pcv, pinmux, pwm, uart&lt;br /&gt;
| [[Bus services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lbl&lt;br /&gt;
| [[Backlight services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ldn:m, ldn:s, ldn:u&lt;br /&gt;
| [[Local Network Monitor services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ldr:pm, ldr:ro, ldr:shel, ldr:dmnt&lt;br /&gt;
| [[Loader services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lm&lt;br /&gt;
| Log services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lr, ncm, ncm:v&lt;br /&gt;
| [[Location Resolver services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| nfc:am, nfc:mf:u, nfc:user, nfc:sys&lt;br /&gt;
| NFC services&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| nifm:u, nifm:a, nifm:s&lt;br /&gt;
| [[Network Interface services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| nim, nim:shp, ntc&lt;br /&gt;
| [[NIM services]]&lt;br /&gt;
| shp: eShop&lt;br /&gt;
|-&lt;br /&gt;
| npns:u, npns:s&lt;br /&gt;
| NPNS services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| nvdrv:a, nvdrv:s, nvdrv:t, nvdrv, nvdrvdbg, nvgem:c, nvgem:cd, nvmemp&lt;br /&gt;
| [[NV services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pcie&lt;br /&gt;
| [[PCIe services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pctl, pctl:a, pctl:s, pctl:r&lt;br /&gt;
| Parental Control services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pm:bm, pm:info, pm:shell&lt;br /&gt;
| [[Process Manager services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| psc:c, psc:m&lt;br /&gt;
| PSC services&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| set, set:fd, set:cal, set:sys&lt;br /&gt;
| [[Settings services]]&lt;br /&gt;
| cal: calibration, sys: System Settings&lt;br /&gt;
|-&lt;br /&gt;
| ssl&lt;br /&gt;
| [[SSL services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| spl:&lt;br /&gt;
| [[SPL services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| usb:ds, usb:hs, usb:pd, usb:pd:c, usb:pm&lt;br /&gt;
| USB services&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| wlan:inf, wlan:lcl, wlan:lg, wlan:lga, wlan:sg, wlan:soc&lt;br /&gt;
| WLAN services&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Flash_Filesystem&amp;diff=1478</id>
		<title>Flash Filesystem</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Flash_Filesystem&amp;diff=1478"/>
		<updated>2017-07-11T12:17:54Z</updated>

		<summary type="html">&lt;p&gt;Missile: fun fact: failing this CMAC check will blow fuses&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NAND structure =&lt;br /&gt;
&lt;br /&gt;
== Boot Partitions ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot Partition 0 (0 of 1)&#039;&#039;&#039;&lt;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;
|  0x000000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x004000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x008000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x00C000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x100000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 &amp;quot;package1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  0x140000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 &amp;quot;package1&amp;quot; (Backup)&lt;br /&gt;
|-&lt;br /&gt;
|  0x180000&lt;br /&gt;
|  0x4000&lt;br /&gt;
|  Keyblob area&lt;br /&gt;
|-&lt;br /&gt;
|  0x184000&lt;br /&gt;
|  &lt;br /&gt;
|  Unknown, 0x20-bytes hash (updated when bcpkg-2-1 updates) + one u64? (may be incremented on bcpkg update) All zero on 1.0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot Partition 1 (1 of 1)&#039;&#039;&#039;&lt;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;
|  0x000000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A &amp;quot;package1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  0x040000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A &amp;quot;package1&amp;quot; (Backup)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyblob ===&lt;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;
| 0x10&lt;br /&gt;
| Keyblob AES-CMAC&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| Keyblob AES IV&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x90&lt;br /&gt;
| Keyblob encrypted payload&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0&lt;br /&gt;
| 0x150&lt;br /&gt;
| Unused, all-zero.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The data at 0x180000 is an array of 0x200-byte entries, with a total of 32 entries. Therefore, there&#039;s 32 different keyblobs are stored here. The raw data for each one is unique compared to the others.&lt;br /&gt;
&lt;br /&gt;
The 0xB0-byte keyblob is installed to the console-unique &amp;quot;customer data&amp;quot; section in BCTs(BCT+0x450), which is what gets used during system boot.&lt;br /&gt;
&lt;br /&gt;
Which keyblob is loaded from here during install is presumably somewhere in BCT? &amp;lt;v3.0 use index0, v3.0 uses index1. Hence, the installed keyblob was changed with v3.0.&lt;br /&gt;
&lt;br /&gt;
== User Partitions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Partition name&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  [[Filesystem_services|Bis]] Partition ID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  N/A&lt;br /&gt;
|  0x0&lt;br /&gt;
|  &lt;br /&gt;
|  20&lt;br /&gt;
|  GPT header, Bis-storage also allows raw access to the entire NAND eMMC sectors starting at sector0.&lt;br /&gt;
|-&lt;br /&gt;
|  PRODINFO&lt;br /&gt;
|  0x00004400&lt;br /&gt;
|  0x003FBC00&lt;br /&gt;
|  27&lt;br /&gt;
|  &amp;quot;CAL0&amp;quot; raw partition containing set:cal data.&lt;br /&gt;
|-&lt;br /&gt;
|  PRODINFOF&lt;br /&gt;
|  0x00400000&lt;br /&gt;
|  0x00400000&lt;br /&gt;
|  28&lt;br /&gt;
|  FAT12 filesystem, additional calibration.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-1-Normal-Main&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  21&lt;br /&gt;
|  For all these packages, data starts at offset 0x4000 and is not console-unique. This is installed from &amp;quot;package2&amp;quot; in firmware package A (0100000000000819) by default. With the exFAT update installed, this is switched to firmware package C (010000000000081B).&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-2-Normal-Sub&lt;br /&gt;
|  0x01000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  22&lt;br /&gt;
|  Identical to BCPKG2-1-Normal-Main, probably used as a backup partition.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-3-SafeMode-Main&lt;br /&gt;
|  0x01800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  23&lt;br /&gt;
|  This is installed from &amp;quot;package2&amp;quot; in firmware package B (010000000000081A).&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-4-SafeMode-Sub&lt;br /&gt;
|  0x02000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  24&lt;br /&gt;
|  Identical to BCPKG2-3-SafeMode-Main.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-5-Repair-Main&lt;br /&gt;
|  0x02800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  25&lt;br /&gt;
|  Installed at the factory.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-6-Repair-Sub&lt;br /&gt;
|  0x03000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  26&lt;br /&gt;
|  Identical to BCPKG2-5-Repair-Main.&lt;br /&gt;
|-&lt;br /&gt;
|  SAFE&lt;br /&gt;
|  0x03800000&lt;br /&gt;
|  0x04000000&lt;br /&gt;
|  29&lt;br /&gt;
|  FAT32 filesystem.&lt;br /&gt;
|-&lt;br /&gt;
|  SYSTEM&lt;br /&gt;
|  0x07800000 &lt;br /&gt;
|  0xA0000000&lt;br /&gt;
|  31 (and 32?)&lt;br /&gt;
|  FAT32 filesystem.&lt;br /&gt;
|-&lt;br /&gt;
|  USER&lt;br /&gt;
|  0xA7800000&lt;br /&gt;
|  0x680000000&lt;br /&gt;
|  30&lt;br /&gt;
|  FAT32 filesystem.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x747BFFE00&lt;br /&gt;
| 0x200&lt;br /&gt;
| &lt;br /&gt;
| This is the backup GPT header specified by the main GPT header. This is also the last sector readable with Bis-storage paritionID 20.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the client process lacks the relevant permission for any of the above partition IDs, error 0x2EE202 is returned.&lt;br /&gt;
&lt;br /&gt;
[[NCA]]s stored in NAND are raw, identical to the data readable with [[Content_Manager_services#ReadEntryRaw]].&lt;br /&gt;
&lt;br /&gt;
The filenames for saveimages is just &amp;quot;&amp;lt;lower-case hex u64 saveID&amp;gt;&amp;quot;. SYSTEM-partition saveIDs are specified by [[Filesystem_services|FS]] commands, while USER-partition saveIDs are determined by FS-module internally. The high u32 of the saveID is normally either 0x00000000 or 0x80000000.&lt;br /&gt;
&lt;br /&gt;
=== PRODINFOF ===&lt;br /&gt;
 PRODINFOF&lt;br /&gt;
 ├── Certifications&lt;br /&gt;
 │   └── WirelessCertification.png&lt;br /&gt;
 └── ptd&lt;br /&gt;
     ├── DeviceIdWithEmsBit.dat&lt;br /&gt;
     ├── Ecid.dat&lt;br /&gt;
     ├── prodCode.dat&lt;br /&gt;
     └── log&lt;br /&gt;
         ├── Process_asm1.log&lt;br /&gt;
         ├── Process_board1.log&lt;br /&gt;
         ├── TestFlagLine.log&lt;br /&gt;
         ├── TestFlagQc.log&lt;br /&gt;
         ├── AGING&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── BOARD_TEST&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── BOARD_WIRELESS&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── FINAL_CHECK&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── LCD_AND_KEY&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         └── USB_AND_HP&lt;br /&gt;
             └── Sequence.log&lt;br /&gt;
&lt;br /&gt;
==== DeviceIdWithEmsBit.dat ====&lt;br /&gt;
Contains a 0x10-byte uppercase hex string, identical to the DeviceId in the [[Settings_services|DeviceCert]].&lt;br /&gt;
&lt;br /&gt;
=== SYSTEM ===&lt;br /&gt;
 SYSTEM&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]]&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 ├── [[Savegames|save]]&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── saveMeta&lt;br /&gt;
     └── ... (empty?)&lt;br /&gt;
&lt;br /&gt;
The saves stored under this partition are only for system-titles / etc.&lt;br /&gt;
&lt;br /&gt;
=== USER ===&lt;br /&gt;
 USER&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Album (Same layout as [[SD_Filesystem|SD]])&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]]&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 ├── [[Savegames|save]]&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 ├── saveMeta&lt;br /&gt;
 │   └── ... &lt;br /&gt;
 └── temp &lt;br /&gt;
&lt;br /&gt;
The saves for all non-system applications, regardless of where the application is located(storageID), is stored here. Each user account which has savedata has a separate saveimage. Save-common for an application is presumably a separate saveimage too. Every saveimage here is &#039;&#039;only&#039;&#039; for applications.&lt;br /&gt;
&lt;br /&gt;
=== SAFE ===&lt;br /&gt;
 SAFE&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]] (nothing installed?)&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 └── [[Savegames|save]]&lt;br /&gt;
     ├── 8000000000000000&lt;br /&gt;
     └── 8000000000000120&lt;br /&gt;
&lt;br /&gt;
On a v2.1 system with MountBis, the only thing under here is &amp;quot;PRF2SAFE.RCV&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=PPC_services&amp;diff=1476</id>
		<title>PPC services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=PPC_services&amp;diff=1476"/>
		<updated>2017-07-11T10:45:37Z</updated>

		<summary type="html">&lt;p&gt;Missile: add settings (performance_mode_policy is neat)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;APM is utilized for setting system performance profiles; including clocks for CPU, GPU, and memory.&lt;br /&gt;
&lt;br /&gt;
== apm ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ISession|GetISession]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPerformanceMode || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== apm:p ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ISession|GetISession]] || Same as apm ISession - but more privileged?&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ? || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== apm:sys ==&lt;br /&gt;
Internally known as ISystemManager&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPerformanceConfiguration || Takes u32 PerformanceMode&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPerformanceConfiguration  || Takes u32 PerformanceMode, u32 PerformanceConfiguration &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PerformanceMode ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Handheld&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Docked&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PerformanceConfiguration ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || CPU clock || GPU clock || Memory clock&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000 || 1020 || 384 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001 || 1020 || 768 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010002 || 1224 || 691.2 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000 || 1020 || 230.4 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001 || 1020 || 307.2 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020002 || 1224|| 230.4 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020003 || 1020 || 307 || 1331.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020004 || 1020 || 384 || 1331.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020005 || 1020 || 307.2 || 1065.6&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020006 || 1020 || 384 || 1065.6&lt;br /&gt;
|-&lt;br /&gt;
| 0x92220007 || 1020  || 460.8 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x92220008 || 1020 || 460.8 || 1331.2&lt;br /&gt;
|}&lt;br /&gt;
Clocks are all in MHz.&lt;br /&gt;
&lt;br /&gt;
Configurations 0x10001 and 0x20000 are only available while docked. Configurations 0x10002 and 0x20002 do not seem to be available at all (dependent on apm settings?).&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Key || Size || Notes&lt;br /&gt;
|-&lt;br /&gt;
| battery_draining_enabled|| 1 || ?&lt;br /&gt;
|-&lt;br /&gt;
| performance_mode_policy|| strlen || &amp;quot;auto&amp;quot;: use boost mode when docked. &amp;quot;normal&amp;quot;: never use boost mode. &amp;quot;boost&amp;quot;: always use boost mode (devkit only).&lt;br /&gt;
|-&lt;br /&gt;
| sdev_cpu_overclock_enabled || 1 || Not used as of 3.0. May have been used to allow access to 1224MHz CPU mode?&lt;br /&gt;
|-&lt;br /&gt;
| sdev_throttling_additional_delay_us || 4 || ?&lt;br /&gt;
|-&lt;br /&gt;
| sdev_throttling_additional_delay_enabled || 1 || ?&lt;br /&gt;
|-&lt;br /&gt;
| throttling_for_smpd_enabled || 1 || Not used as of 3.0.&lt;br /&gt;
|-&lt;br /&gt;
| throttling_for_undock_enabled || 1 || Not used as of 3.0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=PPC_services&amp;diff=1474</id>
		<title>PPC services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=PPC_services&amp;diff=1474"/>
		<updated>2017-07-11T08:08:48Z</updated>

		<summary type="html">&lt;p&gt;Missile: /* PerformanceConfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;APM is utilized for setting system performance profiles; including clocks for CPU, GPU, and memory.&lt;br /&gt;
&lt;br /&gt;
== apm ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ISession|GetISession]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPerformanceMode || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== apm:p ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ISession|GetISession]] || Same as apm ISession - but more privileged?&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ? || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== apm:sys ==&lt;br /&gt;
Internally known as ISystemManager&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPerformanceConfiguration || Takes u32 PerformanceMode&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPerformanceConfiguration  || Takes u32 PerformanceMode, u32 PerformanceConfiguration &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PerformanceMode ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Handheld&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Docked&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PerformanceConfiguration ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || CPU clock || GPU clock || Memory clock&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000 || 1020 || 384 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001 || 1020 || 768 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010002 || 1224 || 691.2 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000 || 1020 || 230.4 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001 || 1020 || 307.2 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020002 || 1224|| 230.4 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020003 || 1020 || 307 || 1331.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020004 || 1020 || 384 || 1331.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020005 || 1020 || 307.2 || 1065.6&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020006 || 1020 || 384 || 1065.6&lt;br /&gt;
|-&lt;br /&gt;
| 0x92220007 || 1020  || 460.8 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x92220008 || 1020 || 460.8 || 1331.2&lt;br /&gt;
|}&lt;br /&gt;
Clocks are all in MHz.&lt;br /&gt;
&lt;br /&gt;
Configurations 0x10001 and 0x20000 are only available while docked. Configurations 0x10002 and 0x20002 do not seem to be available at all (dependent on apm settings?).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=PPC_services&amp;diff=1473</id>
		<title>PPC services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=PPC_services&amp;diff=1473"/>
		<updated>2017-07-11T07:41:47Z</updated>

		<summary type="html">&lt;p&gt;Missile: add cpu/gpu/ram clocks for all profiles :3c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;APM is utilized for setting system performance profiles; including clocks for CPU, GPU, and memory.&lt;br /&gt;
&lt;br /&gt;
== apm ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ISession|GetISession]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPerformanceMode || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== apm:p ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ISession|GetISession]] || Same as apm ISession - but more privileged?&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ? || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== apm:sys ==&lt;br /&gt;
Internally known as ISystemManager&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPerformanceConfiguration || Takes u32 PerformanceMode&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPerformanceConfiguration  || Takes u32 PerformanceMode, u32 PerformanceConfiguration &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PerformanceMode ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Handheld&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Docked&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PerformanceConfiguration ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || CPU clock || GPU clock || Memory clock&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000 || 1020 || 384 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001 || 1020 || 768 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010002 || 1224 || 691.2 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000 || 1020 || 230.4 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001 || 1020 || 307.2 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020002 || 1224|| 230.4 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020003 || 1020 || 307 || 1331.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020004 || 1020 || 384 || 1331.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020005 || 1020 || 307.2 || 1065.6&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020006 || 1020 || 384 || 1065.6&lt;br /&gt;
|-&lt;br /&gt;
| 0x92220007 || 1020  || 460.8 || 1600&lt;br /&gt;
|-&lt;br /&gt;
| 0x92220008 || 1020 || 460.8 || 1331.2&lt;br /&gt;
|}&lt;br /&gt;
Clocks are all in MHz.&lt;br /&gt;
&lt;br /&gt;
Configurations 0x10001 and 0x10002 are only available in boost mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=PPC_services&amp;diff=1472</id>
		<title>PPC services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=PPC_services&amp;diff=1472"/>
		<updated>2017-07-11T07:20:08Z</updated>

		<summary type="html">&lt;p&gt;Missile: apm:p info, and rearrange sections&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;APM is utilized for setting system performance profiles; including clocks for CPU, GPU, and memory.&lt;br /&gt;
&lt;br /&gt;
== apm ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ISession|GetISession]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPerformanceMode || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== apm:p ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ISession|GetISession]] || Same as apm ISession - but more privileged?&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ? || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== apm:sys ==&lt;br /&gt;
Internally known as ISystemManager&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPerformanceConfiguration || Takes u32 PerformanceMode&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPerformanceConfiguration  || Takes u32 PerformanceMode, u32 PerformanceConfiguration &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PerformanceMode ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Handheld&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Docked&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PerformanceConfiguration ===&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;
| 0x10000 || Docked profiles&lt;br /&gt;
|-&lt;br /&gt;
| 0x10001 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x10002 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20000 || Handheld profiles&lt;br /&gt;
|-&lt;br /&gt;
| 0x20001 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20002 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20003 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20004 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20005 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20006 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x92220007 || Unknown profiles&lt;br /&gt;
|-&lt;br /&gt;
| 0x92220008 || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=PPC_services&amp;diff=1471</id>
		<title>PPC services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=PPC_services&amp;diff=1471"/>
		<updated>2017-07-11T05:58:05Z</updated>

		<summary type="html">&lt;p&gt;Missile: whoops&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;APM is utilized for setting system performance profiles; including clocks for CPU, GPU, and memory.&lt;br /&gt;
&lt;br /&gt;
== apm ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ISession|GetISession]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPerformanceMode || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ISession ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPerformanceConfiguration || Takes u32 PerformanceMode&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPerformanceConfiguration  || Takes u32 PerformanceMode, u32 PerformanceConfiguration &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PerformanceMode ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Handheld&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Docked&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PerformanceConfiguration ===&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;
| 0x10000 || Docked profiles&lt;br /&gt;
|-&lt;br /&gt;
| 0x10001 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x10002 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20000 || Handheld profiles&lt;br /&gt;
|-&lt;br /&gt;
| 0x20001 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20002 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20003 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20004 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20005 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20006 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x92220007 || Unknown profiles&lt;br /&gt;
|-&lt;br /&gt;
| 0x92220008 || &lt;br /&gt;
|}&lt;br /&gt;
The lower 16 bits seem to loosely indicate relative profile performance, with higher values being slower. Unknown profiles can be applied in handheld mode (these may be ultra-low-power modes).&lt;br /&gt;
&lt;br /&gt;
== apm:p ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== apm:sys ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=PPC_services&amp;diff=1453</id>
		<title>PPC services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=PPC_services&amp;diff=1453"/>
		<updated>2017-07-08T20:43:37Z</updated>

		<summary type="html">&lt;p&gt;Missile: /* PerformanceConfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;APM is utilized for setting system performance profiles; including clocks for CPU, GPU, and memory.&lt;br /&gt;
&lt;br /&gt;
== apm ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ISession|GetISession]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPerformanceMode || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ISession ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetPerformanceConfiguration || Takes u32 PerformanceMode&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetPerformanceConfiguration || Takes u32 PerformanceMode, u32 PerformanceConfiguration &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PerformanceMode ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Handheld&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Docked&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PerformanceConfiguration ===&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;
| 0x10000 || Docked profiles&lt;br /&gt;
|-&lt;br /&gt;
| 0x10001 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x10002 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20000 || Handheld profiles&lt;br /&gt;
|-&lt;br /&gt;
| 0x20001 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20002 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20003 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20004 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20005 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20006 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x92220007 || Unknown profiles&lt;br /&gt;
|-&lt;br /&gt;
| 0x92220008 || &lt;br /&gt;
|}&lt;br /&gt;
The lower 16 bits seem to loosely indicate relative profile performance, with higher values being slower. Unknown profiles can be applied in handheld mode (these may be ultra-low-power modes).&lt;br /&gt;
&lt;br /&gt;
== apm:p ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== apm:sys ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Services_API&amp;diff=1452</id>
		<title>Services API</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Services_API&amp;diff=1452"/>
		<updated>2017-07-08T20:37:19Z</updated>

		<summary type="html">&lt;p&gt;Missile: /* Service List */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Services are system processes running in the background which wait for incoming requests. When a process wants to communicate with a service, it first needs to get a handle to the named service, and then it can communicate with the service via inter-process communication (each service has a name up to 8 characters).&lt;br /&gt;
&lt;br /&gt;
Handles for services are retrieved from the service manager port, &amp;quot;sm:&amp;quot;. Manager service &amp;quot;sm:m&amp;quot; also exists. Services are an abstraction of ports, they operate the same way except regular ports can have their handles retrieved directly from a SVC.&lt;br /&gt;
&lt;br /&gt;
= sm: =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetService]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#RegisterService]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#UnregisterService]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Initialize ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Word || Value&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0x00000004&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x8000000A&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x00000001&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0-1 || Pid&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0 || &amp;quot;SFCI&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x00000000&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Always 0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetService ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Word || Value&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0x00000004&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x0000000A&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0 || &amp;quot;SFCI&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x00000001&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Service name, zero padded and casted to u64.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RegisterService ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Word || Value&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0x00000004&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x0000000C&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0 || &amp;quot;SFCI&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x00000002&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Service name, zero padded and casted to u64.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Max sessions? 32-bit integer.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Unknown bool&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UnregisterService ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Word || Value&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0x00000004&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x0000000A&lt;br /&gt;
|- style=&amp;quot;border-top: double&amp;quot;&lt;br /&gt;
| 0 || &amp;quot;SFCI&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x00000003&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Service name, zero padded and casted to u64.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= sm:m =&lt;br /&gt;
This service is presumably equivalent to 3DS &amp;quot;srv:pm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Service List =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Service names&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;200&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;200&amp;quot; | Notes&lt;br /&gt;
|-&lt;br /&gt;
| acc:u0, acc:u1, acc:aa, acc:su&lt;br /&gt;
| [[Account services]]&lt;br /&gt;
| u1: User, su: Admin&lt;br /&gt;
|-&lt;br /&gt;
| ahid:cd, ahid:hdr, hid, hid:dbg, hid:sys, (htc?), irs, irs:sys, xcd:sys&lt;br /&gt;
| [[HID services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| appletAE, appletOE, idle:sys, omm, spsm&lt;br /&gt;
| Applet services, [[OMM services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| aoc:u, mii:u, mii:e, ns:am, ns:su, ns:dev, pl:u, ovln:rcv, ovln:snd, pdm:ntfy, pdm:qry&lt;br /&gt;
| [[NS Services]]&lt;br /&gt;
| am: Application Manager, su: System Update&lt;br /&gt;
|-&lt;br /&gt;
| apm, apm:p, apm:sys, fgm, fgm:0, fgm:9, (fgm:dbg?)&lt;br /&gt;
| [[APM services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| arp:r, arp:w, bgtc:t, bgtc:sc&lt;br /&gt;
|&lt;br /&gt;
| r: Reader, w: Writer&lt;br /&gt;
|-&lt;br /&gt;
| audin:a, audin:d, audin:u, audout:a, audout:d, audout:u, audren:a, audren:d, audren:u, audrec:a, audrec:d, audrec:u, audctl, codecctl, hwopus&lt;br /&gt;
| Audio services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;bcat:a, bcat:u, bcat:m, bcat:s, news:a, news:c, news:m, news:p, news:v, prepo:u, prepo:s, prepo:m, prepo:a&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| [[BCAT services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| bpc, bpc:r, pcv, pcv:imm, time:u, time:a, time:s&lt;br /&gt;
| [[BPC services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| bsd:u, bsd:s, bsdcfg, ethc:c, ethc:i, nsd:u, nsd:a, sfdnsres&lt;br /&gt;
| [[Sockets services]], [[NSD services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| btdrv&lt;br /&gt;
| Bluetooth Driver services?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| btm, btm:dbg, btm:sys&lt;br /&gt;
| Battery services?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| caps:a, caps:c&lt;br /&gt;
| Capture services&lt;br /&gt;
| a: Album, ss: Screenshot&lt;br /&gt;
|-&lt;br /&gt;
| caps:sc, caps:ss, mm:u, vi:m, vi:s, vi:u&lt;br /&gt;
| [[Display services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| cec-mgr&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| csrng&lt;br /&gt;
| [[Secure RNG services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| dispdrv&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| erpt:c, erpt:r&lt;br /&gt;
| Error Report services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| es&lt;br /&gt;
| ETicket services?&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| fan, psm, tc, ts&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| fatal:u, fatal:p&lt;br /&gt;
| Fatal Error services&lt;br /&gt;
| u: User, p: Privileged?&lt;br /&gt;
|-&lt;br /&gt;
| friend:u, friend:v, friend:m, friend:s, friend:a&lt;br /&gt;
| Friend services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| fsp-srv, fsp-ldr, fsp-pr&lt;br /&gt;
| [[Filesystem services]]&lt;br /&gt;
| srv: Main, ldr: Loader, pr: Program Registry&lt;br /&gt;
|-&lt;br /&gt;
| gpio, i2c, i2c:pcv, pinmux, pwm, uart&lt;br /&gt;
| [[Bus services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lbl&lt;br /&gt;
| [[Backlight services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ldn:m, ldn:s, ldn:u&lt;br /&gt;
| [[Local Network Monitor services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ldr:pm, ldr:ro, ldr:shel, ldr:dmnt&lt;br /&gt;
| [[Loader services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lm&lt;br /&gt;
| Log services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lr, ncm, ncm:v&lt;br /&gt;
| [[Location Resolver services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| nfc:am, nfc:mf:u, nfc:user, nfc:sys&lt;br /&gt;
| NFC services&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| nifm:u, nifm:a, nifm:s&lt;br /&gt;
| [[Network Interface services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| nim, nim:shp, ntc&lt;br /&gt;
| [[NIM services]]&lt;br /&gt;
| shp: eShop&lt;br /&gt;
|-&lt;br /&gt;
| npns:u, npns:s&lt;br /&gt;
| ?&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| nvdrv:a, nvdrv:s, nvdrv:t, nvdrv, nvdrvdbg, nvgem:c, nvgem:cd, nvmemp&lt;br /&gt;
| [[NV services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pcie&lt;br /&gt;
| [[PCIe services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pctl, pctl:a, pctl:s, pctl:r&lt;br /&gt;
| Parental Control services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pm:bm, pm:info, pm:shell&lt;br /&gt;
| [[Process Manager services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| psc:c, psc:m&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| set, set:fd, set:cal, set:sys&lt;br /&gt;
| [[Settings services]]&lt;br /&gt;
| cal: calibration, sys: System Settings&lt;br /&gt;
|-&lt;br /&gt;
| ssl&lt;br /&gt;
| [[SSL services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| spl:&lt;br /&gt;
| [[SPL services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| usb:ds, usb:hs, usb:pd, usb:pd:c, usb:pm&lt;br /&gt;
| USB services&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| wlan:inf, wlan:lcl, wlan:lg, wlan:lga, wlan:sg, wlan:soc&lt;br /&gt;
| WLAN services&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=PPC_services&amp;diff=1451</id>
		<title>PPC services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=PPC_services&amp;diff=1451"/>
		<updated>2017-07-08T20:35:59Z</updated>

		<summary type="html">&lt;p&gt;Missile: Created page with &amp;quot;APM is utilized for setting system performance profiles; including clocks for CPU, GPU, and memory.  == apm == {| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; |- ! Cmd || Name || Notes |- | 0...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;APM is utilized for setting system performance profiles; including clocks for CPU, GPU, and memory.&lt;br /&gt;
&lt;br /&gt;
== apm ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ISession|GetISession]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPerformanceMode || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ISession ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetPerformanceConfiguration || Takes u32 PerformanceMode&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetPerformanceConfiguration || Takes u32 PerformanceMode, u32 PerformanceConfiguration &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PerformanceMode ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Handheld&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Docked&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PerformanceConfiguration ===&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;
| 0x10000 || Docked profiles&lt;br /&gt;
|-&lt;br /&gt;
| 0x10001 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x10002 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20000 || Handheld profiles&lt;br /&gt;
|-&lt;br /&gt;
| 0x20001 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20002 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20003 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20004 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20005 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x20006 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x92220007 || Unknown profiles&lt;br /&gt;
|-&lt;br /&gt;
| 0x92220008 || &lt;br /&gt;
|}&lt;br /&gt;
Unknown profiles can be applied in handheld mode.&lt;br /&gt;
&lt;br /&gt;
== apm:p ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== apm:sys ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Flash_Filesystem&amp;diff=1414</id>
		<title>Flash Filesystem</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Flash_Filesystem&amp;diff=1414"/>
		<updated>2017-07-06T17:04:43Z</updated>

		<summary type="html">&lt;p&gt;Missile: u64 could also reflect bcpkg size? - this was observed to be larger after 3.0-&amp;gt;3.0exfat update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NAND structure =&lt;br /&gt;
&lt;br /&gt;
== Boot Partitions ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot Partition 0 (0 of 1)&#039;&#039;&#039;&lt;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;
|  0x000000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x004000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x008000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x00C000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x100000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 &amp;quot;package1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  0x140000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 &amp;quot;package1&amp;quot; (Backup)&lt;br /&gt;
|-&lt;br /&gt;
|  0x180000&lt;br /&gt;
|  &lt;br /&gt;
|  Keyblob area, the first 0xB0 is identical to the console-unique &amp;quot;customer data&amp;quot; section in BCTs&lt;br /&gt;
|-&lt;br /&gt;
|  0x184000&lt;br /&gt;
|  &lt;br /&gt;
|  Unknown, 0x20-bytes hash (updated when bcpkg-2-1 updates) + one u64? (may be incremented on bcpkg update) All zero on 1.0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot Partition 1 (1 of 1)&#039;&#039;&#039;&lt;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;
|  0x000000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A &amp;quot;package1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  0x040000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A &amp;quot;package1&amp;quot; (Backup)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== User Partitions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Partition name&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  [[Filesystem_services|Bis]] Partition ID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  N/A&lt;br /&gt;
|  0x0&lt;br /&gt;
|  &lt;br /&gt;
|  20&lt;br /&gt;
|  GPT header, Bis-storage also allows raw access to the entire NAND eMMC sectors starting at sector0.&lt;br /&gt;
|-&lt;br /&gt;
|  PRODINFO&lt;br /&gt;
|  0x00004400&lt;br /&gt;
|  0x003FBC00&lt;br /&gt;
|  27&lt;br /&gt;
|  &amp;quot;CAL0&amp;quot; raw partition containing set:cal data.&lt;br /&gt;
|-&lt;br /&gt;
|  PRODINFOF&lt;br /&gt;
|  0x00400000&lt;br /&gt;
|  0x00400000&lt;br /&gt;
|  28&lt;br /&gt;
|  FAT12 filesystem, additional calibration.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-1-Normal-Main&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  21&lt;br /&gt;
|  For all these packages, data starts at offset 0x4000 and is not console-unique. This is installed from &amp;quot;package2&amp;quot; in firmware package A (0100000000000819) by default. With the exFAT update installed, this is switched to firmware package C (010000000000081B).&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-2-Normal-Sub&lt;br /&gt;
|  0x01000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  22&lt;br /&gt;
|  Identical to BCPKG2-1-Normal-Main, probably used as a backup partition.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-3-SafeMode-Main&lt;br /&gt;
|  0x01800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  23&lt;br /&gt;
|  This is installed from &amp;quot;package2&amp;quot; in firmware package B (010000000000081A).&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-4-SafeMode-Sub&lt;br /&gt;
|  0x02000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  24&lt;br /&gt;
|  Identical to BCPKG2-3-SafeMode-Main.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-5-Repair-Main&lt;br /&gt;
|  0x02800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  25&lt;br /&gt;
|  Installed at the factory.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-6-Repair-Sub&lt;br /&gt;
|  0x03000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  26&lt;br /&gt;
|  Identical to BCPKG2-5-Repair-Main.&lt;br /&gt;
|-&lt;br /&gt;
|  SAFE&lt;br /&gt;
|  0x03800000&lt;br /&gt;
|  0x04000000&lt;br /&gt;
|  29&lt;br /&gt;
|  FAT32 filesystem.&lt;br /&gt;
|-&lt;br /&gt;
|  SYSTEM&lt;br /&gt;
|  0x07800000 &lt;br /&gt;
|  0xA0000000&lt;br /&gt;
|  31 (and 32?)&lt;br /&gt;
|  FAT32 filesystem.&lt;br /&gt;
|-&lt;br /&gt;
|  USER&lt;br /&gt;
|  0xA7800000&lt;br /&gt;
|  0x680000000&lt;br /&gt;
|  30&lt;br /&gt;
|  FAT32 filesystem.&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 0x747BFFE00&lt;br /&gt;
| 0x200&lt;br /&gt;
| &lt;br /&gt;
| This is the backup GPT header specified by the main GPT header. This is also the last sector readable with Bis-storage paritionID 20.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the client process lacks the relevant permission for any of the above partition IDs, error 0x2EE202 is returned.&lt;br /&gt;
&lt;br /&gt;
[[NCA]]s stored in NAND are raw, identical to the data readable with [[Content_Manager_services#ReadEntryRaw]].&lt;br /&gt;
&lt;br /&gt;
The filenames for saveimages is just &amp;quot;&amp;lt;lower-case hex u64 saveID&amp;gt;&amp;quot;. saveIDs aren&#039;t related to the titleID, or at least not for USER-partition saves. The high u32 of the saveID is normally either 0x00000000 or 0x80000000.&lt;br /&gt;
&lt;br /&gt;
=== PRODINFOF ===&lt;br /&gt;
 PRODINFOF&lt;br /&gt;
 ├── Certifications&lt;br /&gt;
 │   └── WirelessCertification.png&lt;br /&gt;
 └── ptd&lt;br /&gt;
     ├── DeviceIdWithEmsBit.dat&lt;br /&gt;
     ├── Ecid.dat&lt;br /&gt;
     ├── prodCode.dat&lt;br /&gt;
     └── log&lt;br /&gt;
         ├── Process_asm1.log&lt;br /&gt;
         ├── Process_board1.log&lt;br /&gt;
         ├── TestFlagLine.log&lt;br /&gt;
         ├── TestFlagQc.log&lt;br /&gt;
         ├── AGING&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── BOARD_TEST&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── BOARD_WIRELESS&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── FINAL_CHECK&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── LCD_AND_KEY&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         └── USB_AND_HP&lt;br /&gt;
             └── Sequence.log&lt;br /&gt;
&lt;br /&gt;
==== DeviceIdWithEmsBit.dat ====&lt;br /&gt;
Contains a 0x10-byte uppercase hex string, identical to the DeviceId in the [[Settings_services|DeviceCert]].&lt;br /&gt;
&lt;br /&gt;
=== SYSTEM ===&lt;br /&gt;
 SYSTEM&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]]&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 ├── [[Savegames|save]]&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── saveMeta&lt;br /&gt;
     └── ... (empty?)&lt;br /&gt;
&lt;br /&gt;
The saves stored under this partition are only for system-titles / etc.&lt;br /&gt;
&lt;br /&gt;
=== USER ===&lt;br /&gt;
 USER&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Album (Same layout as [[SD_Filesystem|SD]])&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]]&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 ├── [[Savegames|save]]&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── saveMeta&lt;br /&gt;
     └── ... &lt;br /&gt;
&lt;br /&gt;
The saves for all non-system applications, regardless of where the application is located(storageID), is stored here. Each user account which has savedata has a separate saveimage. Save-common for an application is presumably a separate saveimage too. Every saveimage here is &#039;&#039;only&#039;&#039; for applications.&lt;br /&gt;
&lt;br /&gt;
=== SAFE ===&lt;br /&gt;
 SAFE&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]] (nothing installed?)&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 └── [[Savegames|save]]&lt;br /&gt;
     ├── 8000000000000000&lt;br /&gt;
     └── 8000000000000120&lt;br /&gt;
&lt;br /&gt;
On a v2.1 system with MountBis, the only thing under here is &amp;quot;PRF2SAFE.RCV&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Internet_Browser&amp;diff=1376</id>
		<title>Internet Browser</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Internet_Browser&amp;diff=1376"/>
		<updated>2017-07-05T13:54:03Z</updated>

		<summary type="html">&lt;p&gt;Missile: 3.0 user agent&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nintendo Switch does not have a normal Internet Browser for user usage. However, there is multiple browser applets. It is the [https://web.archive.org/web/20170304075230/https://gl.access-company.com/news_event/archives/2017/170303/ NetFront NX] browser, which is based on Webkit.&lt;br /&gt;
&lt;br /&gt;
When linking the Nintendo Account with Facebook, the Facebook Auth website will open, offering a search box that can be used to browse the Internet (&amp;quot;LoginApplet&amp;quot;). Alternatively, it can be accessed with [https://gbatemp.net/threads/web-browser-kind-of-on-the-switch.463094/ custom DNS settings] which simulate a Wi-Fi login page (&amp;quot;WifiWebAuthApplet&amp;quot; for captive-portal).&lt;br /&gt;
&lt;br /&gt;
== Known User Agent Strings ==&lt;br /&gt;
{| class=&#039;wikitable&#039;&lt;br /&gt;
! System Version&lt;br /&gt;
! UA String&lt;br /&gt;
|-&lt;br /&gt;
| [[2.0.0]]&lt;br /&gt;
| Mozilla/5.0 (Nintendo Switch; &amp;lt;appletname&amp;gt;) AppleWebKit/601.6 (KHTML, like Gecko) NF/4.0.0.5.9 NintendoBrowser/5.1.0.13341&lt;br /&gt;
|-&lt;br /&gt;
| [[2.1.0]]-[[2.3.0]]&lt;br /&gt;
| Mozilla/5.0 (Nintendo Switch; &amp;lt;appletname&amp;gt;) AppleWebKit/601.6 (KHTML, like Gecko) NF/4.0.0.5.10 NintendoBrowser/5.1.0.13343&lt;br /&gt;
|-&lt;br /&gt;
| [[3.0.0]]&lt;br /&gt;
| Mozilla/5.0 (Nintendo Switch; &amp;lt;appletname&amp;gt;) AppleWebKit/601.6 (KHTML, like Gecko) NF/4.0.0.6.9 NintendoBrowser/5.1.0.14936&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The UA is generated with: &amp;quot;Mozilla/5.0 (Nintendo Switch; &amp;lt;appletname&amp;gt;) AppleWebKit/&amp;lt;webkitver&amp;gt; (KHTML, like Gecko) NF/&amp;lt;nfver0&amp;gt;.&amp;lt;nfver1&amp;gt;.&amp;lt;nfver2&amp;gt; NintendoBrowser/5.&amp;lt;ninver0&amp;gt;.&amp;lt;ninver1&amp;gt;.&amp;lt;ninver2&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Browser Applets ==&lt;br /&gt;
{| class=&#039;wikitable&#039;&lt;br /&gt;
! appletname (From UA)&lt;br /&gt;
! Usage&lt;br /&gt;
! Invalid TLS cert handling&lt;br /&gt;
! Uses whitelist&lt;br /&gt;
! Title ID&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| WebApplet&lt;br /&gt;
| General web-applet for use by applications(online manuals, ...).&lt;br /&gt;
| Displays an error dialog without an option to ignore it.&lt;br /&gt;
| Yes&lt;br /&gt;
| 010000000000100A&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ShopN&lt;br /&gt;
| Actual eShop client&lt;br /&gt;
| Just displays an error-code.&lt;br /&gt;
| Yes&lt;br /&gt;
| 010000000000100B&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| WebApplet&lt;br /&gt;
| Offline HTML display&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 010000000000100F&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| LoginApplet&lt;br /&gt;
| Nintendo Account linking&lt;br /&gt;
| Just displays an error-code.&lt;br /&gt;
| Yes&lt;br /&gt;
| 0100000000001010&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ShareApplet&lt;br /&gt;
| Posting screenshots to social media, and (optionally) linking social media accounts&lt;br /&gt;
| Just displays an error-code.&lt;br /&gt;
| Yes&lt;br /&gt;
| 0100000000001010&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| LobbyApplet&lt;br /&gt;
| Related to online-multiplayer lobbies&lt;br /&gt;
| Just displays an error-code.&lt;br /&gt;
| Yes&lt;br /&gt;
| 0100000000001010&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| WifiWebAuthApplet&lt;br /&gt;
| Captive-portal&lt;br /&gt;
| Displays an error dialog with an option to ignore it.&lt;br /&gt;
| No&lt;br /&gt;
| 0100000000001011&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When whitelisting is enabled, you can only load page domains included in the whitelist, otherwise an error is displayed. This only applies to page navigation. Videos via the &amp;lt;video&amp;gt; tag are not affected, likewise with network requests with JS.&lt;br /&gt;
&lt;br /&gt;
No known applets can directly access the SD card via mounting it. This includes ShareApplet (which posts screenshots from SD to social media).&lt;br /&gt;
&lt;br /&gt;
== OSS ==&lt;br /&gt;
The NROs for the OSS are stored under a separate [[Title_list|title]]. All of the web-applets use the same OSS NROs via this title.&lt;br /&gt;
&lt;br /&gt;
String from v2.0 in oss_wkc.nro: &amp;quot;libcurl/7.50.1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Video Playback ==&lt;br /&gt;
WifiWebAuthApplet does not fully support playing videos. It will [[Error_codes|assert]] with normal videos. The assert triggers before it even starts MP4 parsing?(For example, selecting a video from a video-tag will assert even though it doesn&#039;t send any network request for it) However, in some cases with certain MP4s using vulns it will display an error dialog instead.&lt;br /&gt;
&lt;br /&gt;
With v3.0 WifiWebAuthApplet video-playback was disabled, it now throws the following error when attempting to play a video: &amp;quot;Support Code: 2809-1212&amp;quot; &amp;quot;This feature is not available.&amp;quot; On past system-versions it would just trigger a fatal-error(see above). Video-playback which already worked fine under whitelisted-applet, still works fine on v3.0.&lt;br /&gt;
&lt;br /&gt;
== Trusted RootCAs ==&lt;br /&gt;
While the rootCA(s) for Let&#039;s Encrypt isn&#039;t included, Let&#039;s Encrypt is indirectly trusted via &amp;quot;Digital Signature Trust Co.&amp;quot;. This seems to be only(?) the case for WifiWebAuthApplet, hence non-WifiWebAuthApplet seems to have a different set of trusted rootCAs.&lt;br /&gt;
&lt;br /&gt;
== WifiWebAuthApplet ==&lt;br /&gt;
When doing a connection-test in system-settings, it will detect that the captive-portal is required and display an error for it when the response for &amp;quot;http://conntest.nintendowifi.net/&amp;quot; doesn&#039;t include the &amp;quot;X-Organization: Nintendo&amp;quot; HTTP header. The web-applet will not load until something else attempts a conntest, for example when launching eShop and prior to LoginApplet launching. The initial page loaded by this applet is the above conntest URL.&lt;br /&gt;
&lt;br /&gt;
This is only available starting with [[2.0.0]].&lt;br /&gt;
&lt;br /&gt;
==Whitelisted Applets==&lt;br /&gt;
The v2.1 main-codebin page-aligned .text size is 0x1000-bytes larger than ShopN.&lt;br /&gt;
&lt;br /&gt;
The file at &amp;quot;data:/whitelist/WhitelistLns.txt&amp;quot; for LoginApplet/ShareApplet/LobbyApplet, which doesn&#039;t exist in WifiWebAuthApplet, contains the following:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;^https://([0-9A-Za-z\-]+\.)*nintendo\.net(/|$)&lt;br /&gt;
 ^https?://([0-9A-Za-z\-]+\.)*nintendo\.(co\.jp|com|eu|co\.uk|es|pt|ch|at|de|nl|be|ch|ru|fr|it|co\.za|co\.kr|tw|com\.hk|com\.au|ca|co\.nz)(/|$)&lt;br /&gt;
 ^https?://([0-9A-Za-z\-]+\.)*nintendo-europe\.com(/|$)&lt;br /&gt;
 ^https?://([0-9A-Za-z\-]+\.)*nintendoservicecentre\.co\.uk(/|$)&lt;br /&gt;
 ^https?://([0-9A-Za-z\-]+\.)*google\.(com|ad|ae|com\.af|com\.ag|com\.ai|al|am|co\.ao|com\.ar|as|at|com\.au|az|ba|com\.bd|be|bf|bg|com\.bh|bi|bj|com\.bn|com\.bo|com\.br|bs|bt|co\.bw|by|com\.bz|ca|cd|cf|cg|ch|ci|co\.ck|cl|cm|cn|com\.co|co\.cr|com\.cu|cv|com\.cy|cz|de|dj|dk|dm|com\.do|dz|com\.ec|ee|com\.eg|es|com\.et|fi|com\.fj|fm|fr|ga|ge|gg|com\.gh|com\.gi|gl|gm|gp|gr|com\.gt|gy|com\.hk|hn|hr|ht|hu|co\.id|ie|co\.il|im|co\.in|iq|is|it|je|com\.jm|jo|co\.jp|co\.ke|com\.kh|ki|kg|co\.kr|com\.kw|kz|la|com\.lb|li|lk|co\.ls|lt|lu|lv|com\.ly|co\.ma|md|me|mg|mk|ml|com\.mm|mn|ms|com\.mt|mu|mv|mw|com\.mx|com\.my|co\.mz|com\.na|com\.nf|com\.ng|com\.ni|ne|nl|no|com\.np|nr|nu|co\.nz|com\.om|com\.pa|com\.pe|com\.pg|com\.ph|com\.pk|pl|pn|com\.pr|ps|pt|com\.py|com\.qa|ro|ru|rw|com\.sa|com\.sb|sc|se|com\.sg|sh|si|sk|com\.sl|sn|so|sm|sr|st|com\.sv|td|tg|co\.th|com\.tj|tk|tl|tm|tn|to|com\.tr|tt|com\.tw|co\.tz|com\.ua|co\.ug|co\.uk|com\.uy|co\.uz|com\.vc|co\.ve|vg|co\.vi|com\.vn|vu|ws|rs|co\.za|co\.zm|co\.zw|cat)(/|$)&lt;br /&gt;
 ^https://([0-9A-Za-z\-]+\.)*facebook\.com(/|$)&lt;br /&gt;
 ^https://([0-9A-Za-z\-]+\.)*twitter\.com(/|$)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ShareApplet===&lt;br /&gt;
The initial page loaded by this applet depends on a flag. &amp;lt;nowiki&amp;gt;non-val1: &amp;quot;https://web-lp1.share.srv.nintendo.net/&amp;quot; val1: &amp;quot;https://web-lp1.share.srv.nintendo.net/settings/&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The server will return a HTTP 302 redirect to &amp;lt;nowiki&amp;gt;&amp;quot;https://nintendo.com/&amp;quot;&amp;lt;/nowiki&amp;gt; when the specified User-Agent isn&#039;t the one for ShareApplet.&lt;br /&gt;
&lt;br /&gt;
===LobbyApplet===&lt;br /&gt;
The initial page loaded by this applet is: &amp;lt;nowiki&amp;gt;&amp;quot;https://web-lp1.znc.srv.nintendo.net/lobby/&amp;quot;&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The content of the above URL refers to &amp;quot;rooms&amp;quot;, &amp;quot;NxView_Img_Google_Play_Icon&amp;quot;, etc.&lt;br /&gt;
&lt;br /&gt;
And also:&lt;br /&gt;
  Your room has been created.&lt;br /&gt;
  &lt;br /&gt;
  You can invite friends to the room via&lt;br /&gt;
  the Nintendo Switch Online Lounge app.&lt;br /&gt;
&lt;br /&gt;
== ShopN ==&lt;br /&gt;
The initial page loaded by ShopN seems to be the following: &amp;lt;nowiki&amp;gt;&amp;quot;https://bugyo.hac.lp1.eshop.nintendo.net/ashigaru/&amp;quot;&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The file at &amp;quot;data:/whitelist/WhitelistEc.txt&amp;quot;, which doesn&#039;t exist in WifiWebAuthApplet, contains the following:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;^https://([0-9A-Za-z\-]+\.)*eshop\.nintendo\.net($|/)&lt;br /&gt;
 ^https?://([0-9A-Za-z\-]+\.)*nintendo\.(co\.jp|com|de)($|/)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WebApplet ==&lt;br /&gt;
===010000000000100A===&lt;br /&gt;
The initial page loaded by this applet is specified by the title which launched this applet. Plain HTTP is allowed.&lt;br /&gt;
&lt;br /&gt;
The files under &amp;quot;data:/&amp;quot; are identical to WifiWebAuthApplet except that the content of each file differs.&lt;br /&gt;
&lt;br /&gt;
This applet uses a whitelist, but it doesn&#039;t come from &amp;quot;data:/&amp;quot; like whitelisted-applet.&lt;br /&gt;
&lt;br /&gt;
=== Offline Applet ===&lt;br /&gt;
Minus TIDs, the [[NPDM]] is the same as 010000000000100A except 010000000000100A has access to more/other services.&lt;br /&gt;
&lt;br /&gt;
== Service/FS Access ==&lt;br /&gt;
All browser applets have access to the following services: acc:u1, appletAE, audin:u, audren:u, audout:u, bsd:u, fatal:u, fsp-srv, hid, hid:sys, irs, ldn:m, ldr:ro, lm, erpt:c, nifm:s, ns:am, nsd:u, nvdrv:a, mm:u, pl:u, prepo:s, set, set:sys, sfdnsres, ssl, time:u, vi:s&lt;br /&gt;
&lt;br /&gt;
LoginApplet/ShareApplet/LobbyApplet have access to the above + caps:a.&lt;br /&gt;
&lt;br /&gt;
ShopN has access to the above + nim:shp.&lt;br /&gt;
&lt;br /&gt;
Unlike the applets listed above, WebApplet TID 010000000000100A has access to the [[Filesystem_services|FS]] MountContent* commands. This is so that it can load the whitelist from &amp;quot;/accessible-urls/accessible-urls.txt&amp;quot; in the mounted FS, from [[NCA]]-type4 where titleID={application which launched this applet}.&lt;br /&gt;
&lt;br /&gt;
== Heap ==&lt;br /&gt;
&lt;br /&gt;
The size used for [[SVC|svcSetHeapSize]] by the web-applets is 0x15600000. Under ShopN, the largest size that can be passed to this without an error being returned, is 0x1B400000.&lt;br /&gt;
&lt;br /&gt;
== Versions ==&lt;br /&gt;
&lt;br /&gt;
=== [[2.0.0]] ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;shareddata:/buildinfo/buildinfo.dat&amp;quot; content:&lt;br /&gt;
  r:13341&lt;br /&gt;
  p:NX64&lt;br /&gt;
  v:Release&lt;br /&gt;
  d:2017-02-13 22:57&lt;br /&gt;
  n:0.5.9&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
=== [[2.1.0]] ===&lt;br /&gt;
See [[Switch_Userland_Flaws|here]] for vuln-related changes.&lt;br /&gt;
&lt;br /&gt;
The WebKit NRO was updated. For the WebKit NRO, the page-aligned size for the R-X, R--, and RW- pages are the same as v2.0.&lt;br /&gt;
* The actual code in the NRO starts differing starting at offset 0xE780. In v2.0 the offset following the last code instruction is text_lastpage+0x3F8(text_end-0xC08), while for v2.1 it&#039;s text_lastpage+0xE60(text_end-0x1A0). Compared to the previous version, there&#039;s a val0 u32(padding) inserted where the code for the import stubs begin, near the end of .text. Relative to that end offset going backwards, .text differs starting at v2.0 textbase+0xD56530 / v2.1 textbase+0xD56F94.&lt;br /&gt;
* The R-- section was updated. Besides the large table(?) which was updated(nothing was added/removed there), the strings containing &amp;quot;D:/for_cruiser/release_182/nx/webkit/&amp;quot; were updated: &amp;quot;182&amp;quot; was changed to &amp;quot;189&amp;quot;. 0x10-bytes at offset 0x57292C were removed. 0x8-bytes were inserted at offset 0x14B2B5C in the v2.1 section. 0x8-bytes were inserted at offset 0x14B5C10 in the v2.1 section. ...&lt;br /&gt;
* The RW- section was updated, mainly for different addrs. Nothing was added/removed. Most(?)/all(?) main-codebin func import-addrs relative to main-codebin-base are the same as v2.0.&lt;br /&gt;
&lt;br /&gt;
Main-codebin region(titleID 010000000000100B):&lt;br /&gt;
* rtld is same as before basically, minus addrs. Likewise for the &amp;quot;nnSdkEmpty&amp;quot; binary following the main-codebin.&lt;br /&gt;
* Various byte values were changed in the main .text.&lt;br /&gt;
* In the main R-- section:&lt;br /&gt;
** The length of a string used with the user-agent changed, due to being changed from &amp;quot;{...}.9&amp;quot; to &amp;quot;{...}.10&amp;quot;.&lt;br /&gt;
** The version in the following string was changed from &amp;quot;1.2.2&amp;quot; to &amp;quot;1.2.3&amp;quot;: &amp;quot;FS_ACCESS: { sdk_versio n: 1.2.3, spec:  NX }&amp;quot;&lt;br /&gt;
** The datetime strings following &amp;quot;b/23876444&amp;quot; was changed from &amp;quot;Feb 10 2017&amp;quot; &amp;quot;02:24:47&amp;quot; to &amp;quot;Mar  9 201 7&amp;quot; &amp;quot;21:41:27&amp;quot;.&lt;br /&gt;
** A 0x10-byte block prior to SDK library tag strings was updated. The version in those strings was changed from &amp;quot;1_2_2&amp;quot; to &amp;quot;1_2_3&amp;quot;.&lt;br /&gt;
* The main RW- section appears to be basically the same minus addrs.&lt;br /&gt;
&lt;br /&gt;
All of the other NROs were updated in FS with only the following changes:&lt;br /&gt;
* The R-X section is identical to the previous version except for the 0x10-byte block in the NRO header. &lt;br /&gt;
* The R-- section only had version values in &amp;quot;/release_{ver}/&amp;quot; strings updated, see the for_cruiser path mentioned for WebKit NRO above. The only other change was that a 0x10-byte block following a &amp;quot;GNU&amp;quot; string was updated.&lt;br /&gt;
&lt;br /&gt;
==== FS ====&lt;br /&gt;
The content of &amp;quot;blacklist:/&amp;quot; and &amp;quot;oceanShared:/&amp;quot; haven&#039;t changed. Only the content of &amp;quot;shareddata:/&amp;quot; and &amp;quot;data:/&amp;quot; changed.&lt;br /&gt;
&lt;br /&gt;
===== &amp;quot;shareddata:/&amp;quot; =====&lt;br /&gt;
The following files were updated here(nothing added/removed):&lt;br /&gt;
&lt;br /&gt;
* /buildinfo/buildinfo.dat&lt;br /&gt;
* /dll/cairo_wkc.nro&lt;br /&gt;
* /dll/libfont.nro&lt;br /&gt;
* /dll/oss_wkc.nro&lt;br /&gt;
* /dll/peer_wkc.nro&lt;br /&gt;
* /dll/webkit_wkc.nro&lt;br /&gt;
&lt;br /&gt;
That is, every .nro under the above directory was updated.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;shareddata:/buildinfo/buildinfo.dat&amp;quot; content:&lt;br /&gt;
  r:13343&lt;br /&gt;
  p::NX64&lt;br /&gt;
  v:Release&lt;br /&gt;
  d:2017-03-14 21:08&lt;br /&gt;
  n:0.5.10&lt;br /&gt;
&lt;br /&gt;
===== &amp;quot;data:/&amp;quot; =====&lt;br /&gt;
The following files were updated here(nothing added/removed):&lt;br /&gt;
&lt;br /&gt;
* /.nrr/netfront.nrr&lt;br /&gt;
* /buildinfo/buildinfo.dat&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Flash_Filesystem&amp;diff=1328</id>
		<title>Flash Filesystem</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Flash_Filesystem&amp;diff=1328"/>
		<updated>2017-07-02T18:04:33Z</updated>

		<summary type="html">&lt;p&gt;Missile: /* Boot Partitions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NAND structure =&lt;br /&gt;
&lt;br /&gt;
== Boot Partitions ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot Partition 0 (0 of 1)&#039;&#039;&#039;&lt;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;
|  0x000000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x004000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x008000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x00C000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x100000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 &amp;quot;package1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  0x140000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 &amp;quot;package1&amp;quot; (Backup)&lt;br /&gt;
|-&lt;br /&gt;
|  0x180000&lt;br /&gt;
|  &lt;br /&gt;
|  Keyblob area, the first 0xB0 is identical to the console-unique &amp;quot;customer data&amp;quot; section in BCTs&lt;br /&gt;
|-&lt;br /&gt;
|  0x184000&lt;br /&gt;
|  &lt;br /&gt;
|  Unknown, 0x20-bytes hash + one u64? All zero on 1.0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot Partition 1 (1 of 1)&#039;&#039;&#039;&lt;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;
|  0x000000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A &amp;quot;package1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  0x040000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A &amp;quot;package1&amp;quot; (Backup)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== User Partitions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Partition name&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  [[Filesystem_services|Bis]] Partition ID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  N/A&lt;br /&gt;
|  0x0&lt;br /&gt;
|  ?&lt;br /&gt;
|  20&lt;br /&gt;
|  GPT header, partition ID also provides raw access to all partitions&lt;br /&gt;
|-&lt;br /&gt;
|  PRODINFO&lt;br /&gt;
|  0x00004400&lt;br /&gt;
|  0x003FBC00&lt;br /&gt;
|  27&lt;br /&gt;
|  &amp;quot;CAL0&amp;quot; raw partition containing set:cal data&lt;br /&gt;
|-&lt;br /&gt;
|  PRODINFOF&lt;br /&gt;
|  0x00400000&lt;br /&gt;
|  0x00400000&lt;br /&gt;
|  28&lt;br /&gt;
|  FAT12 filesystem, additional calibration?&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-1-Normal-Main&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  21&lt;br /&gt;
|  For all these packages, data starts at offset 0x4000 and is not console-unique. This is installed from &amp;quot;package2&amp;quot;: on retail it&#039;s from FIRM-A 0100000000000819, for unknown cases it&#039;s from FIRM-C, 010000000000081B.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-2-Normal-Sub&lt;br /&gt;
|  0x01000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  22&lt;br /&gt;
|  Identical to BCPKG2-1-Normal-Main, probably used as a backup partition.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-3-SafeMode-Main&lt;br /&gt;
|  0x01800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  23&lt;br /&gt;
|  This is installed from &amp;quot;package2&amp;quot; in firmware package B, 010000000000081A.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-4-SafeMode-Sub&lt;br /&gt;
|  0x02000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  24&lt;br /&gt;
|  Identical to BCPKG2-3-SafeMode-Main.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-5-Repair-Main&lt;br /&gt;
|  0x02800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  25&lt;br /&gt;
|  Unknown what title this originates from.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-6-Repair-Sub&lt;br /&gt;
|  0x03000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  26&lt;br /&gt;
|  Identical to BCPKG2-5-Repair-Main.&lt;br /&gt;
|-&lt;br /&gt;
|  SAFE&lt;br /&gt;
|  0x03800000&lt;br /&gt;
|  0x04000000&lt;br /&gt;
|  29&lt;br /&gt;
|  FAT32 filesystem&lt;br /&gt;
|-&lt;br /&gt;
|  SYSTEM&lt;br /&gt;
|  0x07800000&lt;br /&gt;
|  0xA0000000&lt;br /&gt;
|  31&lt;br /&gt;
|  FAT32 filesystem&lt;br /&gt;
|-&lt;br /&gt;
|  USER&lt;br /&gt;
|  0xA7800000&lt;br /&gt;
|  0x680000000&lt;br /&gt;
|  30&lt;br /&gt;
|  FAT32 filesystem&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PRODINFOF ===&lt;br /&gt;
 PRODINFOF&lt;br /&gt;
 ├── Certifications&lt;br /&gt;
 │   └── WirelessCertification.png&lt;br /&gt;
 └── ptd&lt;br /&gt;
     ├── DeviceIdWithEmsBit.dat&lt;br /&gt;
     ├── Ecid.dat&lt;br /&gt;
     ├── prodCode.dat&lt;br /&gt;
     └── log&lt;br /&gt;
         ├── Process_asm1.log&lt;br /&gt;
         ├── Process_board1.log&lt;br /&gt;
         ├── TestFlagLine.log&lt;br /&gt;
         ├── TestFlagQc.log&lt;br /&gt;
         ├── AGING&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── BOARD_TEST&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── BOARD_WIRELESS&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── FINAL_CHECK&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── LCD_AND_KEY&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         └── USB_AND_HP&lt;br /&gt;
             └── Sequence.log&lt;br /&gt;
&lt;br /&gt;
=== SYSTEM ===&lt;br /&gt;
 SYSTEM&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]]&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 ├── [[Savegames|save]]&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── saveMeta&lt;br /&gt;
     └── ... (empty?)&lt;br /&gt;
&lt;br /&gt;
=== SAFE ===&lt;br /&gt;
 SAFE&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]] (nothing installed?)&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 └── [[Savegames|save]]&lt;br /&gt;
     ├── 8000000000000000&lt;br /&gt;
     └── 8000000000000120&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Flash_Filesystem&amp;diff=1327</id>
		<title>Flash Filesystem</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Flash_Filesystem&amp;diff=1327"/>
		<updated>2017-07-02T17:58:55Z</updated>

		<summary type="html">&lt;p&gt;Missile: the byte at 0x184024 is often set to 0x01 or 0x03, but not on all systems?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NAND structure =&lt;br /&gt;
&lt;br /&gt;
== Boot Partitions ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot Partition 0 (0 of 1)&#039;&#039;&#039;&lt;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;
|  0x000000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x004000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x008000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x00C000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x100000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 &amp;quot;package1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  0x140000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 &amp;quot;package1&amp;quot; (Backup)&lt;br /&gt;
|-&lt;br /&gt;
|  0x180000&lt;br /&gt;
|  &lt;br /&gt;
|  Keyblob area, the first 0xB0 is identical to the console-unique &amp;quot;customer data&amp;quot; section in BCTs&lt;br /&gt;
|-&lt;br /&gt;
|  0x184000&lt;br /&gt;
|  &lt;br /&gt;
|  Unknown, 0x20-bytes hash + one u64?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot Partition 1 (1 of 1)&#039;&#039;&#039;&lt;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;
|  0x000000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A &amp;quot;package1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  0x040000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A &amp;quot;package1&amp;quot; (Backup)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== User Partitions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Partition name&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  [[Filesystem_services|Bis]] Partition ID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  N/A&lt;br /&gt;
|  0x0&lt;br /&gt;
|  ?&lt;br /&gt;
|  20&lt;br /&gt;
|  GPT header, partition ID also provides raw access to all partitions&lt;br /&gt;
|-&lt;br /&gt;
|  PRODINFO&lt;br /&gt;
|  0x00004400&lt;br /&gt;
|  0x003FBC00&lt;br /&gt;
|  27&lt;br /&gt;
|  &amp;quot;CAL0&amp;quot; raw partition containing set:cal data&lt;br /&gt;
|-&lt;br /&gt;
|  PRODINFOF&lt;br /&gt;
|  0x00400000&lt;br /&gt;
|  0x00400000&lt;br /&gt;
|  28&lt;br /&gt;
|  FAT12 filesystem, additional calibration?&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-1-Normal-Main&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  21&lt;br /&gt;
|  For all these packages, data starts at offset 0x4000 and is not console-unique. This is installed from &amp;quot;package2&amp;quot;: on retail it&#039;s from FIRM-A 0100000000000819, for unknown cases it&#039;s from FIRM-C, 010000000000081B.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-2-Normal-Sub&lt;br /&gt;
|  0x01000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  22&lt;br /&gt;
|  Identical to BCPKG2-1-Normal-Main, probably used as a backup partition.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-3-SafeMode-Main&lt;br /&gt;
|  0x01800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  23&lt;br /&gt;
|  This is installed from &amp;quot;package2&amp;quot; in firmware package B, 010000000000081A.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-4-SafeMode-Sub&lt;br /&gt;
|  0x02000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  24&lt;br /&gt;
|  Identical to BCPKG2-3-SafeMode-Main.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-5-Repair-Main&lt;br /&gt;
|  0x02800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  25&lt;br /&gt;
|  Unknown what title this originates from.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-6-Repair-Sub&lt;br /&gt;
|  0x03000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  26&lt;br /&gt;
|  Identical to BCPKG2-5-Repair-Main.&lt;br /&gt;
|-&lt;br /&gt;
|  SAFE&lt;br /&gt;
|  0x03800000&lt;br /&gt;
|  0x04000000&lt;br /&gt;
|  29&lt;br /&gt;
|  FAT32 filesystem&lt;br /&gt;
|-&lt;br /&gt;
|  SYSTEM&lt;br /&gt;
|  0x07800000&lt;br /&gt;
|  0xA0000000&lt;br /&gt;
|  31&lt;br /&gt;
|  FAT32 filesystem&lt;br /&gt;
|-&lt;br /&gt;
|  USER&lt;br /&gt;
|  0xA7800000&lt;br /&gt;
|  0x680000000&lt;br /&gt;
|  30&lt;br /&gt;
|  FAT32 filesystem&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PRODINFOF ===&lt;br /&gt;
 PRODINFOF&lt;br /&gt;
 ├── Certifications&lt;br /&gt;
 │   └── WirelessCertification.png&lt;br /&gt;
 └── ptd&lt;br /&gt;
     ├── DeviceIdWithEmsBit.dat&lt;br /&gt;
     ├── Ecid.dat&lt;br /&gt;
     ├── prodCode.dat&lt;br /&gt;
     └── log&lt;br /&gt;
         ├── Process_asm1.log&lt;br /&gt;
         ├── Process_board1.log&lt;br /&gt;
         ├── TestFlagLine.log&lt;br /&gt;
         ├── TestFlagQc.log&lt;br /&gt;
         ├── AGING&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── BOARD_TEST&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── BOARD_WIRELESS&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── FINAL_CHECK&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── LCD_AND_KEY&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         └── USB_AND_HP&lt;br /&gt;
             └── Sequence.log&lt;br /&gt;
&lt;br /&gt;
=== SYSTEM ===&lt;br /&gt;
 SYSTEM&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]]&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 ├── [[Savegames|save]]&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── saveMeta&lt;br /&gt;
     └── ... (empty?)&lt;br /&gt;
&lt;br /&gt;
=== SAFE ===&lt;br /&gt;
 SAFE&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]] (nothing installed?)&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 └── [[Savegames|save]]&lt;br /&gt;
     ├── 8000000000000000&lt;br /&gt;
     └── 8000000000000120&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Flash_Filesystem&amp;diff=1326</id>
		<title>Flash Filesystem</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Flash_Filesystem&amp;diff=1326"/>
		<updated>2017-07-02T17:54:52Z</updated>

		<summary type="html">&lt;p&gt;Missile: /* Boot Partitions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NAND structure =&lt;br /&gt;
&lt;br /&gt;
== Boot Partitions ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot Partition 0 (0 of 1)&#039;&#039;&#039;&lt;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;
|  0x000000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x004000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x008000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x00C000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x100000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 &amp;quot;package1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  0x140000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 &amp;quot;package1&amp;quot; (Backup)&lt;br /&gt;
|-&lt;br /&gt;
|  0x180000&lt;br /&gt;
|  &lt;br /&gt;
|  Keyblob area, the first 0xB0 is identical to the console-unique &amp;quot;customer data&amp;quot; section in BCTs&lt;br /&gt;
|-&lt;br /&gt;
|  0x184000&lt;br /&gt;
|  &lt;br /&gt;
|  Unknown, 0x20-bytes hash + one u32?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot Partition 1 (1 of 1)&#039;&#039;&#039;&lt;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;
|  0x000000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A &amp;quot;package1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  0x040000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A &amp;quot;package1&amp;quot; (Backup)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== User Partitions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Partition name&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  [[Filesystem_services|Bis]] Partition ID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  N/A&lt;br /&gt;
|  0x0&lt;br /&gt;
|  ?&lt;br /&gt;
|  20&lt;br /&gt;
|  GPT header, partition ID also provides raw access to all partitions&lt;br /&gt;
|-&lt;br /&gt;
|  PRODINFO&lt;br /&gt;
|  0x00004400&lt;br /&gt;
|  0x003FBC00&lt;br /&gt;
|  27&lt;br /&gt;
|  &amp;quot;CAL0&amp;quot; raw partition containing set:cal data&lt;br /&gt;
|-&lt;br /&gt;
|  PRODINFOF&lt;br /&gt;
|  0x00400000&lt;br /&gt;
|  0x00400000&lt;br /&gt;
|  28&lt;br /&gt;
|  FAT12 filesystem, additional calibration?&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-1-Normal-Main&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  21&lt;br /&gt;
|  For all these packages, data starts at offset 0x4000 and is not console-unique. This is installed from &amp;quot;package2&amp;quot;: on retail it&#039;s from FIRM-A 0100000000000819, for unknown cases it&#039;s from FIRM-C, 010000000000081B.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-2-Normal-Sub&lt;br /&gt;
|  0x01000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  22&lt;br /&gt;
|  Identical to BCPKG2-1-Normal-Main, probably used as a backup partition.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-3-SafeMode-Main&lt;br /&gt;
|  0x01800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  23&lt;br /&gt;
|  This is installed from &amp;quot;package2&amp;quot; in firmware package B, 010000000000081A.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-4-SafeMode-Sub&lt;br /&gt;
|  0x02000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  24&lt;br /&gt;
|  Identical to BCPKG2-3-SafeMode-Main.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-5-Repair-Main&lt;br /&gt;
|  0x02800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  25&lt;br /&gt;
|  Unknown what title this originates from.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-6-Repair-Sub&lt;br /&gt;
|  0x03000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  26&lt;br /&gt;
|  Identical to BCPKG2-5-Repair-Main.&lt;br /&gt;
|-&lt;br /&gt;
|  SAFE&lt;br /&gt;
|  0x03800000&lt;br /&gt;
|  0x04000000&lt;br /&gt;
|  29&lt;br /&gt;
|  FAT32 filesystem&lt;br /&gt;
|-&lt;br /&gt;
|  SYSTEM&lt;br /&gt;
|  0x07800000&lt;br /&gt;
|  0xA0000000&lt;br /&gt;
|  31&lt;br /&gt;
|  FAT32 filesystem&lt;br /&gt;
|-&lt;br /&gt;
|  USER&lt;br /&gt;
|  0xA7800000&lt;br /&gt;
|  0x680000000&lt;br /&gt;
|  30&lt;br /&gt;
|  FAT32 filesystem&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PRODINFOF ===&lt;br /&gt;
 PRODINFOF&lt;br /&gt;
 ├── Certifications&lt;br /&gt;
 │   └── WirelessCertification.png&lt;br /&gt;
 └── ptd&lt;br /&gt;
     ├── DeviceIdWithEmsBit.dat&lt;br /&gt;
     ├── Ecid.dat&lt;br /&gt;
     ├── prodCode.dat&lt;br /&gt;
     └── log&lt;br /&gt;
         ├── Process_asm1.log&lt;br /&gt;
         ├── Process_board1.log&lt;br /&gt;
         ├── TestFlagLine.log&lt;br /&gt;
         ├── TestFlagQc.log&lt;br /&gt;
         ├── AGING&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── BOARD_TEST&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── BOARD_WIRELESS&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── FINAL_CHECK&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── LCD_AND_KEY&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         └── USB_AND_HP&lt;br /&gt;
             └── Sequence.log&lt;br /&gt;
&lt;br /&gt;
=== SYSTEM ===&lt;br /&gt;
 SYSTEM&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]]&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 ├── [[Savegames|save]]&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── saveMeta&lt;br /&gt;
     └── ... (empty?)&lt;br /&gt;
&lt;br /&gt;
=== SAFE ===&lt;br /&gt;
 SAFE&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]] (nothing installed?)&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 └── [[Savegames|save]]&lt;br /&gt;
     ├── 8000000000000000&lt;br /&gt;
     └── 8000000000000120&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Flash_Filesystem&amp;diff=1325</id>
		<title>Flash Filesystem</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Flash_Filesystem&amp;diff=1325"/>
		<updated>2017-07-02T17:49:37Z</updated>

		<summary type="html">&lt;p&gt;Missile: /* User Partitions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= NAND structure =&lt;br /&gt;
&lt;br /&gt;
== Boot Partitions ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot Partition 0 (0 of 1)&#039;&#039;&#039;&lt;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;
|  0x000000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x004000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x008000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x00C000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A BCT&lt;br /&gt;
|-&lt;br /&gt;
|  0x100000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 &amp;quot;package1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  0x140000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 0100000000000819 &amp;quot;package1&amp;quot; (Backup)&lt;br /&gt;
|-&lt;br /&gt;
|  0x180000&lt;br /&gt;
|  &lt;br /&gt;
|  Keyblob area&lt;br /&gt;
|-&lt;br /&gt;
|  0x184000&lt;br /&gt;
|  &lt;br /&gt;
|  Unknown, 0x20-bytes hash + one u32?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Boot Partition 1 (1 of 1)&#039;&#039;&#039;&lt;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;
|  0x000000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A &amp;quot;package1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|  0x040000&lt;br /&gt;
|  &lt;br /&gt;
|  Title 010000000000081A &amp;quot;package1&amp;quot; (Backup)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== User Partitions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Partition name&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  [[Filesystem_services|Bis]] Partition ID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  N/A&lt;br /&gt;
|  0x0&lt;br /&gt;
|  ?&lt;br /&gt;
|  20&lt;br /&gt;
|  GPT header, partition ID also provides raw access to all partitions&lt;br /&gt;
|-&lt;br /&gt;
|  PRODINFO&lt;br /&gt;
|  0x00004400&lt;br /&gt;
|  0x003FBC00&lt;br /&gt;
|  27&lt;br /&gt;
|  &amp;quot;CAL0&amp;quot; raw partition containing set:cal data&lt;br /&gt;
|-&lt;br /&gt;
|  PRODINFOF&lt;br /&gt;
|  0x00400000&lt;br /&gt;
|  0x00400000&lt;br /&gt;
|  28&lt;br /&gt;
|  FAT12 filesystem, additional calibration?&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-1-Normal-Main&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  21&lt;br /&gt;
|  For all these packages, data starts at offset 0x4000 and is not console-unique. This is installed from &amp;quot;package2&amp;quot;: on retail it&#039;s from FIRM-A 0100000000000819, for unknown cases it&#039;s from FIRM-C, 010000000000081B.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-2-Normal-Sub&lt;br /&gt;
|  0x01000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  22&lt;br /&gt;
|  Identical to BCPKG2-1-Normal-Main, probably used as a backup partition.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-3-SafeMode-Main&lt;br /&gt;
|  0x01800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  23&lt;br /&gt;
|  This is installed from &amp;quot;package2&amp;quot; in firmware package B, 010000000000081A.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-4-SafeMode-Sub&lt;br /&gt;
|  0x02000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  24&lt;br /&gt;
|  Identical to BCPKG2-3-SafeMode-Main.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-5-Repair-Main&lt;br /&gt;
|  0x02800000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  25&lt;br /&gt;
|  Unknown what title this originates from.&lt;br /&gt;
|-&lt;br /&gt;
|  BCPKG2-6-Repair-Sub&lt;br /&gt;
|  0x03000000&lt;br /&gt;
|  0x00800000&lt;br /&gt;
|  26&lt;br /&gt;
|  Identical to BCPKG2-5-Repair-Main.&lt;br /&gt;
|-&lt;br /&gt;
|  SAFE&lt;br /&gt;
|  0x03800000&lt;br /&gt;
|  0x04000000&lt;br /&gt;
|  29&lt;br /&gt;
|  FAT32 filesystem&lt;br /&gt;
|-&lt;br /&gt;
|  SYSTEM&lt;br /&gt;
|  0x07800000&lt;br /&gt;
|  0xA0000000&lt;br /&gt;
|  31&lt;br /&gt;
|  FAT32 filesystem&lt;br /&gt;
|-&lt;br /&gt;
|  USER&lt;br /&gt;
|  0xA7800000&lt;br /&gt;
|  0x680000000&lt;br /&gt;
|  30&lt;br /&gt;
|  FAT32 filesystem&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PRODINFOF ===&lt;br /&gt;
 PRODINFOF&lt;br /&gt;
 ├── Certifications&lt;br /&gt;
 │   └── WirelessCertification.png&lt;br /&gt;
 └── ptd&lt;br /&gt;
     ├── DeviceIdWithEmsBit.dat&lt;br /&gt;
     ├── Ecid.dat&lt;br /&gt;
     ├── prodCode.dat&lt;br /&gt;
     └── log&lt;br /&gt;
         ├── Process_asm1.log&lt;br /&gt;
         ├── Process_board1.log&lt;br /&gt;
         ├── TestFlagLine.log&lt;br /&gt;
         ├── TestFlagQc.log&lt;br /&gt;
         ├── AGING&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── BOARD_TEST&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── BOARD_WIRELESS&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── FINAL_CHECK&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         ├── LCD_AND_KEY&lt;br /&gt;
         │   └── Sequence.log&lt;br /&gt;
         └── USB_AND_HP&lt;br /&gt;
             └── Sequence.log&lt;br /&gt;
&lt;br /&gt;
=== SYSTEM ===&lt;br /&gt;
 SYSTEM&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]]&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 ├── [[Savegames|save]]&lt;br /&gt;
 │   └── ...&lt;br /&gt;
 └── saveMeta&lt;br /&gt;
     └── ... (empty?)&lt;br /&gt;
&lt;br /&gt;
=== SAFE ===&lt;br /&gt;
 SAFE&lt;br /&gt;
 ├── PRF2SAFE.RCV&lt;br /&gt;
 ├── Contents&lt;br /&gt;
 │   ├── registered&lt;br /&gt;
 │   │   └── ... [[NCA]] (nothing installed?)&lt;br /&gt;
 │   └── placehld&lt;br /&gt;
 │       └── ... [[NCA]]&lt;br /&gt;
 └── [[Savegames|save]]&lt;br /&gt;
     ├── 8000000000000000&lt;br /&gt;
     └── 8000000000000120&lt;/div&gt;</summary>
		<author><name>Missile</name></author>
	</entry>
</feed>