diff options
Diffstat (limited to 'os/init/evalinit.b')
| -rw-r--r-- | os/init/evalinit.b | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/os/init/evalinit.b b/os/init/evalinit.b new file mode 100644 index 00000000..1e33c6f9 --- /dev/null +++ b/os/init/evalinit.b @@ -0,0 +1,119 @@ +implement Init; + +# +# ARM evaluator 7t +# + +include "sys.m"; +sys: Sys; +FD, Connection, sprint, Dir: import sys; +print, fprint, open, bind, mount, dial, sleep, read: import sys; + +include "draw.m"; +include "sh.m"; +draw: Draw; +Context: import draw; + +Init: module +{ + init: fn(); +}; + +Logon: module +{ + init: fn(ctxt: ref Context, argv: list of string); +}; + +Bootpreadlen: con 128; + +init() +{ + sys = load Sys Sys->PATH; +# kr = load Keyring Keyring->PATH; +# auth = load Auth Auth->PATH; +# if(auth != nil) +# auth->init(); + + sys->print("**\n** Inferno\n** Vita Nuova\n**\n"); + +# sys->print("Setup boot net services ...\n"); + + # + # Setup what we need to call a server and + # Authenticate + # +# bind("#l", "/net", sys->MREPL); +# bind("#I", "/net", sys->MAFTER); + bind("#c", "/dev", sys->MAFTER); + bind("#r", "/dev", sys->MAFTER); +# nvramfd := sys->open("#r/nvram", sys->ORDWR); +# if(nvramfd != nil){ +# spec = "#Fnvram"; +# if(bind(spec, "/nvfs", sys->MAFTER) < 0) +# print("init: bind %s: %r\n", spec); +# } + +# setsysname(); + + # + # default namespace + # + bind("#c", "/dev", sys->MREPL); # console + bind("#t", "/dev", sys->MAFTER); # serial port + bind("#r", "/dev", sys->MAFTER); # RTC +# if(spec != nil) +# bind(spec, "/nvfs", sys->MBEFORE|sys->MCREATE); # our keys +# bind("#l", "/net", sys->MBEFORE); # ethernet +# bind("#I", "/net", sys->MBEFORE); # TCP/IP + bind("#p", "/prog", sys->MREPL); # prog device + sys->bind("#d", "/fd", Sys->MREPL); + + sys->print("clock...\n"); + setclock(); + + sys->print("logon...\n"); + +# sys->chdir("/usr/inferno"); +# logon := load Logon "/dis/sh.dis"; +# spawn logon->init(dc, nil); + ts := load Sh "/dis/sh.dis"; + ts->init(nil, nil); +} + +setclock() +{ + (ok, dir) := sys->stat("/"); + if (ok < 0) { + print("init: stat /: %r"); + return; + } + + fd := sys->open("/dev/time", sys->OWRITE); + if (fd == nil) { + print("init: open /dev/time: %r"); + return; + } + + # Time is kept as microsecs, atime is in secs + b := array of byte sprint("%d000000", dir.atime); + if (sys->write(fd, b, len b) != len b) + print("init: write /dev/time: %r"); +} + +# +# Set system name from nvram +# +setsysname() +{ + fd := open("/nvfs/ID", sys->OREAD); + if(fd == nil) + return; + fds := open("/dev/sysname", sys->OWRITE); + if(fds == nil) + return; + buf := array[128] of byte; + nr := sys->read(fd, buf, len buf); + if(nr <= 0) + return; + sys->write(fds, buf, nr); +} |
