mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-08 19:11:53 +00:00
bootstd: Allow hunting for bootdevs of a given priority
Add a way to run the hunter function for a particular priority, so that new bootdevs can be found. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
d73420e4fe
commit
79a7d4a61f
3 changed files with 61 additions and 0 deletions
|
@ -742,6 +742,31 @@ int bootdev_hunt(const char *spec, bool show)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int bootdev_hunt_prio(enum bootdev_prio_t prio, bool show)
|
||||||
|
{
|
||||||
|
struct bootdev_hunter *start;
|
||||||
|
int n_ent, i;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
start = ll_entry_start(struct bootdev_hunter, bootdev_hunter);
|
||||||
|
n_ent = ll_entry_count(struct bootdev_hunter, bootdev_hunter);
|
||||||
|
result = 0;
|
||||||
|
|
||||||
|
log_debug("Hunting for priority %d\n", prio);
|
||||||
|
for (i = 0; i < n_ent; i++) {
|
||||||
|
struct bootdev_hunter *info = start + i;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (prio != info->prio)
|
||||||
|
continue;
|
||||||
|
ret = bootdev_hunt_drv(info, i, show);
|
||||||
|
if (ret && ret != -ENOENT)
|
||||||
|
result = ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
void bootdev_list_hunters(struct bootstd_priv *std)
|
void bootdev_list_hunters(struct bootstd_priv *std)
|
||||||
{
|
{
|
||||||
struct bootdev_hunter *orig, *start;
|
struct bootdev_hunter *orig, *start;
|
||||||
|
|
|
@ -284,6 +284,17 @@ void bootdev_list_hunters(struct bootstd_priv *std);
|
||||||
*/
|
*/
|
||||||
int bootdev_hunt(const char *spec, bool show);
|
int bootdev_hunt(const char *spec, bool show);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* bootdev_hunt_prio() - Hunt for bootdevs of a particular priority
|
||||||
|
*
|
||||||
|
* This runs all hunters which can find bootdevs of the given priority.
|
||||||
|
*
|
||||||
|
* @prio: Priority to use
|
||||||
|
* @show: true to show each hunter as it is used
|
||||||
|
* Returns: 0 if OK, -ve on error
|
||||||
|
*/
|
||||||
|
int bootdev_hunt_prio(enum bootdev_prio_t prio, bool show);
|
||||||
|
|
||||||
#if CONFIG_IS_ENABLED(BOOTSTD)
|
#if CONFIG_IS_ENABLED(BOOTSTD)
|
||||||
/**
|
/**
|
||||||
* bootdev_setup_for_dev() - Bind a new bootdev device (deprecated)
|
* bootdev_setup_for_dev() - Bind a new bootdev device (deprecated)
|
||||||
|
|
|
@ -363,3 +363,28 @@ static int bootdev_test_bootable(struct unit_test_state *uts)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
BOOTSTD_TEST(bootdev_test_bootable, UT_TESTF_DM | UT_TESTF_SCAN_FDT);
|
BOOTSTD_TEST(bootdev_test_bootable, UT_TESTF_DM | UT_TESTF_SCAN_FDT);
|
||||||
|
|
||||||
|
/* Check hunting for bootdev of a particular priority */
|
||||||
|
static int bootdev_test_hunt_prio(struct unit_test_state *uts)
|
||||||
|
{
|
||||||
|
test_set_skip_delays(true);
|
||||||
|
|
||||||
|
console_record_reset_enable();
|
||||||
|
ut_assertok(bootdev_hunt_prio(BOOTDEVP_2_SCAN_FAST, false));
|
||||||
|
ut_assert_nextline("scanning bus for devices...");
|
||||||
|
ut_assert_skip_to_line(" Type: Hard Disk");
|
||||||
|
ut_assert_nextlinen(" Capacity:");
|
||||||
|
ut_assert_console_end();
|
||||||
|
|
||||||
|
/* now try a different priority, verbosely */
|
||||||
|
ut_assertok(bootdev_hunt_prio(BOOTDEVP_3_SCAN_SLOW, true));
|
||||||
|
ut_assert_nextline("Hunting with: ide");
|
||||||
|
ut_assert_nextline("Bus 0: not available ");
|
||||||
|
ut_assert_nextline("Hunting with: usb");
|
||||||
|
ut_assert_nextline(
|
||||||
|
"Bus usb@1: scanning bus usb@1 for devices... 5 USB Device(s) found");
|
||||||
|
ut_assert_console_end();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
BOOTSTD_TEST(bootdev_test_hunt_prio, UT_TESTF_DM | UT_TESTF_SCAN_FDT);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue