// Begin the boot process by invoking an int0x19 in 16bit mode. void VISIBLE32FLAT startBoot(void) { // Clear low-memory allocations (required by PMM spec). memset((void*)BUILD_STACK_ADDR, 0, BUILD_EBDA_MINIMUM - BUILD_STACK_ADDR); dprintf(3, "Jump to int19\n"); //Tell QEMU the POST is done pci_config_writel(pci_to_bdf(0, 0, 0), PCI_VENDOR_ID, 0xB105DEAD); struct bregs br; memset(&br, 0, sizeof(br)); br.flags = F_IF; call16_int(0x19, &br); }
int csm_bootprio_pci(struct pci_device *pci) { if (!csm_boot_table) return -1; BBS_TABLE *bbs = (void *)csm_boot_table->BbsTable; int i; for (i = 5; i < csm_boot_table->NumberBbsEntries; i++) { if (pci->bdf == pci_to_bdf(bbs[i].Bus, bbs[i].Device, bbs[i].Function)) { dprintf(3, "CSM bootprio for PCI(%d,%d,%d) is %d\n", bbs[i].Bus, bbs[i].Device, bbs[i].Function, bbs[i].BootPriority); return bbs[i].BootPriority; } } return -1; }