1 // Misc function and variable declarations.
2 #ifndef __UTIL_H
3 #define __UTIL_H
4 
5 #include "types.h" // u32
6 
7 // apm.c
8 void apm_shutdown(void);
9 struct bregs;
10 void handle_1553(struct bregs *regs);
11 
12 // bmp.c
13 struct bmp_decdata *bmp_alloc(void);
14 int bmp_decode(struct bmp_decdata *bmp, unsigned char *data, int data_size);
15 void bmp_get_size(struct bmp_decdata *bmp, int *width, int *height);
16 int bmp_show(struct bmp_decdata *bmp, unsigned char *pic, int width
17              , int height, int depth, int bytes_per_line_dest);
18 
19 // boot.c
20 void boot_init(void);
21 void boot_add_bev(u16 seg, u16 bev, u16 desc, int prio);
22 void boot_add_bcv(u16 seg, u16 ip, u16 desc, int prio);
23 struct drive_s;
24 void boot_add_floppy(struct drive_s *drive_g, const char *desc, int prio);
25 void boot_add_hd(struct drive_s *drive_g, const char *desc, int prio);
26 void boot_add_cd(struct drive_s *drive_g, const char *desc, int prio);
27 void boot_add_cbfs(void *data, const char *desc, int prio);
28 void interactive_bootmenu(void);
29 void bcv_prepboot(void);
30 struct pci_device;
31 int bootprio_find_pci_device(struct pci_device *pci);
32 int bootprio_find_scsi_device(struct pci_device *pci, int target, int lun);
33 int bootprio_find_ata_device(struct pci_device *pci, int chanid, int slave);
34 int bootprio_find_fdc_device(struct pci_device *pci, int port, int fdid);
35 int bootprio_find_pci_rom(struct pci_device *pci, int instance);
36 int bootprio_find_named_rom(const char *name, int instance);
37 struct usbdevice_s;
38 int bootprio_find_usb(struct usbdevice_s *usbdev, int lun);
39 int get_keystroke(int msec);
40 
41 // bootsplash.c
42 void enable_vga_console(void);
43 void enable_bootsplash(void);
44 void disable_bootsplash(void);
45 
46 // cdrom.c
47 extern struct eltorito_s CDEmu;
48 extern struct drive_s *cdemu_drive_gf;
49 struct disk_op_s;
50 int cdemu_process_op(struct disk_op_s *op);
51 void cdrom_prepboot(void);
52 int cdrom_boot(struct drive_s *drive_g);
53 
54 // clock.c
55 void clock_setup(void);
56 void handle_1583(struct bregs *regs);
57 void clock_poll_irq(void);
58 u32 irqtimer_calc_ticks(u32 count);
59 u32 irqtimer_calc(u32 msecs);
60 int irqtimer_check(u32 end);
61 void handle_1586(struct bregs *regs);
62 
63 // fw/acpi.c
64 void acpi_setup(void);
65 
66 // fw/biostable.c
67 void copy_pir(void *pos);
68 void copy_mptable(void *pos);
69 extern struct pir_header *PirAddr;
70 void copy_acpi_rsdp(void *pos);
71 extern struct rsdp_descriptor *RsdpAddr;
72 extern u32 acpi_pm1a_cnt;
73 extern u16 acpi_pm_base;
74 void *find_acpi_rsdp(void);
75 void *find_acpi_table(u32 signature);
76 u32 find_resume_vector(void);
77 void acpi_reboot(void);
78 void find_acpi_features(void);
79 extern struct smbios_entry_point *SMBiosAddr;
80 struct smbios_entry_point *get_smbios_entry_point();
81 void copy_smbios(void *pos);
82 void display_uuid(void);
83 void copy_table(void *pos);
84 void smbios_setup(void);
85 
86 // fw/coreboot.c
87 extern const char *CBvendor, *CBpart;
88 struct cbfs_file;
89 void coreboot_debug_putc(char c);
90 void cbfs_run_payload(struct cbfs_file *file);
91 void coreboot_platform_setup(void);
92 void cbfs_payload_setup(void);
93 void coreboot_preinit(void);
94 void coreboot_cbfs_init(void);
95 struct cb_header;
96 void *find_cb_subtable(struct cb_header *cbh, u32 tag);
97 struct cb_header *find_cb_table(void);
98 
99 // fw/csm.c
100 int csm_bootprio_fdc(struct pci_device *pci, int port, int fdid);
101 int csm_bootprio_ata(struct pci_device *pci, int chanid, int slave);
102 int csm_bootprio_pci(struct pci_device *pci);
103 
104 // fw/mptable.c
105 void mptable_setup(void);
106 
107 // fw/mtrr.c
108 void mtrr_setup(void);
109 
110 // fw/multiboot.c
111 void multiboot_init(void);
112 
113 // fw/pciinit.c
114 extern u64 pcimem_start, pcimem_end;
115 extern u64 pcimem64_start, pcimem64_end;
116 extern const u8 pci_irqs[4];
117 void pci_setup(void);
118 void pci_resume(void);
119 
120 // fw/pirtable.c
121 void pirtable_setup(void);
122 
123 // fw/shadow.c
124 void make_bios_writable(void);
125 void make_bios_readonly(void);
126 void qemu_reboot(void);
127 
128 // fw/smbios.c
129 void smbios_legacy_setup(void);
130 
131 // fw/smm.c
132 void smm_device_setup(void);
133 void smm_setup(void);
134 
135 // fw/smp.c
136 extern u32 MaxCountCPUs;
137 void wrmsr_smp(u32 index, u64 val);
138 void smp_setup(void);
139 void smp_resume(void);
140 int apic_id_is_present(u8 apic_id);
141 
142 // hw/dma.c
143 int dma_floppy(u32 addr, int count, int isWrite);
144 void dma_setup(void);
145 
146 // hw/floppy.c
147 extern struct floppy_ext_dbt_s diskette_param_table2;
148 void floppy_setup(void);
149 struct drive_s *init_floppy(int floppyid, int ftype);
150 int find_floppy_type(u32 size);
151 int floppy_process_op(struct disk_op_s *op);
152 void floppy_tick(void);
153 
154 // hw/ramdisk.c
155 void ramdisk_setup(void);
156 int ramdisk_process_op(struct disk_op_s *op);
157 
158 // hw/sdcard.c
159 int sdcard_process_op(struct disk_op_s *op);
160 void sdcard_setup(void);
161 
162 // hw/timer.c
163 void timer_setup(void);
164 void pmtimer_setup(u16 ioport);
165 u32 timer_calc(u32 msecs);
166 u32 timer_calc_usec(u32 usecs);
167 int timer_check(u32 end);
168 void ndelay(u32 count);
169 void udelay(u32 count);
170 void mdelay(u32 count);
171 void nsleep(u32 count);
172 void usleep(u32 count);
173 void msleep(u32 count);
174 u32 ticks_to_ms(u32 ticks);
175 u32 ticks_from_ms(u32 ms);
176 void pit_setup(void);
177 
178 // jpeg.c
179 struct jpeg_decdata *jpeg_alloc(void);
180 int jpeg_decode(struct jpeg_decdata *jpeg, unsigned char *buf);
181 void jpeg_get_size(struct jpeg_decdata *jpeg, int *width, int *height);
182 int jpeg_show(struct jpeg_decdata *jpeg, unsigned char *pic, int width
183               , int height, int depth, int bytes_per_line_dest);
184 
185 // kbd.c
186 void kbd_init(void);
187 void handle_15c2(struct bregs *regs);
188 void process_key(u8 key);
189 u8 enqueue_key(u16 keycode);
190 u16 ascii_to_keycode(u8 ascii);
191 
192 // misc.c
193 extern int HaveRunPost;
194 extern struct bios_config_table_s BIOS_CONFIG_TABLE __aligned(1);
195 extern struct floppy_dbt_s diskette_param_table __aligned(1);
196 extern u8 BiosChecksum;
197 int in_post(void);
198 void mathcp_setup(void);
199 
200 // mouse.c
201 void mouse_init(void);
202 void process_mouse(u8 data);
203 
204 // optionroms.c
205 struct rom_header;
206 void callrom(struct rom_header *rom, u16 bdf);
207 void call_bcv(u16 seg, u16 ip);
208 int is_pci_vga(struct pci_device *pci);
209 void optionrom_setup(void);
210 void vgarom_setup(void);
211 void s3_resume_vga(void);
212 extern int ScreenAndDebug;
213 
214 // pcibios.c
215 void handle_1ab1(struct bregs *regs);
216 void bios32_init(void);
217 
218 // pmm.c
219 void pmm_init(void);
220 void pmm_prepboot(void);
221 
222 // pnpbios.c
223 u16 get_pnp_offset(void);
224 void pnp_init(void);
225 
226 // post.c
227 void interface_init(void);
228 void device_hardware_setup(void);
229 void prepareboot(void);
230 void startBoot(void);
231 void reloc_preinit(void *f, void *arg);
232 void code_mutable_preinit(void);
233 
234 // sercon.c
235 void sercon_setup(void);
236 void sercon_check_event(void);
237 
238 // serial.c
239 void serial_setup(void);
240 void lpt_setup(void);
241 
242 // version.c
243 extern const char VERSION[], BUILDINFO[];
244 
245 // vgahooks.c
246 void handle_155f(struct bregs *regs);
247 void handle_157f(struct bregs *regs);
248 void vgahook_setup(struct pci_device *pci);
249 
250 #endif // util.h
251