summaryrefslogtreecommitdiff
path: root/src/core/file_sys
diff options
context:
space:
mode:
authorGravatar Zach Hilman2019-04-10 12:07:29 -0400
committerGravatar Zach Hilman2019-09-21 16:43:10 -0400
commit3a1899d143b6b50da6c1ed4fcc03390ef210df75 (patch)
treea7b0d364e6e601f8d10a98e01b467b6e8ba337e4 /src/core/file_sys
parentMerge pull request #2885 from Hexagon12/port-4944 (diff)
downloadyuzu-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.cpp41
-rw-r--r--src/core/file_sys/bis_factory.h20
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
42VirtualDir 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
57VirtualFile 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
11namespace FileSys { 11namespace FileSys {
12 12
13enum 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
13class RegisteredCache; 30class 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
29private: 49private:
30 VirtualDir nand_root; 50 VirtualDir nand_root;
31 VirtualDir load_root; 51 VirtualDir load_root;