ams_mitm: Implement set:sys firmwareversion mitm

This commit is contained in:
Michael Scire
2019-11-22 02:05:59 -08:00
committed by SciresM
parent 8764d94fd9
commit 55610694c8
7 changed files with 315 additions and 5 deletions

View File

@@ -172,4 +172,52 @@ namespace ams::settings {
return 0 <= rc && rc < RegionCode_Count;
}
/* This needs to be defined separately from libnx's so that it can inherit from sf::LargeData. */
struct FirmwareVersion : public sf::LargeData {
u8 major;
u8 minor;
u8 micro;
u8 padding1;
u8 revision_major;
u8 revision_minor;
u8 padding2;
u8 padding3;
char platform[0x20];
char version_hash[0x40];
char display_version[0x18];
char display_title[0x80];
constexpr inline u32 GetVersion() const {
return (static_cast<u32>(major) << 16) | (static_cast<u32>(minor) << 8) | (static_cast<u32>(micro) << 0);
}
};
static_assert(std::is_pod<FirmwareVersion>::value);
static_assert(sizeof(FirmwareVersion) == sizeof(::SetSysFirmwareVersion));
constexpr inline bool operator==(const FirmwareVersion &lhs, const FirmwareVersion &rhs) {
return lhs.GetVersion() == rhs.GetVersion();
}
constexpr inline bool operator!=(const FirmwareVersion &lhs, const FirmwareVersion &rhs) {
return !(lhs == rhs);
}
constexpr inline bool operator<(const FirmwareVersion &lhs, const FirmwareVersion &rhs) {
return lhs.GetVersion() < rhs.GetVersion();
}
constexpr inline bool operator>=(const FirmwareVersion &lhs, const FirmwareVersion &rhs) {
return !(lhs < rhs);
}
constexpr inline bool operator<=(const FirmwareVersion &lhs, const FirmwareVersion &rhs) {
return lhs.GetVersion() <= rhs.GetVersion();
}
constexpr inline bool operator>(const FirmwareVersion &lhs, const FirmwareVersion &rhs) {
return !(lhs <= rhs);
}
}

View File

@@ -57,6 +57,7 @@ namespace ams::spl::smc {
Result AtmosphereCopyFromIram(void *dram_dst, uintptr_t iram_src, size_t size);
Result AtmosphereReadWriteRegister(uint64_t address, uint32_t mask, uint32_t value, uint32_t *out_value);
Result AtmosphereWriteAddress(void *dst, const void *src, size_t size);
Result AtmosphereGetEmummcConfig(void *out_config, void *out_paths, u32 storage_id);
/* Helpers. */
inline Result SetConfig(SplConfigItem which, const u64 value) {