diff options
Diffstat (limited to 'os/js/rom.c')
| -rw-r--r-- | os/js/rom.c | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/os/js/rom.c b/os/js/rom.c new file mode 100644 index 00000000..a477cfe5 --- /dev/null +++ b/os/js/rom.c @@ -0,0 +1,103 @@ +#include "u.h" +#include "../port/lib.h" +#include "mem.h" +#include "dat.h" +#include "fns.h" +#include "io.h" + +typedef struct Rom Rom; + +struct Rom +{ + uint magic; + uint version; + uint plugin_version; + uint monitor_id; + + void **physmemlist; + void **virtmemlist; + void **availphysmemlist; + void *config_info; + + char **bootcmd; + + uint (*open)(); + uint (*close)(); + + uint (*read_blocks)(); + uint (*write_blocks)(); + + uint (*transmit_pkt)(); + uint (*poll_pkt)(); + + uint (*read_bytes)(); + uint (*write_bytes)(); + uint (*seek)(); + + uchar *input; + uchar *output; + + uchar (*getchar)(); + uchar (*putchar)(); + uchar (*noblock_getchar)(); + uchar (*noblock_putchar)(); + + uchar (*fb_writestr)(char*); + + void (*boot)(char*); + + void (*printf)(char*,...); + + void (*some_kbd_thing)(); + int *ms_count; + void (*exit)(); + void (**vector)(); + void (**interpret)(char*,...); + void *bootparam; + uint (*mac_addr)(); + char **v2_bootpath; + char ** v2_bootargs; + int *v2_stdin; + int *v2_stdout; + void* (*v2_phandle)(); + char* (*v2_allocphys)(); + char* (*v2_freephys)(); + char* (*v2_map_dev)(); + char* (*v2_unmap_dev)(); + ulong (*v2_open)(); + uint (*v2_close)(); + uint (*v2_read)(); + uint (*v2_write)(); + uint (*v2_seek)(); + void (*v2_chain)(); + void (*v2_release)(); + char *(*v3_alloc)(); + int *reserved[14]; + void (*setctxsegmap)(); + int (*v3_startcpu)(); + int (*v3_stopcpu)(); + int (*v3_idlecpu)(); + int (*v3_resumecpu)(); +}; + +Rom *rom; /* open boot rom vector -- assigned by l.s */ + +void +prom_printf(char *format, ...) +{ + char buf[512]; + int l; + va_list ap; + + va_start(ap, format); + l = vseprint(buf,buf+sizeof(buf),format,ap) - buf; + va_end(ap); + + call_openboot(rom->v2_write,*rom->v2_stdout,buf,l); +} + +void +prom_halt(void) +{ + call_openboot(rom->exit,0xfeedface); +} |
