summaryrefslogtreecommitdiffstats
path: root/sys/boot/alpha/boot1/boot1.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/boot/alpha/boot1/boot1.c')
-rw-r--r--sys/boot/alpha/boot1/boot1.c64
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();
}
OpenPOWER on IntegriCloud