mirror of
https://github.com/CTCaer/hekate
synced 2024-12-22 11:21:23 +00:00
ianos: Remove sd (un)mount usage
This commit is contained in:
parent
5790c585f5
commit
bb2b339b54
7 changed files with 19 additions and 35 deletions
|
@ -63,26 +63,20 @@ static bool _ianos_read_cb(el_ctx *ctx, void *dest, size_t numberBytes, size_t o
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: Support shared libraries.
|
//TODO: Support shared libraries.
|
||||||
uintptr_t ianos_loader(bool sdmount, char *path, elfType_t type, void *moduleConfig)
|
uintptr_t ianos_loader(char *path, elfType_t type, void *moduleConfig)
|
||||||
{
|
{
|
||||||
|
el_ctx ctx;
|
||||||
uintptr_t epaddr = 0;
|
uintptr_t epaddr = 0;
|
||||||
|
|
||||||
if (sdmount)
|
if (!sd_mount())
|
||||||
{
|
goto elfLoadFinalOut;
|
||||||
if (!sd_mount())
|
|
||||||
goto elfLoadFinalOut;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// Read library.
|
||||||
fileBuf = sd_file_read(path, NULL);
|
fileBuf = sd_file_read(path, NULL);
|
||||||
|
|
||||||
if (sdmount)
|
|
||||||
sd_end();
|
|
||||||
|
|
||||||
if (!fileBuf)
|
if (!fileBuf)
|
||||||
goto elfLoadFinalOut;
|
goto elfLoadFinalOut;
|
||||||
|
|
||||||
|
|
||||||
el_ctx ctx;
|
|
||||||
ctx.pread = _ianos_read_cb;
|
ctx.pread = _ianos_read_cb;
|
||||||
|
|
||||||
if (el_init(&ctx))
|
if (el_init(&ctx))
|
||||||
|
@ -94,7 +88,6 @@ uintptr_t ianos_loader(bool sdmount, char *path, elfType_t type, void *moduleCon
|
||||||
case EXEC_ELF:
|
case EXEC_ELF:
|
||||||
case AR64_ELF:
|
case AR64_ELF:
|
||||||
elfBuf = (void *)DRAM_LIB_ADDR;
|
elfBuf = (void *)DRAM_LIB_ADDR;
|
||||||
sd_end();
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
elfBuf = malloc(ctx.memsz); // Aligned to 0x10 by default.
|
elfBuf = malloc(ctx.memsz); // Aligned to 0x10 by default.
|
||||||
|
@ -123,6 +116,5 @@ elfFreeOut:
|
||||||
fileBuf = NULL;
|
fileBuf = NULL;
|
||||||
|
|
||||||
elfLoadFinalOut:
|
elfLoadFinalOut:
|
||||||
|
|
||||||
return epaddr;
|
return epaddr;
|
||||||
}
|
}
|
|
@ -29,6 +29,6 @@ typedef enum
|
||||||
KEEP_IN_RAM = (1 << 31) // Shared library mask.
|
KEEP_IN_RAM = (1 << 31) // Shared library mask.
|
||||||
} elfType_t;
|
} elfType_t;
|
||||||
|
|
||||||
uintptr_t ianos_loader(bool sdmount, char *path, elfType_t type, void* config);
|
uintptr_t ianos_loader(char *path, elfType_t type, void* config);
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -1474,7 +1474,7 @@ void ipl_main()
|
||||||
sd_mount();
|
sd_mount();
|
||||||
|
|
||||||
// Save sdram lp0 config.
|
// Save sdram lp0 config.
|
||||||
if (!ianos_loader(false, "bootloader/sys/libsys_lp0.bso", DRAM_LIB, (void *)sdram_get_params_patched()))
|
if (!ianos_loader("bootloader/sys/libsys_lp0.bso", DRAM_LIB, (void *)sdram_get_params_patched()))
|
||||||
h_cfg.errors |= ERR_LIBSYS_LP0;
|
h_cfg.errors |= ERR_LIBSYS_LP0;
|
||||||
|
|
||||||
// Train DRAM and switch to max frequency.
|
// Train DRAM and switch to max frequency.
|
||||||
|
|
|
@ -45,7 +45,7 @@ u32 minerva_init()
|
||||||
if (mtc_cfg->init_done == MTC_INIT_MAGIC)
|
if (mtc_cfg->init_done == MTC_INIT_MAGIC)
|
||||||
{
|
{
|
||||||
mtc_cfg->train_mode = OP_PERIODIC_TRAIN; // Retrain if needed.
|
mtc_cfg->train_mode = OP_PERIODIC_TRAIN; // Retrain if needed.
|
||||||
u32 ep_addr = ianos_loader(false, "bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)mtc_cfg);
|
u32 ep_addr = ianos_loader("bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)mtc_cfg);
|
||||||
minerva_cfg = (void *)ep_addr;
|
minerva_cfg = (void *)ep_addr;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -58,7 +58,7 @@ u32 minerva_init()
|
||||||
mtc_tmp.sdram_id = (fuse_read_odm(4) >> 3) & 0x1F;
|
mtc_tmp.sdram_id = (fuse_read_odm(4) >> 3) & 0x1F;
|
||||||
mtc_tmp.init_done = MTC_NEW_MAGIC;
|
mtc_tmp.init_done = MTC_NEW_MAGIC;
|
||||||
|
|
||||||
u32 ep_addr = ianos_loader(false, "bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)&mtc_tmp);
|
u32 ep_addr = ianos_loader("bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)&mtc_tmp);
|
||||||
|
|
||||||
// Ensure that Minerva is new.
|
// Ensure that Minerva is new.
|
||||||
if (mtc_tmp.init_done == MTC_INIT_MAGIC)
|
if (mtc_tmp.init_done == MTC_INIT_MAGIC)
|
||||||
|
@ -79,7 +79,7 @@ u32 minerva_init()
|
||||||
mtc_cfg->sdram_id = (fuse_read_odm(4) >> 3) & 0x1F;
|
mtc_cfg->sdram_id = (fuse_read_odm(4) >> 3) & 0x1F;
|
||||||
mtc_cfg->init_done = MTC_NEW_MAGIC; // Initialize mtc table.
|
mtc_cfg->init_done = MTC_NEW_MAGIC; // Initialize mtc table.
|
||||||
|
|
||||||
u32 ep_addr = ianos_loader(false, "bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)mtc_cfg);
|
u32 ep_addr = ianos_loader("bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)mtc_cfg);
|
||||||
|
|
||||||
// Ensure that Minerva is new.
|
// Ensure that Minerva is new.
|
||||||
if (mtc_cfg->init_done == MTC_INIT_MAGIC)
|
if (mtc_cfg->init_done == MTC_INIT_MAGIC)
|
||||||
|
|
|
@ -63,26 +63,20 @@ static bool _ianos_read_cb(el_ctx *ctx, void *dest, size_t numberBytes, size_t o
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: Support shared libraries.
|
//TODO: Support shared libraries.
|
||||||
uintptr_t ianos_loader(bool sdmount, char *path, elfType_t type, void *moduleConfig)
|
uintptr_t ianos_loader(char *path, elfType_t type, void *moduleConfig)
|
||||||
{
|
{
|
||||||
|
el_ctx ctx;
|
||||||
uintptr_t epaddr = 0;
|
uintptr_t epaddr = 0;
|
||||||
|
|
||||||
if (sdmount)
|
if (!sd_mount())
|
||||||
{
|
goto elfLoadFinalOut;
|
||||||
if (!sd_mount())
|
|
||||||
goto elfLoadFinalOut;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// Read library.
|
||||||
fileBuf = sd_file_read(path, NULL);
|
fileBuf = sd_file_read(path, NULL);
|
||||||
|
|
||||||
if (sdmount)
|
|
||||||
sd_end();
|
|
||||||
|
|
||||||
if (!fileBuf)
|
if (!fileBuf)
|
||||||
goto elfLoadFinalOut;
|
goto elfLoadFinalOut;
|
||||||
|
|
||||||
|
|
||||||
el_ctx ctx;
|
|
||||||
ctx.pread = _ianos_read_cb;
|
ctx.pread = _ianos_read_cb;
|
||||||
|
|
||||||
if (el_init(&ctx))
|
if (el_init(&ctx))
|
||||||
|
@ -94,7 +88,6 @@ uintptr_t ianos_loader(bool sdmount, char *path, elfType_t type, void *moduleCon
|
||||||
case EXEC_ELF:
|
case EXEC_ELF:
|
||||||
case AR64_ELF:
|
case AR64_ELF:
|
||||||
elfBuf = (void *)DRAM_LIB_ADDR;
|
elfBuf = (void *)DRAM_LIB_ADDR;
|
||||||
sd_end;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
elfBuf = malloc(ctx.memsz); // Aligned to 0x10 by default.
|
elfBuf = malloc(ctx.memsz); // Aligned to 0x10 by default.
|
||||||
|
@ -123,6 +116,5 @@ elfFreeOut:
|
||||||
fileBuf = NULL;
|
fileBuf = NULL;
|
||||||
|
|
||||||
elfLoadFinalOut:
|
elfLoadFinalOut:
|
||||||
|
|
||||||
return epaddr;
|
return epaddr;
|
||||||
}
|
}
|
|
@ -29,6 +29,6 @@ typedef enum
|
||||||
KEEP_IN_RAM = (1 << 31) // Shared library mask.
|
KEEP_IN_RAM = (1 << 31) // Shared library mask.
|
||||||
} elfType_t;
|
} elfType_t;
|
||||||
|
|
||||||
uintptr_t ianos_loader(bool sdmount, char *path, elfType_t type, void* config);
|
uintptr_t ianos_loader(char *path, elfType_t type, void* config);
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -45,7 +45,7 @@ u32 minerva_init()
|
||||||
if (mtc_cfg->init_done == MTC_INIT_MAGIC)
|
if (mtc_cfg->init_done == MTC_INIT_MAGIC)
|
||||||
{
|
{
|
||||||
mtc_cfg->train_mode = OP_PERIODIC_TRAIN; // Retrain if needed.
|
mtc_cfg->train_mode = OP_PERIODIC_TRAIN; // Retrain if needed.
|
||||||
u32 ep_addr = ianos_loader(false, "bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)mtc_cfg);
|
u32 ep_addr = ianos_loader("bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)mtc_cfg);
|
||||||
minerva_cfg = (void *)ep_addr;
|
minerva_cfg = (void *)ep_addr;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -58,7 +58,7 @@ u32 minerva_init()
|
||||||
mtc_tmp.sdram_id = (fuse_read_odm(4) >> 3) & 0x1F;
|
mtc_tmp.sdram_id = (fuse_read_odm(4) >> 3) & 0x1F;
|
||||||
mtc_tmp.init_done = MTC_NEW_MAGIC;
|
mtc_tmp.init_done = MTC_NEW_MAGIC;
|
||||||
|
|
||||||
u32 ep_addr = ianos_loader(false, "bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)&mtc_tmp);
|
u32 ep_addr = ianos_loader("bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)&mtc_tmp);
|
||||||
|
|
||||||
// Ensure that Minerva is new.
|
// Ensure that Minerva is new.
|
||||||
if (mtc_tmp.init_done == MTC_INIT_MAGIC)
|
if (mtc_tmp.init_done == MTC_INIT_MAGIC)
|
||||||
|
@ -79,7 +79,7 @@ u32 minerva_init()
|
||||||
mtc_cfg->sdram_id = (fuse_read_odm(4) >> 3) & 0x1F;
|
mtc_cfg->sdram_id = (fuse_read_odm(4) >> 3) & 0x1F;
|
||||||
mtc_cfg->init_done = MTC_NEW_MAGIC; // Initialize mtc table.
|
mtc_cfg->init_done = MTC_NEW_MAGIC; // Initialize mtc table.
|
||||||
|
|
||||||
u32 ep_addr = ianos_loader(false, "bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)mtc_cfg);
|
u32 ep_addr = ianos_loader("bootloader/sys/libsys_minerva.bso", DRAM_LIB, (void *)mtc_cfg);
|
||||||
|
|
||||||
// Ensure that Minerva is new.
|
// Ensure that Minerva is new.
|
||||||
if (mtc_cfg->init_done == MTC_INIT_MAGIC)
|
if (mtc_cfg->init_done == MTC_INIT_MAGIC)
|
||||||
|
|
Loading…
Reference in a new issue