1 #include "u.h"
2 #include "../port/lib.h"
3 #include "mem.h"
4 #include "dat.h"
5 #include "fns.h"
6 #include "io.h"
7
8 typedef struct Rom Rom;
9
10 struct Rom
11 {
12 uint magic;
13 uint version;
14 uint plugin_version;
15 uint monitor_id;
16
17 void **physmemlist;
18 void **virtmemlist;
19 void **availphysmemlist;
20 void *config_info;
21
22 char **bootcmd;
23
24 uint (*open)();
25 uint (*close)();
26
27 uint (*read_blocks)();
28 uint (*write_blocks)();
29
30 uint (*transmit_pkt)();
31 uint (*poll_pkt)();
32
33 uint (*read_bytes)();
34 uint (*write_bytes)();
35 uint (*seek)();
36
37 uchar *input;
38 uchar *output;
39
40 uchar (*getchar)();
41 uchar (*putchar)();
42 uchar (*noblock_getchar)();
43 uchar (*noblock_putchar)();
44
45 uchar (*fb_writestr)(char*);
46
47 void (*boot)(char*);
48
49 void (*printf)(char*,...);
50
51 void (*some_kbd_thing)();
52 int *ms_count;
53 void (*exit)();
54 void (**vector)();
55 void (**interpret)(char*,...);
56 void *bootparam;
57 uint (*mac_addr)();
58 char **v2_bootpath;
59 char ** v2_bootargs;
60 int *v2_stdin;
61 int *v2_stdout;
62 void* (*v2_phandle)();
63 char* (*v2_allocphys)();
64 char* (*v2_freephys)();
65 char* (*v2_map_dev)();
66 char* (*v2_unmap_dev)();
67 ulong (*v2_open)();
68 uint (*v2_close)();
69 uint (*v2_read)();
70 uint (*v2_write)();
71 uint (*v2_seek)();
72 void (*v2_chain)();
73 void (*v2_release)();
74 char *(*v3_alloc)();
75 int *reserved[14];
76 void (*setctxsegmap)();
77 int (*v3_startcpu)();
78 int (*v3_stopcpu)();
79 int (*v3_idlecpu)();
80 int (*v3_resumecpu)();
81 };
82
83 Rom *rom; /* open boot rom vector -- assigned by l.s */
84
85 void
prom_printf(char * format,...)86 prom_printf(char *format, ...)
87 {
88 char buf[512];
89 int l;
90 va_list ap;
91
92 va_start(ap, format);
93 l = vseprint(buf,buf+sizeof(buf),format,ap) - buf;
94 va_end(ap);
95
96 call_openboot(rom->v2_write,*rom->v2_stdout,buf,l);
97 }
98
99 void
prom_halt(void)100 prom_halt(void)
101 {
102 call_openboot(rom->exit,0xfeedface);
103 }
104