xref: /inferno-os/os/js/rom.c (revision 9dc22068e29604f4b484e746112a9a4efe6fd57f)
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
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
100 prom_halt(void)
101 {
102 	call_openboot(rom->exit,0xfeedface);
103 }
104