diff options
| author | 2019-04-10 12:07:29 -0400 | |
|---|---|---|
| committer | 2019-09-21 16:43:10 -0400 | |
| commit | 3a1899d143b6b50da6c1ed4fcc03390ef210df75 (patch) | |
| tree | a7b0d364e6e601f8d10a98e01b467b6e8ba337e4 /src/core/file_sys | |
| parent | Merge pull request #2885 from Hexagon12/port-4944 (diff) | |
| download | yuzu-3a1899d143b6b50da6c1ed4fcc03390ef210df75.tar.gz yuzu-3a1899d143b6b50da6c1ed4fcc03390ef210df75.tar.xz yuzu-3a1899d143b6b50da6c1ed4fcc03390ef210df75.zip | |
bis_factory: Add accessors for BIS partitions
Diffstat (limited to 'src/core/file_sys')
| -rw-r--r-- | src/core/file_sys/bis_factory.cpp | 41 | ||||
| -rw-r--r-- | src/core/file_sys/bis_factory.h | 20 |
2 files changed, 61 insertions, 0 deletions
diff --git a/src/core/file_sys/bis_factory.cpp b/src/core/file_sys/bis_factory.cpp index e29f70b3a..70a04f6a0 100644 --- a/src/core/file_sys/bis_factory.cpp +++ b/src/core/file_sys/bis_factory.cpp | |||
| @@ -39,4 +39,45 @@ VirtualDir BISFactory::GetModificationDumpRoot(u64 title_id) const { | |||
| 39 | return GetOrCreateDirectoryRelative(dump_root, fmt::format("/{:016X}", title_id)); | 39 | return GetOrCreateDirectoryRelative(dump_root, fmt::format("/{:016X}", title_id)); |
| 40 | } | 40 | } |
| 41 | 41 | ||
| 42 | VirtualDir BISFactory::OpenPartition(BisPartitionId id) const { | ||
| 43 | switch (id) { | ||
| 44 | case BisPartitionId::CalibrationFile: | ||
| 45 | return GetOrCreateDirectoryRelative(nand_root, "/prodinfof"); | ||
| 46 | case BisPartitionId::SafeMode: | ||
| 47 | return GetOrCreateDirectoryRelative(nand_root, "/safe"); | ||
| 48 | case BisPartitionId::System: | ||
| 49 | return GetOrCreateDirectoryRelative(nand_root, "/system"); | ||
| 50 | case BisPartitionId::User: | ||
| 51 | return GetOrCreateDirectoryRelative(nand_root, "/user"); | ||
| 52 | default: | ||
| 53 | return nullptr; | ||
| 54 | } | ||
| 55 | } | ||
| 56 | |||
| 57 | VirtualFile BISFactory::OpenPartitionStorage(BisPartitionId id) const { | ||
| 58 | Core::Crypto::KeyManager keys; | ||
| 59 | Core::Crypto::PartitionDataManager pdm{ | ||
| 60 | Core::System::GetInstance().GetFilesystem()->OpenDirectory( | ||
| 61 | FileUtil::GetUserPath(FileUtil::UserPath::SysDataDir), Mode::Read)}; | ||
| 62 | keys.PopulateFromPartitionData(pdm); | ||
| 63 | |||
| 64 | switch (id) { | ||
| 65 | case BisPartitionId::CalibrationBinary: | ||
| 66 | return pdm.GetDecryptedProdInfo(); | ||
| 67 | case BisPartitionId::BootConfigAndPackage2Part1: | ||
| 68 | case BisPartitionId::BootConfigAndPackage2Part2: | ||
| 69 | case BisPartitionId::BootConfigAndPackage2Part3: | ||
| 70 | case BisPartitionId::BootConfigAndPackage2Part4: | ||
| 71 | case BisPartitionId::BootConfigAndPackage2Part5: | ||
| 72 | case BisPartitionId::BootConfigAndPackage2Part6: { | ||
| 73 | const auto new_id = static_cast<u8>(id) - | ||
| 74 | static_cast<u8>(BisPartitionId::BootConfigAndPackage2Part1) + | ||
| 75 | static_cast<u8>(Core::Crypto::Package2Type::NormalMain); | ||
| 76 | return pdm.GetPackage2Raw(static_cast<Core::Crypto::Package2Type>(new_id)); | ||
| 77 | } | ||
| 78 | default: | ||
| 79 | return nullptr; | ||
| 80 | } | ||
| 81 | } | ||
| 82 | |||
| 42 | } // namespace FileSys | 83 | } // namespace FileSys |
diff --git a/src/core/file_sys/bis_factory.h b/src/core/file_sys/bis_factory.h index 453c11ad2..f8413d4ef 100644 --- a/src/core/file_sys/bis_factory.h +++ b/src/core/file_sys/bis_factory.h | |||
| @@ -10,6 +10,23 @@ | |||
| 10 | 10 | ||
| 11 | namespace FileSys { | 11 | namespace FileSys { |
| 12 | 12 | ||
| 13 | enum class BisPartitionId : u32 { | ||
| 14 | UserDataRoot = 20, | ||
| 15 | CalibrationBinary = 27, | ||
| 16 | CalibrationFile = 28, | ||
| 17 | BootConfigAndPackage2Part1 = 21, | ||
| 18 | BootConfigAndPackage2Part2 = 22, | ||
| 19 | BootConfigAndPackage2Part3 = 23, | ||
| 20 | BootConfigAndPackage2Part4 = 24, | ||
| 21 | BootConfigAndPackage2Part5 = 25, | ||
| 22 | BootConfigAndPackage2Part6 = 26, | ||
| 23 | SafeMode = 29, | ||
| 24 | System = 31, | ||
| 25 | SystemProperEncryption = 32, | ||
| 26 | SystemProperPartition = 33, | ||
| 27 | User = 30, | ||
| 28 | }; | ||
| 29 | |||
| 13 | class RegisteredCache; | 30 | class RegisteredCache; |
| 14 | 31 | ||
| 15 | /// File system interface to the Built-In Storage | 32 | /// File system interface to the Built-In Storage |
| @@ -26,6 +43,9 @@ public: | |||
| 26 | VirtualDir GetModificationLoadRoot(u64 title_id) const; | 43 | VirtualDir GetModificationLoadRoot(u64 title_id) const; |
| 27 | VirtualDir GetModificationDumpRoot(u64 title_id) const; | 44 | VirtualDir GetModificationDumpRoot(u64 title_id) const; |
| 28 | 45 | ||
| 46 | VirtualDir OpenPartition(BisPartitionId id) const; | ||
| 47 | VirtualFile OpenPartitionStorage(BisPartitionId id) const; | ||
| 48 | |||
| 29 | private: | 49 | private: |
| 30 | VirtualDir nand_root; | 50 | VirtualDir nand_root; |
| 31 | VirtualDir load_root; | 51 | VirtualDir load_root; |