From c77b76fbd2285081328844a65ae01bd52024b739 Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Sun, 15 Nov 2020 22:45:31 -0800 Subject: [PATCH] emummc: add GetSocType/GetHardwareType utils --- emummc/source/nx/smc.c | 29 +++++++++++++++++++++++++++++ emummc/source/nx/smc.h | 17 +++++++++++++++++ emummc/source/utils/fatal.h | 1 + 3 files changed, 47 insertions(+) diff --git a/emummc/source/nx/smc.c b/emummc/source/nx/smc.c index dcb9fce87..17d566164 100644 --- a/emummc/source/nx/smc.c +++ b/emummc/source/nx/smc.c @@ -59,6 +59,35 @@ Result smcGetConfig(SplConfigItem config_item, u64 *out_config) return rc; } +SplHardwareType splGetHardwareType(void) +{ + u64 value; + Result rc = smcGetConfig(SplConfigItem_HardwareType, &value); + if (rc != 0) + { + fatal_abort(Fatal_BadResult); + } + return (SplHardwareType)value; +} + +SplSocType splGetSocType(void) +{ + switch (splGetHardwareType()) + { + case SplHardwareType_Icosa: + case SplHardwareType_Copper: + return SplSocType_Erista; + case SplHardwareType_Hoag: + case SplHardwareType_Iowa: + case SplHardwareType_Calcio: + case SplHardwareType_Five: + return SplSocType_Mariko; + default: + fatal_abort(Fatal_InvalidEnum); + } +} + + Result smcCopyToIram(uintptr_t iram_addr, const void *src_addr, u32 size) { SecmonArgs args; diff --git a/emummc/source/nx/smc.h b/emummc/source/nx/smc.h index 215877f97..08572002c 100644 --- a/emummc/source/nx/smc.h +++ b/emummc/source/nx/smc.h @@ -37,6 +37,20 @@ typedef enum { SplConfigItem_HasRcmBugPatch = 65004, } SplConfigItem; +typedef enum { + SplSocType_Erista = 0, + SplSocType_Mariko = 1, +} SplSocType; + +typedef enum { + SplHardwareType_Icosa = 0, + SplHardwareType_Copper = 1, + SplHardwareType_Hoag = 2, + SplHardwareType_Iowa = 3, + SplHardwareType_Calcio = 4, + SplHardwareType_Five = 5, +} SplHardwareType; + typedef enum { EXO_EMUMMC_TYPE_NONE = 0, EXO_EMUMMC_TYPE_PARTITION = 1, @@ -69,6 +83,9 @@ typedef struct { Result smcGetConfig(SplConfigItem config_item, u64 *out_config); +SplHardwareType splGetHardwareType(void); +SplSocType splGetSocType(void); + void smcRebootToRcm(void); void smcRebootToIramPayload(void); void smcPerformShutdown(void); diff --git a/emummc/source/utils/fatal.h b/emummc/source/utils/fatal.h index 7843b54d4..977c713ef 100644 --- a/emummc/source/utils/fatal.h +++ b/emummc/source/utils/fatal.h @@ -35,6 +35,7 @@ enum FatalReason Fatal_FatfsMount, Fatal_FatfsFileOpen, Fatal_FatfsMemExhaustion, + Fatal_InvalidEnum, Fatal_Max };