#include "util.h" // memset
#include "biosvar.h" // struct bios_data_area_s
#include "disk.h" // floppy_drive_setup
+#include "ata.h" // ata_setup
#include "memmap.h" // add_e820
#include "pic.h" // pic_setup
#include "pci.h" // create_pirtable
#include "bregs.h" // struct bregs
#include "mptable.h" // mptable_init
#include "boot.h" // IPL
+#include "usb.h" // usb_setup
void
__set_irq(int vector, void *loc)
{
- SET_IVT(vector, SEG_BIOS, (u32)loc - BUILD_BIOS_ADDR);
+ SET_IVT(vector, SEGOFF(SEG_BIOS, (u32)loc - BUILD_BIOS_ADDR));
}
#define set_irq(vector, func) do { \
// set vector 0x79 to zero
// this is used by 'gardian angel' protection system
- SET_IVT(0x79, 0, 0);
+ SET_IVT(0x79, SEGOFF(0, 0));
__set_irq(0x1E, &diskette_param_table2);
}
memset(bda, 0, sizeof(*bda));
int esize = EBDA_SIZE_START;
- SET_BDA(mem_size_kb, 640 - esize);
+ SET_BDA(mem_size_kb, BUILD_LOWRAM_END/1024 - esize);
u16 eseg = EBDA_SEGMENT_START;
SET_BDA(ebda_seg, eseg);
}
// Don't declare any memory between 0xa0000 and 0x100000
- add_e820(0xa0000, 0x50000, E820_HOLE);
+ add_e820(BUILD_LOWRAM_END, BUILD_BIOS_ADDR-BUILD_LOWRAM_END, E820_HOLE);
// Mark known areas as reserved.
u16 ebda_seg = get_ebda_seg();
malloc_setup();
pmm_setup();
+ pci_setup();
+ smm_init();
+
pnp_setup();
vga_setup();
+ usb_setup();
kbd_setup();
lpt_setup();
serial_setup();
mouse_setup();
- pci_bios_setup();
- smm_init();
-
init_bios_tables();
boot_setup();
- floppy_drive_setup();
- hard_drive_setup();
+ drive_setup();
+ cdemu_setup();
+ floppy_setup();
+ ata_setup();
+ ramdisk_setup();
optionrom_setup();
dprintf(3, "Jump to int19\n");
struct bregs br;
memset(&br, 0, sizeof(br));
+ br.flags = F_IF;
call16_int(0x19, &br);
}