commit f5398ca09c6f2e047535f27cda2a6bdff3c3c509
parent 05b2cd263e2fa1e71a530f2d50fcf34d17c70601
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Sun, 18 Oct 2020 09:41:46 +0200
os9/arm64: Add isys()
This function is intended for the generic system initialization
such that the code can be shared between all the ports.
Change-Id: I0b4ae0881f56cc40ff104357f67a904b369fafc8
Diffstat:
10 files changed, 28 insertions(+), 42 deletions(-)
diff --git a/include/os9/os9.h b/include/os9/os9.h
@@ -199,6 +199,9 @@ struct win {
extern void *alloc(size_t size);
extern void *allocb(int);
+/* init.c */
+extern void isys(void);
+
/* dlang.c */
extern int debug(void);
@@ -222,7 +225,7 @@ extern noreturn void swtch(Context *ctx);
extern noreturn void trap(Context *ctx);
/* dev functions */
-extern void idev(Mach *);
+extern void idev(void);
extern Chan *devopen(char *name, int mode);
extern int devwrite(Chan *c, void *buf, int n);
extern int devread(Chan *c, void *buf, int n);
diff --git a/src/os9/Makefile b/src/os9/Makefile
@@ -6,6 +6,7 @@ OBJS =\
dlang.o\
sched.o\
alloc.o\
+ init.o\
dev/builtin.o\
DIRS =\
diff --git a/src/os9/arch/arm64/arch.h b/src/os9/arch/arm64/arch.h
@@ -30,7 +30,7 @@ extern void invalltlb(void);
extern void invtlb(uintptr_t);
extern void invdcachesetway(void *);
-extern void icache(Mach *);
+extern void icache(void);
extern void immu(void);
-extern void ifpu(Mach *);
-extern void igic(Mach *);
+extern void ifpu(void);
+extern void igic(void);
diff --git a/src/os9/arch/arm64/cache.c b/src/os9/arch/arm64/cache.c
@@ -89,7 +89,7 @@ invdcache(void)
}
void
-icache(Mach *m)
+icache(void)
{
uint64_t sctlr;
diff --git a/src/os9/arch/arm64/fpu.c b/src/os9/arch/arm64/fpu.c
@@ -16,7 +16,7 @@ fpoff(void)
}
void
-ifpu(Mach *m)
+ifpu(void)
{
fpon();
syswr(FPCR, 0);
diff --git a/src/os9/arch/arm64/gic.c b/src/os9/arch/arm64/gic.c
@@ -4,7 +4,7 @@
#include "arch.h"
void
-igic(Mach *m)
+igic(void)
{
interrupt(ENABLE);
barrier(CODE);
diff --git a/src/os9/arch/arm64/main.c b/src/os9/arch/arm64/main.c
@@ -6,49 +6,31 @@
#include "sysreg.h"
#include "arch.h"
-Chan *console;
-
static void
-info(Mach *m)
+info(void)
{
+ kprint("Booting os9\n");
kprint("os9: version %s\n",
OS9VERSION);
}
-static void
-icons(Mach *m)
+char *
+getconf(char *name)
{
- static char setin[] = "addin #t0/raw\n";
- static char setout[] = "addout #t0/raw\n";
- static char echo[] = "echo on\n";
- static char cooked[] = "cooked on\n";
- Chan *c;
-
- if ((c = devopen("#c/ctl", O_WRITE)) == NULL)
- panic("namec:/dev/cons/ctl write");
- if (devwrite(c, setin, sizeof(setin)) < 0)
- panic("devwrite:setin");
- if (devwrite(c, setout, sizeof(setout)) < 0)
- panic("devwrite:setout");
- if (devwrite(c, echo, sizeof(echo)) < 0)
- panic("devwrite:echo");
- if (devwrite(c, cooked, sizeof(cooked)) < 0)
- panic("devwrite:cooked");
- if (devclose(c) < 0)
- panic("devclose");
+ static char constxt[] =
+ "addin #t0/raw\n"
+ "addout #t0/raw\n"
+ "echo on\n"
+ "cooked on\n";
- if ((console = devopen("#c/raw", O_RDWR)) == NULL)
- panic("namec:#c/raw read");
+ return constxt;
}
void
main(Mach *m)
{
- kprint("Booting os9\n");
-
- ifpu(m);
- igic(m);
- info(m);
-
- panic("out of sync");
+ info();
+ ifpu();
+ igic();
+ isys();
}
diff --git a/src/os9/arch/arm64/panic.c b/src/os9/arch/arm64/panic.c
@@ -79,7 +79,7 @@ dumpstack(Context *ctx)
kprint("%0llx%c", *sp++, (i % 4 == 0) ? '\n' : ' ');
}
-noreturn void
+void
fault(const char *msg, Context *ctx)
{
static int first = 1;
diff --git a/src/os9/dev/dev.c b/src/os9/dev/dev.c
@@ -724,7 +724,7 @@ err0:
}
void
-idev(Mach *m)
+idev(void)
{
Chan *c;
diff --git a/src/os9/dev/devuart.c b/src/os9/dev/devuart.c
@@ -223,7 +223,7 @@ uartlink(Uartphy *phy, Attr *attr)
panic("uartlink1");
siz = sizeof(Uart);
- up = memset(alloc(siz), 0, siz);
+ up = alloc(siz);
up->phy = phy;
uarts[nuarts++] = up;