mirror of
https://github.com/CTCaer/hekate
synced 2024-12-22 19:31:12 +00:00
autoboot: Add forced boot from ID
By using the key `id=` with a max 7 ASCII id, hekate will search all inis automatically and pinpoint the boot entry with that id. After that it forces a boot from this one.
This commit is contained in:
parent
6ec871ad5f
commit
31db2735ce
2 changed files with 58 additions and 12 deletions
|
@ -727,6 +727,29 @@ void nyx_load_run()
|
||||||
(*nyx_ptr)();
|
(*nyx_ptr)();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ini_sec_t *get_ini_sec_from_id(ini_sec_t *ini_sec, char *bootlogoCustomEntry)
|
||||||
|
{
|
||||||
|
ini_sec_t *cfg_sec = NULL;
|
||||||
|
|
||||||
|
LIST_FOREACH_ENTRY(ini_kv_t, kv, &ini_sec->kvs, link)
|
||||||
|
{
|
||||||
|
if (!strcmp("id", kv->key))
|
||||||
|
if (!strcmp(b_cfg.id, kv->val))
|
||||||
|
cfg_sec = ini_sec;
|
||||||
|
if (!strcmp("logopath", kv->key))
|
||||||
|
bootlogoCustomEntry = kv->val;
|
||||||
|
if (!strcmp("emummc_force_disable", kv->key))
|
||||||
|
h_cfg.emummc_force_disable = atoi(kv->val);
|
||||||
|
}
|
||||||
|
if (!cfg_sec)
|
||||||
|
{
|
||||||
|
bootlogoCustomEntry = NULL;
|
||||||
|
h_cfg.emummc_force_disable = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return cfg_sec;
|
||||||
|
}
|
||||||
|
|
||||||
void auto_launch_firmware()
|
void auto_launch_firmware()
|
||||||
{
|
{
|
||||||
if(b_cfg.extra_cfg & EXTRA_CFG_NYX_DUMP)
|
if(b_cfg.extra_cfg & EXTRA_CFG_NYX_DUMP)
|
||||||
|
@ -742,6 +765,9 @@ void auto_launch_firmware()
|
||||||
u8 *BOOTLOGO = NULL;
|
u8 *BOOTLOGO = NULL;
|
||||||
char *payload_path = NULL;
|
char *payload_path = NULL;
|
||||||
u32 btn = 0;
|
u32 btn = 0;
|
||||||
|
bool boot_from_id = (b_cfg.boot_cfg & BOOT_CFG_FROM_ID) && (b_cfg.boot_cfg & BOOT_CFG_AUTOBOOT_EN);
|
||||||
|
if (boot_from_id)
|
||||||
|
b_cfg.id[7] = 0;
|
||||||
|
|
||||||
struct _bmp_data
|
struct _bmp_data
|
||||||
{
|
{
|
||||||
|
@ -827,7 +853,9 @@ void auto_launch_firmware()
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (h_cfg.autoboot == boot_entry_id && configEntry)
|
if (boot_from_id)
|
||||||
|
cfg_sec = get_ini_sec_from_id(ini_sec, bootlogoCustomEntry);
|
||||||
|
else if (h_cfg.autoboot == boot_entry_id && configEntry)
|
||||||
{
|
{
|
||||||
cfg_sec = ini_sec;
|
cfg_sec = ini_sec;
|
||||||
LIST_FOREACH_ENTRY(ini_kv_t, kv, &cfg_sec->kvs, link)
|
LIST_FOREACH_ENTRY(ini_kv_t, kv, &cfg_sec->kvs, link)
|
||||||
|
@ -837,8 +865,9 @@ void auto_launch_firmware()
|
||||||
if (!strcmp("emummc_force_disable", kv->key))
|
if (!strcmp("emummc_force_disable", kv->key))
|
||||||
h_cfg.emummc_force_disable = atoi(kv->val);
|
h_cfg.emummc_force_disable = atoi(kv->val);
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
if (cfg_sec)
|
||||||
|
break;
|
||||||
boot_entry_id++;
|
boot_entry_id++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -846,8 +875,11 @@ void auto_launch_firmware()
|
||||||
if (h_cfg.autohosoff && !(b_cfg.boot_cfg & BOOT_CFG_AUTOBOOT_EN))
|
if (h_cfg.autohosoff && !(b_cfg.boot_cfg & BOOT_CFG_AUTOBOOT_EN))
|
||||||
check_power_off_from_hos();
|
check_power_off_from_hos();
|
||||||
|
|
||||||
if (h_cfg.autoboot_list)
|
if (h_cfg.autoboot_list || (boot_from_id && !cfg_sec))
|
||||||
{
|
{
|
||||||
|
if (boot_from_id && cfg_sec)
|
||||||
|
goto skip_list;
|
||||||
|
|
||||||
boot_entry_id = 1;
|
boot_entry_id = 1;
|
||||||
bootlogoCustomEntry = NULL;
|
bootlogoCustomEntry = NULL;
|
||||||
|
|
||||||
|
@ -860,7 +892,9 @@ void auto_launch_firmware()
|
||||||
if (!strcmp(ini_sec_list->name, "config"))
|
if (!strcmp(ini_sec_list->name, "config"))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (h_cfg.autoboot == boot_entry_id)
|
if (boot_from_id)
|
||||||
|
cfg_sec = get_ini_sec_from_id(ini_sec_list, bootlogoCustomEntry);
|
||||||
|
else if (h_cfg.autoboot == boot_entry_id)
|
||||||
{
|
{
|
||||||
h_cfg.emummc_force_disable = false;
|
h_cfg.emummc_force_disable = false;
|
||||||
cfg_sec = ini_sec_list;
|
cfg_sec = ini_sec_list;
|
||||||
|
@ -871,8 +905,9 @@ void auto_launch_firmware()
|
||||||
if (!strcmp("emummc_force_disable", kv->key))
|
if (!strcmp("emummc_force_disable", kv->key))
|
||||||
h_cfg.emummc_force_disable = atoi(kv->val);
|
h_cfg.emummc_force_disable = atoi(kv->val);
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
if (cfg_sec)
|
||||||
|
break;
|
||||||
boot_entry_id++;
|
boot_entry_id++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -881,7 +916,7 @@ void auto_launch_firmware()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
skip_list:
|
||||||
// Add missing configuration entry.
|
// Add missing configuration entry.
|
||||||
if (!configEntry)
|
if (!configEntry)
|
||||||
create_config_entry();
|
create_config_entry();
|
||||||
|
@ -991,7 +1026,10 @@ void auto_launch_firmware()
|
||||||
out:
|
out:
|
||||||
gfx_con.mute = false;
|
gfx_con.mute = false;
|
||||||
|
|
||||||
b_cfg.boot_cfg &= ~(BOOT_CFG_AUTOBOOT_EN | BOOT_CFG_FROM_LAUNCH);
|
// Clear boot reasons from binary.
|
||||||
|
if (b_cfg.boot_cfg & BOOT_CFG_FROM_ID)
|
||||||
|
memset(b_cfg.xt_str, 0, sizeof(b_cfg.xt_str));
|
||||||
|
b_cfg.boot_cfg &= ~(BOOT_CFG_AUTOBOOT_EN | BOOT_CFG_FROM_LAUNCH | BOOT_CFG_FROM_ID);
|
||||||
h_cfg.emummc_force_disable = false;
|
h_cfg.emummc_force_disable = false;
|
||||||
|
|
||||||
nyx_load_run();
|
nyx_load_run();
|
||||||
|
|
|
@ -53,6 +53,7 @@ typedef int bool;
|
||||||
|
|
||||||
#define BOOT_CFG_AUTOBOOT_EN (1 << 0)
|
#define BOOT_CFG_AUTOBOOT_EN (1 << 0)
|
||||||
#define BOOT_CFG_FROM_LAUNCH (1 << 1)
|
#define BOOT_CFG_FROM_LAUNCH (1 << 1)
|
||||||
|
#define BOOT_CFG_FROM_ID (1 << 2)
|
||||||
#define BOOT_CFG_SEPT_RUN (1 << 7)
|
#define BOOT_CFG_SEPT_RUN (1 << 7)
|
||||||
|
|
||||||
#define EXTRA_CFG_KEYS (1 << 0)
|
#define EXTRA_CFG_KEYS (1 << 0)
|
||||||
|
@ -64,11 +65,18 @@ typedef int bool;
|
||||||
|
|
||||||
typedef struct __attribute__((__packed__)) _boot_cfg_t
|
typedef struct __attribute__((__packed__)) _boot_cfg_t
|
||||||
{
|
{
|
||||||
u8 boot_cfg;
|
u8 boot_cfg;
|
||||||
u8 autoboot;
|
u8 autoboot;
|
||||||
u8 autoboot_list;
|
u8 autoboot_list;
|
||||||
u8 extra_cfg;
|
u8 extra_cfg;
|
||||||
u8 rsvd[128];
|
union
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
char id[8];
|
||||||
|
};
|
||||||
|
u8 xt_str[0x80];
|
||||||
|
};
|
||||||
} boot_cfg_t;
|
} boot_cfg_t;
|
||||||
|
|
||||||
typedef struct __attribute__((__packed__)) _ipl_ver_meta_t
|
typedef struct __attribute__((__packed__)) _ipl_ver_meta_t
|
||||||
|
|
Loading…
Reference in a new issue