Kevin O'Connor | fa9c66a | 2013-09-14 19:10:40 -0400 | [diff] [blame] | 1 | // Misc function and variable declarations. |
Kevin O'Connor | 786502d | 2008-02-27 10:41:41 -0500 | [diff] [blame] | 2 | #ifndef __UTIL_H |
| 3 | #define __UTIL_H |
Kevin O'Connor | f076a3e | 2008-02-25 22:25:15 -0500 | [diff] [blame] | 4 | |
Kevin O'Connor | 9521e26 | 2008-07-04 13:04:29 -0400 | [diff] [blame] | 5 | #include "types.h" // u32 |
Kevin O'Connor | f076a3e | 2008-02-25 22:25:15 -0500 | [diff] [blame] | 6 | |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 7 | // apm.c |
| 8 | void apm_shutdown(void); |
Kevin O'Connor | 2d2fa31 | 2013-09-14 21:55:26 -0400 | [diff] [blame] | 9 | struct bregs; |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 10 | void handle_1553(struct bregs *regs); |
Kevin O'Connor | bdce35f | 2008-02-26 21:33:14 -0500 | [diff] [blame] | 11 | |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 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); |
Kevin O'Connor | f54c150 | 2008-06-14 15:56:16 -0400 | [diff] [blame] | 18 | |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 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); |
Stefan Berger | 320df85 | 2015-11-30 11:14:19 -0500 | [diff] [blame] | 39 | int get_keystroke(int msec); |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 40 | |
| 41 | // bootsplash.c |
| 42 | void enable_vga_console(void); |
| 43 | void enable_bootsplash(void); |
| 44 | void disable_bootsplash(void); |
Kevin O'Connor | 913cc2e | 2008-04-13 17:31:45 -0400 | [diff] [blame] | 45 | |
Kevin O'Connor | 135f3f6 | 2013-09-14 23:57:26 -0400 | [diff] [blame] | 46 | // cdrom.c |
Kevin O'Connor | 02f7676 | 2014-05-10 01:20:46 -0400 | [diff] [blame] | 47 | extern struct eltorito_s CDEmu; |
Kevin O'Connor | 135f3f6 | 2013-09-14 23:57:26 -0400 | [diff] [blame] | 48 | extern struct drive_s *cdemu_drive_gf; |
| 49 | struct disk_op_s; |
Kevin O'Connor | 1785645 | 2015-07-07 14:56:20 -0400 | [diff] [blame] | 50 | int cdemu_process_op(struct disk_op_s *op); |
Kevin O'Connor | 135f3f6 | 2013-09-14 23:57:26 -0400 | [diff] [blame] | 51 | void cdrom_prepboot(void); |
Kevin O'Connor | 135f3f6 | 2013-09-14 23:57:26 -0400 | [diff] [blame] | 52 | int cdrom_boot(struct drive_s *drive_g); |
| 53 | |
Kevin O'Connor | bdce35f | 2008-02-26 21:33:14 -0500 | [diff] [blame] | 54 | // clock.c |
Kevin O'Connor | c6e8c07 | 2013-07-20 10:51:58 -0400 | [diff] [blame] | 55 | void clock_setup(void); |
| 56 | void handle_1583(struct bregs *regs); |
Kevin O'Connor | bd5f6c7 | 2015-08-10 16:14:48 -0400 | [diff] [blame] | 57 | void clock_poll_irq(void); |
Kevin O'Connor | 9fcd199 | 2013-09-15 01:50:00 -0400 | [diff] [blame] | 58 | u32 irqtimer_calc_ticks(u32 count); |
| 59 | u32 irqtimer_calc(u32 msecs); |
| 60 | int irqtimer_check(u32 end); |
Kevin O'Connor | c6e8c07 | 2013-07-20 10:51:58 -0400 | [diff] [blame] | 61 | void handle_1586(struct bregs *regs); |
Kevin O'Connor | c6e8c07 | 2013-07-20 10:51:58 -0400 | [diff] [blame] | 62 | |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 63 | // fw/acpi.c |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 64 | void acpi_setup(void); |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 65 | |
| 66 | // fw/biostable.c |
Kevin O'Connor | 3bd2dc6 | 2014-04-07 16:35:18 -0400 | [diff] [blame] | 67 | void copy_pir(void *pos); |
| 68 | void copy_mptable(void *pos); |
Kevin O'Connor | 19646a4 | 2014-04-07 15:55:23 -0400 | [diff] [blame] | 69 | extern struct pir_header *PirAddr; |
Kevin O'Connor | 3bd2dc6 | 2014-04-07 16:35:18 -0400 | [diff] [blame] | 70 | void copy_acpi_rsdp(void *pos); |
Kevin O'Connor | 836b4d8 | 2014-04-07 15:42:04 -0400 | [diff] [blame] | 71 | extern struct rsdp_descriptor *RsdpAddr; |
| 72 | extern u32 acpi_pm1a_cnt; |
Gerd Hoffmann | a217de9 | 2014-05-13 14:01:22 +0200 | [diff] [blame] | 73 | extern u16 acpi_pm_base; |
Kevin O'Connor | 836b4d8 | 2014-04-07 15:42:04 -0400 | [diff] [blame] | 74 | void *find_acpi_rsdp(void); |
Kevin O'Connor | 9ec57de | 2016-01-10 10:53:24 -0500 | [diff] [blame] | 75 | void *find_acpi_table(u32 signature); |
Kevin O'Connor | 836b4d8 | 2014-04-07 15:42:04 -0400 | [diff] [blame] | 76 | u32 find_resume_vector(void); |
| 77 | void acpi_reboot(void); |
| 78 | void find_acpi_features(void); |
Kevin O'Connor | d18c9f0 | 2014-04-07 15:48:12 -0400 | [diff] [blame] | 79 | extern struct smbios_entry_point *SMBiosAddr; |
Stefan Berger | 5aa2a75 | 2015-03-23 14:22:17 -0400 | [diff] [blame] | 80 | struct smbios_entry_point *get_smbios_entry_point(); |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 81 | void copy_smbios(void *pos); |
Kevin O'Connor | d18c9f0 | 2014-04-07 15:48:12 -0400 | [diff] [blame] | 82 | void display_uuid(void); |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 83 | void copy_table(void *pos); |
Gabriel L. Somlo | d85c22e | 2014-04-23 15:04:49 -0400 | [diff] [blame] | 84 | void smbios_setup(void); |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 85 | |
| 86 | // fw/coreboot.c |
| 87 | extern const char *CBvendor, *CBpart; |
| 88 | struct cbfs_file; |
Kevin O'Connor | 4cd522e | 2013-11-29 12:14:34 -0500 | [diff] [blame] | 89 | void coreboot_debug_putc(char c); |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 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); |
Kevin O'Connor | 5ab18be | 2014-02-11 15:33:42 -0500 | [diff] [blame] | 95 | struct cb_header; |
| 96 | void *find_cb_subtable(struct cb_header *cbh, u32 tag); |
| 97 | struct cb_header *find_cb_table(void); |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 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 | |
Vladimir Serbinenko | 1b911d7 | 2015-05-18 19:07:16 +0200 | [diff] [blame] | 110 | // fw/multiboot.c |
| 111 | void multiboot_init(void); |
| 112 | |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 113 | // fw/pciinit.c |
Kevin O'Connor | 62ff9d5 | 2016-02-03 00:47:27 -0500 | [diff] [blame] | 114 | extern u64 pcimem_start, pcimem_end; |
| 115 | extern u64 pcimem64_start, pcimem64_end; |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 116 | extern const u8 pci_irqs[4]; |
| 117 | void pci_setup(void); |
Marcel Apfelbaum | 40d020f | 2014-01-15 14:20:06 +0200 | [diff] [blame] | 118 | void pci_resume(void); |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 119 | |
| 120 | // fw/pirtable.c |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 121 | void pirtable_setup(void); |
| 122 | |
| 123 | // fw/shadow.c |
| 124 | void make_bios_writable(void); |
| 125 | void make_bios_readonly(void); |
Kevin O'Connor | c68aff5 | 2017-03-03 10:48:45 -0500 | [diff] [blame] | 126 | void qemu_reboot(void); |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 127 | |
| 128 | // fw/smbios.c |
Gabriel L. Somlo | d85c22e | 2014-04-23 15:04:49 -0400 | [diff] [blame] | 129 | void smbios_legacy_setup(void); |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 130 | |
| 131 | // fw/smm.c |
| 132 | void smm_device_setup(void); |
| 133 | void smm_setup(void); |
| 134 | |
| 135 | // fw/smp.c |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 136 | extern u32 MaxCountCPUs; |
| 137 | void wrmsr_smp(u32 index, u64 val); |
| 138 | void smp_setup(void); |
Paolo Bonzini | 54e3a88 | 2016-07-07 16:00:40 +0200 | [diff] [blame] | 139 | void smp_resume(void); |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 140 | int apic_id_is_present(u8 apic_id); |
| 141 | |
Kevin O'Connor | 7b9f297 | 2013-09-18 21:04:03 -0400 | [diff] [blame] | 142 | // hw/dma.c |
| 143 | int dma_floppy(u32 addr, int count, int isWrite); |
| 144 | void dma_setup(void); |
| 145 | |
Kevin O'Connor | 135f3f6 | 2013-09-14 23:57:26 -0400 | [diff] [blame] | 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); |
Kevin O'Connor | 1785645 | 2015-07-07 14:56:20 -0400 | [diff] [blame] | 151 | int floppy_process_op(struct disk_op_s *op); |
Kevin O'Connor | 135f3f6 | 2013-09-14 23:57:26 -0400 | [diff] [blame] | 152 | void floppy_tick(void); |
| 153 | |
| 154 | // hw/ramdisk.c |
| 155 | void ramdisk_setup(void); |
Kevin O'Connor | 1785645 | 2015-07-07 14:56:20 -0400 | [diff] [blame] | 156 | int ramdisk_process_op(struct disk_op_s *op); |
Kevin O'Connor | 135f3f6 | 2013-09-14 23:57:26 -0400 | [diff] [blame] | 157 | |
Kevin O'Connor | 72691a5 | 2014-12-16 09:55:16 -0500 | [diff] [blame] | 158 | // hw/sdcard.c |
Kevin O'Connor | 1785645 | 2015-07-07 14:56:20 -0400 | [diff] [blame] | 159 | int sdcard_process_op(struct disk_op_s *op); |
Kevin O'Connor | 72691a5 | 2014-12-16 09:55:16 -0500 | [diff] [blame] | 160 | void sdcard_setup(void); |
| 161 | |
Kevin O'Connor | 5d369d8 | 2013-09-02 20:48:46 -0400 | [diff] [blame] | 162 | // hw/timer.c |
Kevin O'Connor | 1ca05b0 | 2010-01-03 17:43:37 -0500 | [diff] [blame] | 163 | void timer_setup(void); |
Kevin O'Connor | 018bdd7 | 2013-07-20 18:22:57 -0400 | [diff] [blame] | 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); |
Kevin O'Connor | bc2aecd | 2008-11-28 16:40:06 -0500 | [diff] [blame] | 168 | void ndelay(u32 count); |
| 169 | void udelay(u32 count); |
| 170 | void mdelay(u32 count); |
Kevin O'Connor | 10ad799 | 2009-10-24 11:06:08 -0400 | [diff] [blame] | 171 | void nsleep(u32 count); |
| 172 | void usleep(u32 count); |
| 173 | void msleep(u32 count); |
Kevin O'Connor | 018bdd7 | 2013-07-20 18:22:57 -0400 | [diff] [blame] | 174 | u32 ticks_to_ms(u32 ticks); |
| 175 | u32 ticks_from_ms(u32 ms); |
Kevin O'Connor | 9fcd199 | 2013-09-15 01:50:00 -0400 | [diff] [blame] | 176 | void pit_setup(void); |
Kevin O'Connor | bdce35f | 2008-02-26 21:33:14 -0500 | [diff] [blame] | 177 | |
Kevin O'Connor | 07cf73b | 2013-09-15 00:31:17 -0400 | [diff] [blame] | 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 | |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 185 | // kbd.c |
| 186 | void kbd_init(void); |
| 187 | void handle_15c2(struct bregs *regs); |
| 188 | void process_key(u8 key); |
Gerd Hoffmann | 90fa511 | 2017-09-18 10:47:20 +0200 | [diff] [blame] | 189 | u8 enqueue_key(u16 keycode); |
| 190 | u16 ascii_to_keycode(u8 ascii); |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 191 | |
| 192 | // misc.c |
Kevin O'Connor | eb59924 | 2015-11-19 15:29:39 -0500 | [diff] [blame] | 193 | extern int HaveRunPost; |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 194 | extern struct bios_config_table_s BIOS_CONFIG_TABLE __aligned(1); |
Kevin O'Connor | ca34ce5 | 2014-05-24 10:40:35 -0400 | [diff] [blame] | 195 | extern struct floppy_dbt_s diskette_param_table __aligned(1); |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 196 | extern u8 BiosChecksum; |
Kevin O'Connor | 6c68e7a | 2014-04-19 12:22:22 -0400 | [diff] [blame] | 197 | int in_post(void); |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 198 | void mathcp_setup(void); |
| 199 | |
| 200 | // mouse.c |
| 201 | void mouse_init(void); |
| 202 | void process_mouse(u8 data); |
| 203 | |
Kevin O'Connor | 8fb3a5e | 2013-09-14 22:27:14 -0400 | [diff] [blame] | 204 | // optionroms.c |
| 205 | struct rom_header; |
| 206 | void callrom(struct rom_header *rom, u16 bdf); |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 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; |
Kevin O'Connor | 8fb3a5e | 2013-09-14 22:27:14 -0400 | [diff] [blame] | 213 | |
Kevin O'Connor | a0dc296 | 2008-03-16 14:29:32 -0400 | [diff] [blame] | 214 | // pcibios.c |
| 215 | void handle_1ab1(struct bregs *regs); |
Kevin O'Connor | d83c87b | 2013-01-21 01:14:12 -0500 | [diff] [blame] | 216 | void bios32_init(void); |
Kevin O'Connor | a0dc296 | 2008-03-16 14:29:32 -0400 | [diff] [blame] | 217 | |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 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 | |
Kevin O'Connor | 07cf73b | 2013-09-15 00:31:17 -0400 | [diff] [blame] | 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); |
Kevin O'Connor | a48f602 | 2016-01-12 14:22:33 -0500 | [diff] [blame] | 232 | void code_mutable_preinit(void); |
Kevin O'Connor | 07cf73b | 2013-09-15 00:31:17 -0400 | [diff] [blame] | 233 | |
Gerd Hoffmann | d6728f3 | 2017-09-18 10:47:23 +0200 | [diff] [blame] | 234 | // sercon.c |
| 235 | void sercon_setup(void); |
| 236 | void sercon_check_event(void); |
| 237 | |
Kevin O'Connor | b367e0a | 2013-09-15 00:43:51 -0400 | [diff] [blame] | 238 | // serial.c |
| 239 | void serial_setup(void); |
| 240 | void lpt_setup(void); |
Ian Campbell | 1442c31 | 2011-06-01 11:00:28 +0100 | [diff] [blame] | 241 | |
Kevin O'Connor | 8cdf0c5 | 2016-08-05 13:44:12 -0400 | [diff] [blame] | 242 | // version.c |
| 243 | extern const char VERSION[], BUILDINFO[]; |
| 244 | |
Kevin O'Connor | cbffa8e | 2008-08-17 11:11:07 -0400 | [diff] [blame] | 245 | // vgahooks.c |
Kevin O'Connor | 1ca05b0 | 2010-01-03 17:43:37 -0500 | [diff] [blame] | 246 | void handle_155f(struct bregs *regs); |
Jonathan A. Kollasch | e9a3e12 | 2013-10-20 12:48:56 -0500 | [diff] [blame] | 247 | void handle_157f(struct bregs *regs); |
Kevin O'Connor | c1de91b | 2011-07-02 13:50:21 -0400 | [diff] [blame] | 248 | void vgahook_setup(struct pci_device *pci); |
Kevin O'Connor | cbffa8e | 2008-08-17 11:11:07 -0400 | [diff] [blame] | 249 | |
Kevin O'Connor | 786502d | 2008-02-27 10:41:41 -0500 | [diff] [blame] | 250 | #endif // util.h |