| 1715 | } |
| 1716 | |
| 1717 | BOOLEAN read_vbios(BOOLEAN from_pci) |
| 1718 | { |
| 1719 | option_rom_header_t *rom_addr; |
| 1720 | |
| 1721 | if (from_pci) { |
| 1722 | rom_addr = (option_rom_header_t *)(UINTN)(pci_config_read32(card->pci_dev, PCI_EXPANSION_ROM_BASE) & ~0x7ff); |
| 1723 | DBG(" @0x%llX\n", (uintptr_t)rom_addr); |
| 1724 | } else { |
| 1725 | rom_addr = (option_rom_header_t *)(UINTN)0xc0000; |
| 1726 | } |
| 1727 | |
| 1728 | if (!validate_rom(rom_addr, card->pci_dev)) { |
| 1729 | DBG("There is no ROM @0x%llX\n", (uintptr_t)rom_addr); |
| 1730 | // gBS->Stall(3000000); |
| 1731 | return FALSE; |
| 1732 | } |
| 1733 | |
| 1734 | card->rom_size = (UINT32)(rom_addr->rom_size) << 9; |
| 1735 | if (!card->rom_size) { |
| 1736 | DBG("invalid ROM size =0\n"); |
| 1737 | return FALSE; |
| 1738 | } |
| 1739 | |
| 1740 | card->rom = (__typeof__(card->rom))AllocateZeroPool(card->rom_size); |
| 1741 | if (!card->rom) { |
| 1742 | return FALSE; |
| 1743 | } |
| 1744 | |
| 1745 | CopyMem(card->rom, (void *)rom_addr, card->rom_size); |
| 1746 | return TRUE; |
| 1747 | } |
| 1748 | |
| 1749 | BOOLEAN read_disabled_vbios(VOID) |
| 1750 | { |
no test coverage detected