diff options
author | peter <peter@FreeBSD.org> | 1999-04-16 21:22:55 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 1999-04-16 21:22:55 +0000 |
commit | 087d4857e56f150a8f549600150404f273efb895 (patch) | |
tree | cf4e27432c59d956f4e5784207180115ee8fef9d /sys/boot/alpha/boot1 | |
parent | c5fe612b8411a32a8e6e426fc1a70cba0cca3d31 (diff) | |
download | FreeBSD-src-087d4857e56f150a8f549600150404f273efb895.zip FreeBSD-src-087d4857e56f150a8f549600150404f273efb895.tar.gz |
Bring the 'new-bus' to the i386. This extensively changes the way the
i386 platform boots, it is no longer ISA-centric, and is fully dynamic.
Most old drivers compile and run without modification via 'compatability
shims' to enable a smoother transition. eisa, isapnp and pccard* are
not yet using the new resource manager. Once fully converted, all drivers
will be loadable, including PCI and ISA.
(Some other changes appear to have snuck in, including a port of Soren's
ATA driver to the Alpha. Soren, back this out if you need to.)
This is a checkpoint of work-in-progress, but is quite functional.
The bulk of the work was done over the last few years by Doug Rabson and
Garrett Wollman.
Approved by: core
Diffstat (limited to 'sys/boot/alpha/boot1')
-rw-r--r-- | sys/boot/alpha/boot1/boot1.c | 54 |
1 files changed, 51 insertions, 3 deletions
diff --git a/sys/boot/alpha/boot1/boot1.c b/sys/boot/alpha/boot1/boot1.c index 9eac7ec..7346c5b 100644 --- a/sys/boot/alpha/boot1/boot1.c +++ b/sys/boot/alpha/boot1/boot1.c @@ -1,5 +1,5 @@ /* - * $Id: boot1.c,v 1.2 1998/09/26 10:51:36 dfr Exp $ + * $Id: boot1.c,v 1.3 1998/10/18 19:05:07 dfr Exp $ * From $NetBSD: bootxx.c,v 1.4 1997/09/06 14:08:29 drochner Exp $ */ @@ -49,6 +49,18 @@ putchar(int c) prom_putchar(c); } +int +getchar() +{ + return prom_getchar(); +} + +int +ischar() +{ + return prom_poll(); +} + void puts(const char *s) { @@ -150,9 +162,37 @@ devclose() } void +getfilename(char *filename) +{ + int c; + char *p; + + puts("Boot: "); + + while ((c = getchar()) != '\n') { + if (c == '\b') { + if (p > filename) { + puts("\b \b"); + p--; + } + } else + *p++ = c; + } + *p = '\0'; + return; +} + +void loadfile(char *name, char *addr) { int n; + char filename[512]; + char *p; + + restart: + puts("Loading "); + puts(name); + puts("\n"); if (openrd(name)) { puts("Can't open file "); @@ -161,9 +201,17 @@ loadfile(char *name, char *addr) halt(); } + p = addr; do { - n = readit(addr, 1024); - addr += n; + n = readit(p, 1024); + p += n; + if (ischar()) { + puts("Stop!\n"); + devclose(); + getfilename(filename); + name = filename; + goto restart; + } twiddle(); } while (n > 0); |