diff options
Diffstat (limited to 'sys/boot/alpha/boot1/boot1.c')
-rw-r--r-- | sys/boot/alpha/boot1/boot1.c | 64 |
1 files changed, 43 insertions, 21 deletions
diff --git a/sys/boot/alpha/boot1/boot1.c b/sys/boot/alpha/boot1/boot1.c index d7a1a04..20a8f5d 100644 --- a/sys/boot/alpha/boot1/boot1.c +++ b/sys/boot/alpha/boot1/boot1.c @@ -32,18 +32,41 @@ #include <string.h> #include <sys/param.h> +#include <sys/dirent.h> #include <machine/prom.h> #include <machine/rpb.h> #define DEBUGxx +void puts(const char *s); +void puthex(u_long v); +static int dskread(void *, u_int64_t, size_t); + +#define printf(...) \ +while (0) + +#define memcpy(dst, src, len) \ +bcopy(src, dst, len) + +#include "ufsread.c" + extern end[]; int errno; char *heap = (char*) end; void +bcopy(const void *src, void *dst, size_t len) +{ + const char *s; + char *d; + + for (d = dst, s = src; len; len--) + *d++ = *s++; +} + +void putchar(int c) { if (c == '\n') @@ -70,20 +93,6 @@ puts(const char *s) putchar(*s++); } -void * -malloc(size_t size) -{ - char *p = heap; - size = (size + 7) & ~7; - heap += size; - return p; -} - -void -free(void * p) -{ -} - void panic(const char *message, ...) { @@ -124,6 +133,7 @@ puthex(u_long v) int digit; char hex[] = "0123456789abcdef"; + puts("0x"); if (!v) { puts("0"); return; @@ -138,11 +148,11 @@ puthex(u_long v) #endif -void -devread(char *buf, int block, size_t size) +int +dskread(void *buf, u_int64_t block, size_t size) { #ifdef DEBUG - puts("devread("); + puts("dskread("); puthex((u_long)buf); puts(","); puthex(block); @@ -151,7 +161,8 @@ devread(char *buf, int block, size_t size) puts(")\n"); #endif - prom_read(prom_fd, size, buf, block); + prom_read(prom_fd, size * DEV_BSIZE, buf, block); + return (0); } static inline void @@ -189,17 +200,22 @@ getfilename(char *filename, const char *defname) return; } +static struct dmadat __dmadat; + static inline void loadfile(char *name, char *addr) { int n; char *p; + ino_t ino; puts("Loading "); puts(name); puts("\n"); - if (openrd(name)) { + dmadat = &__dmadat; + + if (devopen() || (ino = lookup(name)) == 0) { puts("Can't open file "); puts(name); puts("\n"); @@ -208,10 +224,16 @@ loadfile(char *name, char *addr) p = addr; do { - n = readit(p, 1024); + n = fsread(ino, p, VBLKSIZE); + if (n < 0) { + puts("Can't read file "); + puts(name); + puts("\n"); + halt(); + } p += n; twiddle(); - } while (n > 0); + } while (n == VBLKSIZE); devclose(); } |