summaryrefslogtreecommitdiffstats
path: root/sys/boot/uboot/common
diff options
context:
space:
mode:
authorraj <raj@FreeBSD.org>2010-02-25 15:27:13 +0000
committerraj <raj@FreeBSD.org>2010-02-25 15:27:13 +0000
commitfe08a5b895be0640eccbcd4fc0307cab13acf148 (patch)
tree478aef5889c5057a83a2347ec170beb871dc8fa4 /sys/boot/uboot/common
parent35653f8771f7726774f64c16dc8d007a14d68a1c (diff)
downloadFreeBSD-src-fe08a5b895be0640eccbcd4fc0307cab13acf148.zip
FreeBSD-src-fe08a5b895be0640eccbcd4fc0307cab13acf148.tar.gz
Let loader(8) for U-Boot use default storage more flexibly.
Obtained from: Semihalf MFC after: 1 week
Diffstat (limited to 'sys/boot/uboot/common')
-rw-r--r--sys/boot/uboot/common/main.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/sys/boot/uboot/common/main.c b/sys/boot/uboot/common/main.c
index 1ebb097..7d068ee 100644
--- a/sys/boot/uboot/common/main.c
+++ b/sys/boot/uboot/common/main.c
@@ -117,6 +117,7 @@ main(void)
{
struct api_signature *sig = NULL;
int i;
+ struct open_file f;
if (!api_search_sig(&sig))
return (-1);
@@ -168,18 +169,28 @@ main(void)
printf("(%s, %s)\n", bootprog_maker, bootprog_date);
meminfo();
- /* XXX only support netbooting for now */
- for (i = 0; devsw[i] != NULL; i++)
+ for (i = 0; devsw[i] != NULL; i++) {
+ printf("\nDevice %d: %s\n", i, devsw[i]->dv_name);
+
+ currdev.d_dev = devsw[i];
+ currdev.d_type = currdev.d_dev->dv_type;
+ currdev.d_unit = 0;
+
+ if (strncmp(devsw[i]->dv_name, "disk",
+ strlen(devsw[i]->dv_name)) == 0) {
+ f.f_devdata = &currdev;
+ currdev.d_disk.pnum = 0;
+ if (devsw[i]->dv_open(&f,&currdev) == 0)
+ break;
+ }
+
if (strncmp(devsw[i]->dv_name, "net",
strlen(devsw[i]->dv_name)) == 0)
break;
+ }
if (devsw[i] == NULL)
- panic("no network devices?!");
-
- currdev.d_dev = devsw[i];
- currdev.d_type = currdev.d_dev->dv_type;
- currdev.d_unit = 0;
+ panic("No boot device found!");
env_setenv("currdev", EV_VOLATILE, uboot_fmtdev(&currdev),
uboot_setcurrdev, env_nounset);
OpenPOWER on IntegriCloud