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