mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2025-07-03 16:12:15 +02:00
Compare commits
1 Commits
9b480e4757
...
826c3fec47
Author | SHA1 | Date | |
---|---|---|---|
|
826c3fec47 |
@ -1,15 +1,4 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
## 1.5.3
|
|
||||||
+ Support was added for 16.0.3.
|
|
||||||
+ Atmosphère was updated to use GCC 13/newlib (latest devkitA64/devkitARM releases).
|
|
||||||
+ **Please note**: This introduces a known issue, which is currently being worked on.
|
|
||||||
+ As you may recall from the 1.4.1 changelog, Fire Emblem: Engage requires enormous amounts of memory to support using layeredfs mods with the game.
|
|
||||||
+ Latest GCC/newlib slightly increases malloc overhead size, which makes the previous memory increase insufficient.
|
|
||||||
+ A general-case solution to this is in the works, which should hopefully fix the problem in a way that doesn't jinx me for the future.
|
|
||||||
+ A number of minor issues were fixed and improvements were made, including:
|
|
||||||
+ An issue was fixed that caused system font replacement to not work on 16.0.0+.
|
|
||||||
+ An minor accuracy issue was addressed in mesosphere's management of certain memory ranges; this issue would have had zero visible impact to the end-user.
|
|
||||||
+ General system stability improvements to enhance the user's experience.
|
|
||||||
## 1.5.2
|
## 1.5.2
|
||||||
+ A homebrew application (`haze`) was added for performing USB file transfer (with thanks to @liamwhite for both design and implementation).
|
+ A homebrew application (`haze`) was added for performing USB file transfer (with thanks to @liamwhite for both design and implementation).
|
||||||
+ `haze` is included with atmosphère, and provides access to the SD card via the PTP/MTP protocol.
|
+ `haze` is included with atmosphère, and provides access to the SD card via the PTP/MTP protocol.
|
||||||
|
4
emummc/.gitrepo
vendored
4
emummc/.gitrepo
vendored
@ -6,7 +6,7 @@
|
|||||||
[subrepo]
|
[subrepo]
|
||||||
remote = https://github.com/m4xw/emummc
|
remote = https://github.com/m4xw/emummc
|
||||||
branch = develop
|
branch = develop
|
||||||
commit = 30205111ee375bef96f0f76cb6a3130a2f0fc85c
|
commit = bba1f1fb65f75721caf6d023a35d75d3c9aafd0f
|
||||||
parent = 81e9154a52a976f85317bddd0131426599d26a62
|
parent = 1ab8b234447864503e21c600681219a96962e6c1
|
||||||
method = merge
|
method = merge
|
||||||
cmdver = 0.4.1
|
cmdver = 0.4.1
|
||||||
|
2
emummc/README.md
vendored
2
emummc/README.md
vendored
@ -2,7 +2,7 @@
|
|||||||
*A SDMMC driver replacement for Nintendo's Filesystem Services, by **m4xw***
|
*A SDMMC driver replacement for Nintendo's Filesystem Services, by **m4xw***
|
||||||
|
|
||||||
### Supported Horizon Versions
|
### Supported Horizon Versions
|
||||||
**1.0.0 - 16.0.3**
|
**1.0.0 - 16.0.0**
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
* Arbitrary SDMMC backend selection
|
* Arbitrary SDMMC backend selection
|
||||||
|
8
emummc/source/FS/FS_offsets.c
vendored
8
emummc/source/FS/FS_offsets.c
vendored
@ -65,8 +65,6 @@
|
|||||||
#include "offsets/1500_exfat.h"
|
#include "offsets/1500_exfat.h"
|
||||||
#include "offsets/1600.h"
|
#include "offsets/1600.h"
|
||||||
#include "offsets/1600_exfat.h"
|
#include "offsets/1600_exfat.h"
|
||||||
#include "offsets/1603.h"
|
|
||||||
#include "offsets/1603_exfat.h"
|
|
||||||
#include "../utils/fatal.h"
|
#include "../utils/fatal.h"
|
||||||
|
|
||||||
#define GET_OFFSET_STRUCT_NAME(vers) g_offsets##vers
|
#define GET_OFFSET_STRUCT_NAME(vers) g_offsets##vers
|
||||||
@ -143,8 +141,6 @@ DEFINE_OFFSET_STRUCT(_1500);
|
|||||||
DEFINE_OFFSET_STRUCT(_1500_EXFAT);
|
DEFINE_OFFSET_STRUCT(_1500_EXFAT);
|
||||||
DEFINE_OFFSET_STRUCT(_1600);
|
DEFINE_OFFSET_STRUCT(_1600);
|
||||||
DEFINE_OFFSET_STRUCT(_1600_EXFAT);
|
DEFINE_OFFSET_STRUCT(_1600_EXFAT);
|
||||||
DEFINE_OFFSET_STRUCT(_1603);
|
|
||||||
DEFINE_OFFSET_STRUCT(_1603_EXFAT);
|
|
||||||
|
|
||||||
const fs_offsets_t *get_fs_offsets(enum FS_VER version) {
|
const fs_offsets_t *get_fs_offsets(enum FS_VER version) {
|
||||||
switch (version) {
|
switch (version) {
|
||||||
@ -246,10 +242,6 @@ const fs_offsets_t *get_fs_offsets(enum FS_VER version) {
|
|||||||
return &(GET_OFFSET_STRUCT_NAME(_1600));
|
return &(GET_OFFSET_STRUCT_NAME(_1600));
|
||||||
case FS_VER_16_0_0_EXFAT:
|
case FS_VER_16_0_0_EXFAT:
|
||||||
return &(GET_OFFSET_STRUCT_NAME(_1600_EXFAT));
|
return &(GET_OFFSET_STRUCT_NAME(_1600_EXFAT));
|
||||||
case FS_VER_16_0_3:
|
|
||||||
return &(GET_OFFSET_STRUCT_NAME(_1603));
|
|
||||||
case FS_VER_16_0_3_EXFAT:
|
|
||||||
return &(GET_OFFSET_STRUCT_NAME(_1603_EXFAT));
|
|
||||||
default:
|
default:
|
||||||
fatal_abort(Fatal_UnknownVersion);
|
fatal_abort(Fatal_UnknownVersion);
|
||||||
}
|
}
|
||||||
|
3
emummc/source/FS/FS_versions.h
vendored
3
emummc/source/FS/FS_versions.h
vendored
@ -95,9 +95,6 @@ enum FS_VER
|
|||||||
FS_VER_16_0_0,
|
FS_VER_16_0_0,
|
||||||
FS_VER_16_0_0_EXFAT,
|
FS_VER_16_0_0_EXFAT,
|
||||||
|
|
||||||
FS_VER_16_0_3,
|
|
||||||
FS_VER_16_0_3_EXFAT,
|
|
||||||
|
|
||||||
FS_VER_MAX,
|
FS_VER_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
59
emummc/source/FS/offsets/1603.h
vendored
59
emummc/source/FS/offsets/1603.h
vendored
@ -1,59 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
|
||||||
* Copyright (c) 2019 Atmosphere-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/>.
|
|
||||||
*/
|
|
||||||
#ifndef __FS_1603_H__
|
|
||||||
#define __FS_1603_H__
|
|
||||||
|
|
||||||
// Accessor vtable getters
|
|
||||||
#define FS_OFFSET_1603_SDMMC_ACCESSOR_GC 0x1862F0
|
|
||||||
#define FS_OFFSET_1603_SDMMC_ACCESSOR_SD 0x187F70
|
|
||||||
#define FS_OFFSET_1603_SDMMC_ACCESSOR_NAND 0x1867B0
|
|
||||||
|
|
||||||
// Hooks
|
|
||||||
#define FS_OFFSET_1603_SDMMC_WRAPPER_READ 0x182240
|
|
||||||
#define FS_OFFSET_1603_SDMMC_WRAPPER_WRITE 0x1822A0
|
|
||||||
#define FS_OFFSET_1603_RTLD 0x269B0
|
|
||||||
#define FS_OFFSET_1603_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
|
||||||
|
|
||||||
#define FS_OFFSET_1603_CLKRST_SET_MIN_V_CLK_RATE 0x1A2D80
|
|
||||||
|
|
||||||
// Misc funcs
|
|
||||||
#define FS_OFFSET_1603_LOCK_MUTEX 0x17B780
|
|
||||||
#define FS_OFFSET_1603_UNLOCK_MUTEX 0x17B7D0
|
|
||||||
|
|
||||||
#define FS_OFFSET_1603_SDMMC_WRAPPER_CONTROLLER_OPEN 0x182200
|
|
||||||
#define FS_OFFSET_1603_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x182220
|
|
||||||
|
|
||||||
// Misc Data
|
|
||||||
#define FS_OFFSET_1603_SD_MUTEX 0xFFB3F0
|
|
||||||
#define FS_OFFSET_1603_NAND_MUTEX 0xFF6B58
|
|
||||||
#define FS_OFFSET_1603_ACTIVE_PARTITION 0xFF6B98
|
|
||||||
#define FS_OFFSET_1603_SDMMC_DAS_HANDLE 0xFDC8B0
|
|
||||||
|
|
||||||
// NOPs
|
|
||||||
#define FS_OFFSET_1603_SD_DAS_INIT 0x258D4
|
|
||||||
|
|
||||||
// Nintendo Paths
|
|
||||||
#define FS_OFFSET_1603_NINTENDO_PATHS \
|
|
||||||
{ \
|
|
||||||
{.opcode_reg = 3, .adrp_offset = 0x00063B98, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 3, .adrp_offset = 0x00070DBC, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 4, .adrp_offset = 0x0007795C, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 4, .adrp_offset = 0x0008A7A4, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // __FS_1603_H__
|
|
59
emummc/source/FS/offsets/1603_exfat.h
vendored
59
emummc/source/FS/offsets/1603_exfat.h
vendored
@ -1,59 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2019 m4xw <m4x@m4xw.net>
|
|
||||||
* Copyright (c) 2019 Atmosphere-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/>.
|
|
||||||
*/
|
|
||||||
#ifndef __FS_1603_EXFAT_H__
|
|
||||||
#define __FS_1603_EXFAT_H__
|
|
||||||
|
|
||||||
// Accessor vtable getters
|
|
||||||
#define FS_OFFSET_1603_EXFAT_SDMMC_ACCESSOR_GC 0x190FD0
|
|
||||||
#define FS_OFFSET_1603_EXFAT_SDMMC_ACCESSOR_SD 0x192C50
|
|
||||||
#define FS_OFFSET_1603_EXFAT_SDMMC_ACCESSOR_NAND 0x191490
|
|
||||||
|
|
||||||
// Hooks
|
|
||||||
#define FS_OFFSET_1603_EXFAT_SDMMC_WRAPPER_READ 0x18CF20
|
|
||||||
#define FS_OFFSET_1603_EXFAT_SDMMC_WRAPPER_WRITE 0x18CF80
|
|
||||||
#define FS_OFFSET_1603_EXFAT_RTLD 0x269B0
|
|
||||||
#define FS_OFFSET_1603_EXFAT_RTLD_DESTINATION ((uintptr_t)(INT64_C(-0x3C)))
|
|
||||||
|
|
||||||
#define FS_OFFSET_1603_EXFAT_CLKRST_SET_MIN_V_CLK_RATE 0x1ADA60
|
|
||||||
|
|
||||||
// Misc funcs
|
|
||||||
#define FS_OFFSET_1603_EXFAT_LOCK_MUTEX 0x186460
|
|
||||||
#define FS_OFFSET_1603_EXFAT_UNLOCK_MUTEX 0x1864B0
|
|
||||||
|
|
||||||
#define FS_OFFSET_1603_EXFAT_SDMMC_WRAPPER_CONTROLLER_OPEN 0x18CEE0
|
|
||||||
#define FS_OFFSET_1603_EXFAT_SDMMC_WRAPPER_CONTROLLER_CLOSE 0x18CF00
|
|
||||||
|
|
||||||
// Misc Data
|
|
||||||
#define FS_OFFSET_1603_EXFAT_SD_MUTEX 0x100D3F0
|
|
||||||
#define FS_OFFSET_1603_EXFAT_NAND_MUTEX 0x1008B58
|
|
||||||
#define FS_OFFSET_1603_EXFAT_ACTIVE_PARTITION 0x1008B98
|
|
||||||
#define FS_OFFSET_1603_EXFAT_SDMMC_DAS_HANDLE 0xFE98B0
|
|
||||||
|
|
||||||
// NOPs
|
|
||||||
#define FS_OFFSET_1603_EXFAT_SD_DAS_INIT 0x258D4
|
|
||||||
|
|
||||||
// Nintendo Paths
|
|
||||||
#define FS_OFFSET_1603_EXFAT_NINTENDO_PATHS \
|
|
||||||
{ \
|
|
||||||
{.opcode_reg = 3, .adrp_offset = 0x00063B98, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 3, .adrp_offset = 0x00070DBC, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 4, .adrp_offset = 0x0007795C, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 4, .adrp_offset = 0x0008A7A4, .add_rel_offset = 0x00000004}, \
|
|
||||||
{.opcode_reg = 0, .adrp_offset = 0, .add_rel_offset = 0}, \
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // __FS_1603_EXFAT_H__
|
|
@ -162,9 +162,6 @@ namespace ams::nxboot {
|
|||||||
FsVersion_16_0_0,
|
FsVersion_16_0_0,
|
||||||
FsVersion_16_0_0_Exfat,
|
FsVersion_16_0_0_Exfat,
|
||||||
|
|
||||||
FsVersion_16_0_3,
|
|
||||||
FsVersion_16_0_3_Exfat,
|
|
||||||
|
|
||||||
FsVersion_Count,
|
FsVersion_Count,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -242,9 +239,6 @@ namespace ams::nxboot {
|
|||||||
|
|
||||||
{ 0x56, 0xE8, 0x56, 0x56, 0x6C, 0x38, 0xD8, 0xBE }, /* FsVersion_16_0_0 */
|
{ 0x56, 0xE8, 0x56, 0x56, 0x6C, 0x38, 0xD8, 0xBE }, /* FsVersion_16_0_0 */
|
||||||
{ 0xCF, 0xAB, 0x45, 0x0C, 0x2C, 0x53, 0x9D, 0xA9 }, /* FsVersion_16_0_0_Exfat */
|
{ 0xCF, 0xAB, 0x45, 0x0C, 0x2C, 0x53, 0x9D, 0xA9 }, /* FsVersion_16_0_0_Exfat */
|
||||||
|
|
||||||
{ 0x39, 0xEE, 0x1F, 0x1E, 0x0E, 0xA7, 0x32, 0x5D }, /* FsVersion_16_0_3 */
|
|
||||||
{ 0x62, 0xC6, 0x5E, 0xFD, 0x9A, 0xBF, 0x7C, 0x43 }, /* FsVersion_16_0_3_Exfat */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const InitialProcessBinaryHeader *FindInitialProcessBinary(const pkg2::Package2Header *header, const u8 *data, ams::TargetFirmware target_firmware) {
|
const InitialProcessBinaryHeader *FindInitialProcessBinary(const pkg2::Package2Header *header, const u8 *data, ams::TargetFirmware target_firmware) {
|
||||||
@ -662,14 +656,6 @@ namespace ams::nxboot {
|
|||||||
AddPatch(fs_meta, 0x1913B9, NogcPatch0, sizeof(NogcPatch0));
|
AddPatch(fs_meta, 0x1913B9, NogcPatch0, sizeof(NogcPatch0));
|
||||||
AddPatch(fs_meta, 0x16B950, NogcPatch1, sizeof(NogcPatch1));
|
AddPatch(fs_meta, 0x16B950, NogcPatch1, sizeof(NogcPatch1));
|
||||||
break;
|
break;
|
||||||
case FsVersion_16_0_3:
|
|
||||||
AddPatch(fs_meta, 0x186729, NogcPatch0, sizeof(NogcPatch0));
|
|
||||||
AddPatch(fs_meta, 0x160CC0, NogcPatch1, sizeof(NogcPatch1));
|
|
||||||
break;
|
|
||||||
case FsVersion_16_0_3_Exfat:
|
|
||||||
AddPatch(fs_meta, 0x191409, NogcPatch0, sizeof(NogcPatch0));
|
|
||||||
AddPatch(fs_meta, 0x16B9A0, NogcPatch1, sizeof(NogcPatch1));
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
[subrepo]
|
[subrepo]
|
||||||
remote = https://github.com/Atmosphere-NX/Atmosphere-libs
|
remote = https://github.com/Atmosphere-NX/Atmosphere-libs
|
||||||
branch = master
|
branch = master
|
||||||
commit = cd0fc2c1d5728ec45414aaaa6efa28c269695992
|
commit = ecc8b18111730acef0a353f6f61c45c1f143a793
|
||||||
parent = 8ec7c096d04e6f9586be2cb785840cd482d4b900
|
parent = d8aed7de6d39dd29b75e34f24d376decfb77a5b4
|
||||||
method = merge
|
method = merge
|
||||||
cmdver = 0.4.1
|
cmdver = 0.4.1
|
||||||
|
@ -78,7 +78,6 @@ namespace ams::hos {
|
|||||||
Version_16_0_0 = ::ams::TargetFirmware_16_0_0,
|
Version_16_0_0 = ::ams::TargetFirmware_16_0_0,
|
||||||
Version_16_0_1 = ::ams::TargetFirmware_16_0_1,
|
Version_16_0_1 = ::ams::TargetFirmware_16_0_1,
|
||||||
Version_16_0_2 = ::ams::TargetFirmware_16_0_2,
|
Version_16_0_2 = ::ams::TargetFirmware_16_0_2,
|
||||||
Version_16_0_3 = ::ams::TargetFirmware_16_0_3,
|
|
||||||
|
|
||||||
Version_Current = ::ams::TargetFirmware_Current,
|
Version_Current = ::ams::TargetFirmware_Current,
|
||||||
|
|
||||||
|
@ -30,8 +30,7 @@
|
|||||||
AMS_SF_METHOD_INFO(C, H, 7, Result, BoostSystemMemoryResourceLimit, (u64 boost_size), (boost_size)) \
|
AMS_SF_METHOD_INFO(C, H, 7, Result, BoostSystemMemoryResourceLimit, (u64 boost_size), (boost_size)) \
|
||||||
AMS_SF_METHOD_INFO(C, H, 8, Result, BoostApplicationThreadResourceLimit, (), ()) \
|
AMS_SF_METHOD_INFO(C, H, 8, Result, BoostApplicationThreadResourceLimit, (), ()) \
|
||||||
AMS_SF_METHOD_INFO(C, H, 9, void, GetBootFinishedEventHandle, (sf::OutCopyHandle out), (out), hos::Version_8_0_0) \
|
AMS_SF_METHOD_INFO(C, H, 9, void, GetBootFinishedEventHandle, (sf::OutCopyHandle out), (out), hos::Version_8_0_0) \
|
||||||
AMS_SF_METHOD_INFO(C, H, 10, Result, BoostSystemThreadResourceLimit, (), ()) \
|
AMS_SF_METHOD_INFO(C, H, 10, Result, BoostSystemThreadResourceLimit, (), ())
|
||||||
AMS_SF_METHOD_INFO(C, H, 65000, Result, AtmosphereBoostSystemMemoryResourceLimitForMitm, (u64 boost_size), (boost_size))
|
|
||||||
|
|
||||||
AMS_SF_DEFINE_INTERFACE(ams::pm::impl, IShellInterface, AMS_PM_I_SHELL_INTERFACE_INTERFACE_INFO, 0x387D60C0)
|
AMS_SF_DEFINE_INTERFACE(ams::pm::impl, IShellInterface, AMS_PM_I_SHELL_INTERFACE_INTERFACE_INFO, 0x387D60C0)
|
||||||
|
|
||||||
@ -45,8 +44,6 @@ AMS_SF_DEFINE_INTERFACE(ams::pm::impl, IShellInterface, AMS_PM_I_SHELL_INTERFACE
|
|||||||
AMS_SF_METHOD_INFO(C, H, 6, Result, ClearExceptionOccurred, (os::ProcessId process_id), (process_id)) \
|
AMS_SF_METHOD_INFO(C, H, 6, Result, ClearExceptionOccurred, (os::ProcessId process_id), (process_id)) \
|
||||||
AMS_SF_METHOD_INFO(C, H, 7, void, NotifyBootFinished, (), ()) \
|
AMS_SF_METHOD_INFO(C, H, 7, void, NotifyBootFinished, (), ()) \
|
||||||
AMS_SF_METHOD_INFO(C, H, 8, Result, GetApplicationProcessIdForShell, (sf::Out<os::ProcessId> out), (out)) \
|
AMS_SF_METHOD_INFO(C, H, 8, Result, GetApplicationProcessIdForShell, (sf::Out<os::ProcessId> out), (out)) \
|
||||||
AMS_SF_METHOD_INFO(C, H, 9, Result, BoostSystemMemoryResourceLimit, (u64 boost_size), (boost_size), hos::Version_4_0_0) \
|
AMS_SF_METHOD_INFO(C, H, 9, Result, BoostSystemMemoryResourceLimit, (u64 boost_size), (boost_size), hos::Version_4_0_0)
|
||||||
AMS_SF_METHOD_INFO(C, H, 10, Result, BoostSystemThreadResourceLimit, (), ()) \
|
|
||||||
AMS_SF_METHOD_INFO(C, H, 65000, Result, AtmosphereBoostSystemMemoryResourceLimitForMitm, (u64 boost_size), (boost_size))
|
|
||||||
|
|
||||||
AMS_SF_DEFINE_INTERFACE(ams::pm::impl, IDeprecatedShellInterface, AMS_PM_I_DEPRECATED_SHELL_INTERFACE_INTERFACE_INFO, 0x387D60C0)
|
AMS_SF_DEFINE_INTERFACE(ams::pm::impl, IDeprecatedShellInterface, AMS_PM_I_DEPRECATED_SHELL_INTERFACE_INTERFACE_INFO, 0x387D60C0)
|
||||||
|
@ -32,6 +32,4 @@ namespace ams::pm::shell {
|
|||||||
Result BoostApplicationThreadResourceLimit();
|
Result BoostApplicationThreadResourceLimit();
|
||||||
Result BoostSystemThreadResourceLimit();
|
Result BoostSystemThreadResourceLimit();
|
||||||
|
|
||||||
Result AtmosphereBoostSystemMemoryResourceLimitForMitm(u64 size);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -90,9 +90,3 @@ Result pmdmntAtmosphereGetCurrentLimitInfo(u64 *out_cur, u64 *out_lim, u32 group
|
|||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
Result pmshellAtmosphereBoostSystemMemoryResourceLimitForMitm(u64 size) {
|
|
||||||
return serviceDispatchIn(pmshellGetServiceSession(), 65000, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,8 +26,6 @@ Result pminfoAtmosphereGetProcessInfo(NcmProgramLocation *loc_out, CfgOverrideSt
|
|||||||
Result pmdmntAtmosphereGetProcessInfo(Handle *out, NcmProgramLocation *loc_out, CfgOverrideStatus *status_out, u64 pid);
|
Result pmdmntAtmosphereGetProcessInfo(Handle *out, NcmProgramLocation *loc_out, CfgOverrideStatus *status_out, u64 pid);
|
||||||
Result pmdmntAtmosphereGetCurrentLimitInfo(u64 *out_cur, u64 *out_lim, u32 group, u32 resource);
|
Result pmdmntAtmosphereGetCurrentLimitInfo(u64 *out_cur, u64 *out_lim, u32 group, u32 resource);
|
||||||
|
|
||||||
Result pmshellAtmosphereBoostSystemMemoryResourceLimitForMitm(u64 size);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#include <stratosphere.hpp>
|
#include <stratosphere.hpp>
|
||||||
#include "pm_ams.os.horizon.h"
|
|
||||||
|
|
||||||
namespace ams::pm::shell {
|
namespace ams::pm::shell {
|
||||||
|
|
||||||
@ -58,10 +57,6 @@ namespace ams::pm::shell {
|
|||||||
Result BoostSystemThreadResourceLimit() {
|
Result BoostSystemThreadResourceLimit() {
|
||||||
R_RETURN(::pmshellBoostSystemThreadResourceLimit());
|
R_RETURN(::pmshellBoostSystemThreadResourceLimit());
|
||||||
}
|
}
|
||||||
|
|
||||||
Result AtmosphereBoostSystemMemoryResourceLimitForMitm(u64 size) {
|
|
||||||
R_RETURN(pmshellAtmosphereBoostSystemMemoryResourceLimitForMitm(size));
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -17,10 +17,10 @@
|
|||||||
|
|
||||||
#define ATMOSPHERE_RELEASE_VERSION_MAJOR 1
|
#define ATMOSPHERE_RELEASE_VERSION_MAJOR 1
|
||||||
#define ATMOSPHERE_RELEASE_VERSION_MINOR 5
|
#define ATMOSPHERE_RELEASE_VERSION_MINOR 5
|
||||||
#define ATMOSPHERE_RELEASE_VERSION_MICRO 3
|
#define ATMOSPHERE_RELEASE_VERSION_MICRO 2
|
||||||
|
|
||||||
#define ATMOSPHERE_RELEASE_VERSION ATMOSPHERE_RELEASE_VERSION_MAJOR, ATMOSPHERE_RELEASE_VERSION_MINOR, ATMOSPHERE_RELEASE_VERSION_MICRO
|
#define ATMOSPHERE_RELEASE_VERSION ATMOSPHERE_RELEASE_VERSION_MAJOR, ATMOSPHERE_RELEASE_VERSION_MINOR, ATMOSPHERE_RELEASE_VERSION_MICRO
|
||||||
|
|
||||||
#define ATMOSPHERE_SUPPORTED_HOS_VERSION_MAJOR 16
|
#define ATMOSPHERE_SUPPORTED_HOS_VERSION_MAJOR 16
|
||||||
#define ATMOSPHERE_SUPPORTED_HOS_VERSION_MINOR 0
|
#define ATMOSPHERE_SUPPORTED_HOS_VERSION_MINOR 0
|
||||||
#define ATMOSPHERE_SUPPORTED_HOS_VERSION_MICRO 3
|
#define ATMOSPHERE_SUPPORTED_HOS_VERSION_MICRO 2
|
||||||
|
@ -76,9 +76,8 @@
|
|||||||
#define ATMOSPHERE_TARGET_FIRMWARE_16_0_0 ATMOSPHERE_TARGET_FIRMWARE(16, 0, 0)
|
#define ATMOSPHERE_TARGET_FIRMWARE_16_0_0 ATMOSPHERE_TARGET_FIRMWARE(16, 0, 0)
|
||||||
#define ATMOSPHERE_TARGET_FIRMWARE_16_0_1 ATMOSPHERE_TARGET_FIRMWARE(16, 0, 1)
|
#define ATMOSPHERE_TARGET_FIRMWARE_16_0_1 ATMOSPHERE_TARGET_FIRMWARE(16, 0, 1)
|
||||||
#define ATMOSPHERE_TARGET_FIRMWARE_16_0_2 ATMOSPHERE_TARGET_FIRMWARE(16, 0, 2)
|
#define ATMOSPHERE_TARGET_FIRMWARE_16_0_2 ATMOSPHERE_TARGET_FIRMWARE(16, 0, 2)
|
||||||
#define ATMOSPHERE_TARGET_FIRMWARE_16_0_3 ATMOSPHERE_TARGET_FIRMWARE(16, 0, 3)
|
|
||||||
|
|
||||||
#define ATMOSPHERE_TARGET_FIRMWARE_CURRENT ATMOSPHERE_TARGET_FIRMWARE_16_0_3
|
#define ATMOSPHERE_TARGET_FIRMWARE_CURRENT ATMOSPHERE_TARGET_FIRMWARE_16_0_2
|
||||||
|
|
||||||
#define ATMOSPHERE_TARGET_FIRMWARE_MIN ATMOSPHERE_TARGET_FIRMWARE(0, 0, 0)
|
#define ATMOSPHERE_TARGET_FIRMWARE_MIN ATMOSPHERE_TARGET_FIRMWARE(0, 0, 0)
|
||||||
#define ATMOSPHERE_TARGET_FIRMWARE_MAX ATMOSPHERE_TARGET_FIRMWARE_CURRENT
|
#define ATMOSPHERE_TARGET_FIRMWARE_MAX ATMOSPHERE_TARGET_FIRMWARE_CURRENT
|
||||||
@ -147,7 +146,6 @@ namespace ams {
|
|||||||
TargetFirmware_16_0_0 = ATMOSPHERE_TARGET_FIRMWARE_16_0_0,
|
TargetFirmware_16_0_0 = ATMOSPHERE_TARGET_FIRMWARE_16_0_0,
|
||||||
TargetFirmware_16_0_1 = ATMOSPHERE_TARGET_FIRMWARE_16_0_1,
|
TargetFirmware_16_0_1 = ATMOSPHERE_TARGET_FIRMWARE_16_0_1,
|
||||||
TargetFirmware_16_0_2 = ATMOSPHERE_TARGET_FIRMWARE_16_0_2,
|
TargetFirmware_16_0_2 = ATMOSPHERE_TARGET_FIRMWARE_16_0_2,
|
||||||
TargetFirmware_16_0_3 = ATMOSPHERE_TARGET_FIRMWARE_16_0_3,
|
|
||||||
|
|
||||||
TargetFirmware_Current = ATMOSPHERE_TARGET_FIRMWARE_CURRENT,
|
TargetFirmware_Current = ATMOSPHERE_TARGET_FIRMWARE_CURRENT,
|
||||||
|
|
||||||
|
@ -54,8 +54,7 @@ namespace ams::mitm::fs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* We want to mitm sdb, to support sd-romfs redirection of common system archives (like system font, etc). */
|
/* We want to mitm sdb, to support sd-romfs redirection of common system archives (like system font, etc). */
|
||||||
/* NOTE: In 16.0.0+, this was moved to glue. */
|
if (program_id == ncm::SystemProgramId::Sdb) {
|
||||||
if (program_id == ncm::SystemProgramId::Sdb || program_id == ncm::SystemProgramId::Glue) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -713,8 +713,4 @@ namespace ams::pm::impl {
|
|||||||
R_RETURN(resource::GetResourceLimitValues(out_cur_val, out_lim_val, static_cast<ResourceLimitGroup>(group), static_cast<svc::LimitableResource>(resource)));
|
R_RETURN(resource::GetResourceLimitValues(out_cur_val, out_lim_val, static_cast<ResourceLimitGroup>(group), static_cast<svc::LimitableResource>(resource)));
|
||||||
}
|
}
|
||||||
|
|
||||||
Result BoostSystemMemoryResourceLimitForMitm(u64 boost_size) {
|
|
||||||
R_RETURN(resource::BoostSystemMemoryResourceLimitForMitm(boost_size));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -55,6 +55,5 @@ namespace ams::pm::impl {
|
|||||||
Result GetAppletCurrentResourceLimitValues(pm::ResourceLimitValues *out);
|
Result GetAppletCurrentResourceLimitValues(pm::ResourceLimitValues *out);
|
||||||
Result GetAppletPeakResourceLimitValues(pm::ResourceLimitValues *out);
|
Result GetAppletPeakResourceLimitValues(pm::ResourceLimitValues *out);
|
||||||
Result AtmosphereGetCurrentLimitInfo(s64 *out_cur_val, s64 *out_lim_val, u32 group, u32 resource);
|
Result AtmosphereGetCurrentLimitInfo(s64 *out_cur_val, s64 *out_lim_val, u32 group, u32 resource);
|
||||||
Result BoostSystemMemoryResourceLimitForMitm(u64 boost_size);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -52,15 +52,8 @@ namespace ams::pm::resource {
|
|||||||
constinit os::SdkMutex g_resource_limit_lock;
|
constinit os::SdkMutex g_resource_limit_lock;
|
||||||
constinit os::NativeHandle g_resource_limit_handles[ResourceLimitGroup_Count];
|
constinit os::NativeHandle g_resource_limit_handles[ResourceLimitGroup_Count];
|
||||||
constinit spl::MemoryArrangement g_memory_arrangement = spl::MemoryArrangement_Standard;
|
constinit spl::MemoryArrangement g_memory_arrangement = spl::MemoryArrangement_Standard;
|
||||||
constinit u64 g_extra_threads_available[ResourceLimitGroup_Count];
|
|
||||||
|
|
||||||
constinit os::SdkMutex g_system_memory_boost_lock;
|
|
||||||
constinit u64 g_system_memory_boost_size = 0;
|
constinit u64 g_system_memory_boost_size = 0;
|
||||||
constinit u64 g_system_memory_boost_size_for_mitm = 0;
|
constinit u64 g_extra_threads_available[ResourceLimitGroup_Count];
|
||||||
|
|
||||||
ALWAYS_INLINE u64 GetCurrentSystemMemoryBoostSize() {
|
|
||||||
return g_system_memory_boost_size + g_system_memory_boost_size_for_mitm;
|
|
||||||
}
|
|
||||||
|
|
||||||
constinit u64 g_resource_limits[ResourceLimitGroup_Count][svc::LimitableResource_Count] = {
|
constinit u64 g_resource_limits[ResourceLimitGroup_Count][svc::LimitableResource_Count] = {
|
||||||
[ResourceLimitGroup_System] = {
|
[ResourceLimitGroup_System] = {
|
||||||
@ -227,47 +220,6 @@ namespace ams::pm::resource {
|
|||||||
R_SUCCEED();
|
R_SUCCEED();
|
||||||
}
|
}
|
||||||
|
|
||||||
Result BoostSystemMemoryResourceLimitLocked(u64 normal_boost, u64 mitm_boost) {
|
|
||||||
/* Check pre-conditions. */
|
|
||||||
AMS_ASSERT(g_system_memory_boost_lock.IsLockedByCurrentThread());
|
|
||||||
|
|
||||||
/* Determine total boost. */
|
|
||||||
const u64 boost_size = normal_boost + mitm_boost;
|
|
||||||
|
|
||||||
/* Don't allow all application memory to be taken away. */
|
|
||||||
R_UNLESS(boost_size <= g_memory_resource_limits[g_memory_arrangement][ResourceLimitGroup_Application], pm::ResultInvalidSize());
|
|
||||||
|
|
||||||
const u64 new_app_size = g_memory_resource_limits[g_memory_arrangement][ResourceLimitGroup_Application] - boost_size;
|
|
||||||
{
|
|
||||||
std::scoped_lock lk(g_resource_limit_lock);
|
|
||||||
|
|
||||||
if (hos::GetVersion() >= hos::Version_5_0_0) {
|
|
||||||
/* Starting in 5.0.0, PM does not allow for only one of the sets to fail. */
|
|
||||||
if (boost_size < GetCurrentSystemMemoryBoostSize()) {
|
|
||||||
R_TRY(svc::SetUnsafeLimit(boost_size));
|
|
||||||
R_ABORT_UNLESS(SetMemoryResourceLimitLimitValue(ResourceLimitGroup_Application, new_app_size));
|
|
||||||
} else {
|
|
||||||
R_TRY(SetMemoryResourceLimitLimitValue(ResourceLimitGroup_Application, new_app_size));
|
|
||||||
R_ABORT_UNLESS(svc::SetUnsafeLimit(boost_size));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
const u64 new_sys_size = g_memory_resource_limits[g_memory_arrangement][ResourceLimitGroup_System] + boost_size;
|
|
||||||
if (boost_size < GetCurrentSystemMemoryBoostSize()) {
|
|
||||||
R_TRY(SetMemoryResourceLimitLimitValue(ResourceLimitGroup_System, new_sys_size));
|
|
||||||
R_TRY(SetMemoryResourceLimitLimitValue(ResourceLimitGroup_Application, new_app_size));
|
|
||||||
} else {
|
|
||||||
R_TRY(SetMemoryResourceLimitLimitValue(ResourceLimitGroup_Application, new_app_size));
|
|
||||||
R_TRY(SetMemoryResourceLimitLimitValue(ResourceLimitGroup_System, new_sys_size));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
g_system_memory_boost_size = normal_boost;
|
|
||||||
g_system_memory_boost_size_for_mitm = mitm_boost;
|
|
||||||
}
|
|
||||||
|
|
||||||
R_SUCCEED();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Resource API. */
|
/* Resource API. */
|
||||||
@ -400,19 +352,37 @@ namespace ams::pm::resource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Result BoostSystemMemoryResourceLimit(u64 boost_size) {
|
Result BoostSystemMemoryResourceLimit(u64 boost_size) {
|
||||||
/* Ensure only one boost change happens at a time. */
|
/* Don't allow all application memory to be taken away. */
|
||||||
std::scoped_lock lk(g_system_memory_boost_lock);
|
R_UNLESS(boost_size <= g_memory_resource_limits[g_memory_arrangement][ResourceLimitGroup_Application], pm::ResultInvalidSize());
|
||||||
|
|
||||||
/* Boost to the appropriate total amount. */
|
const u64 new_app_size = g_memory_resource_limits[g_memory_arrangement][ResourceLimitGroup_Application] - boost_size;
|
||||||
R_RETURN(BoostSystemMemoryResourceLimitLocked(boost_size, g_system_memory_boost_size_for_mitm));
|
{
|
||||||
|
std::scoped_lock lk(g_resource_limit_lock);
|
||||||
|
|
||||||
|
if (hos::GetVersion() >= hos::Version_5_0_0) {
|
||||||
|
/* Starting in 5.0.0, PM does not allow for only one of the sets to fail. */
|
||||||
|
if (boost_size < g_system_memory_boost_size) {
|
||||||
|
R_TRY(svc::SetUnsafeLimit(boost_size));
|
||||||
|
R_ABORT_UNLESS(SetMemoryResourceLimitLimitValue(ResourceLimitGroup_Application, new_app_size));
|
||||||
|
} else {
|
||||||
|
R_TRY(SetMemoryResourceLimitLimitValue(ResourceLimitGroup_Application, new_app_size));
|
||||||
|
R_ABORT_UNLESS(svc::SetUnsafeLimit(boost_size));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const u64 new_sys_size = g_memory_resource_limits[g_memory_arrangement][ResourceLimitGroup_System] + boost_size;
|
||||||
|
if (boost_size < g_system_memory_boost_size) {
|
||||||
|
R_TRY(SetMemoryResourceLimitLimitValue(ResourceLimitGroup_System, new_sys_size));
|
||||||
|
R_TRY(SetMemoryResourceLimitLimitValue(ResourceLimitGroup_Application, new_app_size));
|
||||||
|
} else {
|
||||||
|
R_TRY(SetMemoryResourceLimitLimitValue(ResourceLimitGroup_Application, new_app_size));
|
||||||
|
R_TRY(SetMemoryResourceLimitLimitValue(ResourceLimitGroup_System, new_sys_size));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Result BoostSystemMemoryResourceLimitForMitm(u64 boost_size) {
|
g_system_memory_boost_size = boost_size;
|
||||||
/* Ensure only one boost change happens at a time. */
|
}
|
||||||
std::scoped_lock lk(g_system_memory_boost_lock);
|
|
||||||
|
|
||||||
/* Boost to the appropriate total amount. */
|
R_SUCCEED();
|
||||||
R_RETURN(BoostSystemMemoryResourceLimitLocked(g_system_memory_boost_size, boost_size));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Result BoostApplicationThreadResourceLimit() {
|
Result BoostApplicationThreadResourceLimit() {
|
||||||
|
@ -24,8 +24,6 @@ namespace ams::pm::resource {
|
|||||||
Result BoostApplicationThreadResourceLimit();
|
Result BoostApplicationThreadResourceLimit();
|
||||||
Result BoostSystemThreadResourceLimit();
|
Result BoostSystemThreadResourceLimit();
|
||||||
|
|
||||||
Result BoostSystemMemoryResourceLimitForMitm(u64 boost_size);
|
|
||||||
|
|
||||||
os::NativeHandle GetResourceLimitHandle(ResourceLimitGroup group);
|
os::NativeHandle GetResourceLimitHandle(ResourceLimitGroup group);
|
||||||
os::NativeHandle GetResourceLimitHandle(const ldr::ProgramInfo *info);
|
os::NativeHandle GetResourceLimitHandle(const ldr::ProgramInfo *info);
|
||||||
|
|
||||||
|
@ -87,8 +87,4 @@ namespace ams::pm {
|
|||||||
R_RETURN(impl::BoostSystemThreadResourceLimit());
|
R_RETURN(impl::BoostSystemThreadResourceLimit());
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ShellService::AtmosphereBoostSystemMemoryResourceLimitForMitm(u64 boost_size) {
|
|
||||||
R_RETURN(impl::BoostSystemMemoryResourceLimitForMitm(boost_size));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -34,9 +34,6 @@ namespace ams::pm {
|
|||||||
Result BoostApplicationThreadResourceLimit();
|
Result BoostApplicationThreadResourceLimit();
|
||||||
void GetBootFinishedEventHandle(sf::OutCopyHandle out);
|
void GetBootFinishedEventHandle(sf::OutCopyHandle out);
|
||||||
Result BoostSystemThreadResourceLimit();
|
Result BoostSystemThreadResourceLimit();
|
||||||
|
|
||||||
/* Atmosphere extension command implementations. */
|
|
||||||
Result AtmosphereBoostSystemMemoryResourceLimitForMitm(u64 boost_size);
|
|
||||||
};
|
};
|
||||||
static_assert(pm::impl::IsIShellInterface<ShellService>);
|
static_assert(pm::impl::IsIShellInterface<ShellService>);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user