boot2: update for 16.0.0

This commit is contained in:
Michael Scire 2023-02-21 16:06:21 -07:00
parent 5b3420e9d6
commit 528191b50e
15 changed files with 68 additions and 11 deletions

View file

@ -44,6 +44,8 @@ namespace ams::fs {
SystemProperEncryption = 32,
SystemProperPartition = 33,
SignedSystemPartitionOnSafeMode = 34,
DeviceTreeBlob = 35,
System0 = 36,
};
const char *GetBisMountName(BisPartitionId id);

View file

@ -15,16 +15,10 @@
*/
#pragma once
#include <stratosphere/fs/fs_common.hpp>
#include <stratosphere/fs/fs_content_storage_id.hpp>
namespace ams::fs {
/* ACCURATE_TO_VERSION: Unknown */
enum class ContentStorageId : u32 {
System = 0,
User = 1,
SdCard = 2,
};
constexpr inline const char * const ContentStorageDirectoryName = "Contents";
const char *GetContentStorageMountName(ContentStorageId id);

View file

@ -0,0 +1,29 @@
/*
* Copyright (c) Atmosphère-NX
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <vapours.hpp>
namespace ams::fs {
/* ACCURATE_TO_VERSION: 16.2.0.0 */
enum class ContentStorageId : u32 {
System = 0,
User = 1,
SdCard = 2,
System0 = 3,
};
}

View file

@ -17,6 +17,7 @@
#include <stratosphere/ncm/ncm_content_meta_database.hpp>
#include <stratosphere/ncm/ncm_content_storage.hpp>
#include <stratosphere/ncm/ncm_i_content_manager.hpp>
#include <stratosphere/fs/fs_content_storage_id.hpp>
namespace ams::ncm {
@ -46,6 +47,8 @@ namespace ams::ncm {
Result InvalidateRightsIdCache();
Result ActivateFsContentStorage(fs::ContentStorageId fs_content_storage_id);
/* Deprecated API. */
Result CloseContentStorageForcibly(StorageId storage_id);
Result CloseContentMetaDatabaseForcibly(StorageId storage_id);

View file

@ -151,6 +151,7 @@ namespace ams::ncm {
Result InactivateContentMetaDatabase(StorageId storage_id);
Result InvalidateRightsIdCache();
Result GetMemoryReport(sf::Out<MemoryReport> out);
Result ActivateFsContentStorage(fs::ContentStorageId fs_content_storage_id);
};
static_assert(IsIContentManager<ContentManagerImpl>);

View file

@ -17,6 +17,7 @@
#include <stratosphere/ncm/ncm_i_content_storage.hpp>
#include <stratosphere/ncm/ncm_i_content_meta_database.hpp>
#include <stratosphere/ncm/ncm_memory_report.hpp>
#include <stratosphere/fs/fs_content_storage_id.hpp>
#define AMS_NCM_I_CONTENT_MANAGER_INTERFACE_INFO(C, H) \
AMS_SF_METHOD_INFO(C, H, 0, Result, CreateContentStorage, (ncm::StorageId storage_id), (storage_id)) \
@ -33,6 +34,7 @@
AMS_SF_METHOD_INFO(C, H, 11, Result, ActivateContentMetaDatabase, (ncm::StorageId storage_id), (storage_id), hos::Version_2_0_0) \
AMS_SF_METHOD_INFO(C, H, 12, Result, InactivateContentMetaDatabase, (ncm::StorageId storage_id), (storage_id), hos::Version_2_0_0) \
AMS_SF_METHOD_INFO(C, H, 13, Result, InvalidateRightsIdCache, (), (), hos::Version_9_0_0) \
AMS_SF_METHOD_INFO(C, H, 14, Result, GetMemoryReport, (sf::Out<ncm::MemoryReport> out), (out), hos::Version_10_0_0)
AMS_SF_METHOD_INFO(C, H, 14, Result, GetMemoryReport, (sf::Out<ncm::MemoryReport> out), (out), hos::Version_10_0_0) \
AMS_SF_METHOD_INFO(C, H, 15, Result, ActivateFsContentStorage, (fs::ContentStorageId fs_storage_id), (fs_storage_id)) /* Technically min 16.0.0, but used. */
AMS_SF_DEFINE_INTERFACE(ams::ncm, IContentManager, AMS_NCM_I_CONTENT_MANAGER_INTERFACE_INFO, 0xFDB4FFE1);

View file

@ -98,6 +98,7 @@ namespace ams::ncm {
static const SystemProgramId Pgl;
static const SystemProgramId Omm;
static const SystemProgramId Eth;
static const SystemProgramId Ngc;
static const SystemProgramId End;
@ -205,6 +206,7 @@ namespace ams::ncm {
inline constexpr const SystemProgramId SystemProgramId::Pgl = { 0x0100000000000042ul };
inline constexpr const SystemProgramId SystemProgramId::Omm = { 0x0100000000000045ul };
inline constexpr const SystemProgramId SystemProgramId::Eth = { 0x0100000000000046ul };
inline constexpr const SystemProgramId SystemProgramId::Ngc = { 0x0100000000000050ul };
inline constexpr const SystemProgramId SystemProgramId::End = { 0x01000000000007FFul };

View file

@ -74,6 +74,7 @@ namespace ams::boot2 {
ncm::SystemProgramId::Profiler, /* profiler */
ncm::SystemProgramId::Sdb, /* sdb */
ncm::SystemProgramId::Olsc, /* olsc */
ncm::SystemProgramId::Ngc, /* ngc */
ncm::SystemProgramId::Ngct, /* ngct */
};
constexpr size_t NumAdditionalLaunchPrograms = util::size(AdditionalLaunchPrograms);
@ -115,6 +116,7 @@ namespace ams::boot2 {
ncm::SystemProgramId::Profiler, /* profiler */
ncm::SystemProgramId::Sdb, /* sdb */
ncm::SystemProgramId::Olsc, /* olsc */
ncm::SystemProgramId::Ngc, /* ngc */
ncm::SystemProgramId::Ngct, /* ngct */
};
constexpr size_t NumAdditionalMaintenanceLaunchPrograms = util::size(AdditionalMaintenanceLaunchPrograms);
@ -399,6 +401,9 @@ namespace ams::boot2 {
LaunchProgram(nullptr, ncm::ProgramLocation::Make(ncm::SystemProgramId::Usb, ncm::StorageId::BuiltInSystem), 0);
}
/* Activate the system fs content storage. */
R_ABORT_UNLESS(ncm::ActivateFsContentStorage(fs::ContentStorageId::System));
/* Find out whether we are maintenance mode. */
const bool maintenance = IsMaintenanceMode();
if (maintenance) {

View file

@ -118,6 +118,7 @@ namespace ams::fs::impl {
ADD_ENUM_CASE(User);
ADD_ENUM_CASE(System);
ADD_ENUM_CASE(SdCard);
ADD_ENUM_CASE(System0);
default: return ToValueString(static_cast<int>(id));
}
}
@ -171,6 +172,8 @@ namespace ams::fs::impl {
ADD_ENUM_CASE(System);
ADD_ENUM_CASE(SystemProperEncryption);
ADD_ENUM_CASE(SystemProperPartition);
ADD_ENUM_CASE(DeviceTreeBlob);
ADD_ENUM_CASE(System0);
default: return ToValueString(static_cast<int>(id));
}
}

View file

@ -21,7 +21,7 @@ namespace ams::fs::impl {
#define ADD_ENUM_CASE(v) case v: return #v
template<> const char *IdString::ToString<pkg1::KeyGeneration>(pkg1::KeyGeneration id) {
static_assert(pkg1::KeyGeneration_Current == pkg1::KeyGeneration_15_0_0);
static_assert(pkg1::KeyGeneration_Current == pkg1::KeyGeneration_16_0_0);
switch (id) {
using enum pkg1::KeyGeneration;
case KeyGeneration_1_0_0: return "1.0.0-2.3.0";
@ -38,7 +38,8 @@ namespace ams::fs::impl {
case KeyGeneration_12_1_0: return "12.1.0";
case KeyGeneration_13_0_0: return "13.0.0-13.2.1";
case KeyGeneration_14_0_0: return "14.0.0-14.1.2";
case KeyGeneration_15_0_0: return "15.0.0-";
case KeyGeneration_15_0_0: return "15.0.0-15.0.1";
case KeyGeneration_16_0_0: return "16.0.0-";
default: return "Unknown";
}
}

View file

@ -114,6 +114,10 @@ namespace ams::ncm {
R_RETURN(g_content_manager->InvalidateRightsIdCache());
}
Result ActivateFsContentStorage(fs::ContentStorageId fs_content_storage_id) {
R_RETURN(g_content_manager->ActivateFsContentStorage(fs_content_storage_id));
}
/* Deprecated API. */
Result CloseContentStorageForcibly(StorageId storage_id) {
AMS_ABORT_UNLESS(hos::GetVersion() == hos::Version_1_0_0);

View file

@ -675,6 +675,12 @@ namespace ams::ncm {
R_SUCCEED();
}
Result ContentManagerImpl::ActivateFsContentStorage(fs::ContentStorageId fs_content_storage_id) {
/* TODO */
AMS_UNUSED(fs_content_storage_id);
R_SUCCEED();
}
Result ContentManagerImpl::GetMemoryReport(sf::Out<MemoryReport> out) {
/* Populate content meta resource states. */
MemoryReport report = {

View file

@ -99,6 +99,10 @@ namespace ams::ncm {
AMS_UNUSED(out);
AMS_ABORT();
}
Result ActivateFsContentStorage(fs::ContentStorageId fs_content_storage_id) {
R_RETURN(::ncmActivateFsContentStorage(static_cast<::FsContentStorageId>(util::ToUnderlying(fs_content_storage_id))));
}
};
static_assert(ncm::IsIContentManager<RemoteContentManagerImpl>);
#endif

View file

@ -16,7 +16,7 @@
"permissions": "0xFFFFFFFFFFFFFFFF"
},
"service_host": ["*"],
"service_access": ["fsp-srv", "gpio", "htc", "lr", "pm:bm", "pm:shell", "pm:info", "set:sys"],
"service_access": ["fsp-srv", "gpio", "htc", "lr", "ncm", "pm:bm", "pm:shell", "pm:info", "set:sys"],
"kernel_capabilities": [
{
"type": "kernel_flags",

View file

@ -61,6 +61,7 @@ namespace ams {
R_ABORT_UNLESS(pmshellInitialize());
R_ABORT_UNLESS(setsysInitialize());
gpio::Initialize();
ncm::Initialize();
/* Mount the SD card. */
R_ABORT_UNLESS(fs::MountSdCard("sdmc"));