diff options
author | raj <raj@FreeBSD.org> | 2010-02-25 15:27:13 +0000 |
---|---|---|
committer | raj <raj@FreeBSD.org> | 2010-02-25 15:27:13 +0000 |
commit | fe08a5b895be0640eccbcd4fc0307cab13acf148 (patch) | |
tree | 478aef5889c5057a83a2347ec170beb871dc8fa4 | |
parent | 35653f8771f7726774f64c16dc8d007a14d68a1c (diff) | |
download | FreeBSD-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
-rw-r--r-- | sys/boot/uboot/common/main.c | 25 |
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); |