mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-24 22:24:37 +02:00
OvmfPkg/QemuVideoDxe: purge VbeShim
The guest os which depends on vbeshim for video support is -- according to the comments -- Windows 2008 R2. Which went EOL in January 2020, more than four years ago. Time to retire VbeShim. RIP. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Acked-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
parent
c36414b131
commit
ab069d5801
@ -466,15 +466,6 @@ QemuVideoControllerDriverStart (
|
||||
goto UninstallGop;
|
||||
}
|
||||
|
||||
#if defined MDE_CPU_IA32 || defined MDE_CPU_X64
|
||||
if ((Private->Variant == QEMU_VIDEO_BOCHS_MMIO) ||
|
||||
(Private->Variant == QEMU_VIDEO_BOCHS))
|
||||
{
|
||||
InstallVbeShim (Card->Name, Private->GraphicsOutput.Mode->FrameBufferBase);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
gBS->RestoreTPL (OldTpl);
|
||||
return EFI_SUCCESS;
|
||||
|
||||
|
@ -495,10 +495,4 @@ QemuVideoBochsModeSetup (
|
||||
BOOLEAN IsQxl
|
||||
);
|
||||
|
||||
VOID
|
||||
InstallVbeShim (
|
||||
IN CONST CHAR16 *CardName,
|
||||
IN EFI_PHYSICAL_ADDRESS FrameBufferBase
|
||||
);
|
||||
|
||||
#endif
|
||||
|
@ -33,10 +33,6 @@
|
||||
Initialize.c
|
||||
Qemu.h
|
||||
|
||||
[Sources.Ia32, Sources.X64]
|
||||
VbeShim.c
|
||||
VbeShim.h
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
|
@ -1,281 +0,0 @@
|
||||
;------------------------------------------------------------------------------
|
||||
; @file
|
||||
; A minimal Int10h stub that allows the Windows 2008 R2 SP1 UEFI guest's buggy,
|
||||
; default VGA driver to switch to 1024x768x32, on the stdvga and QXL video
|
||||
; cards of QEMU.
|
||||
;
|
||||
; Copyright (C) 2014, Red Hat, Inc.
|
||||
; Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
;
|
||||
; SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
;
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
; enable this macro for debug messages
|
||||
;%define DEBUG
|
||||
|
||||
%macro DebugLog 1
|
||||
%ifdef DEBUG
|
||||
push si
|
||||
mov si, %1
|
||||
call PrintStringSi
|
||||
pop si
|
||||
%endif
|
||||
%endmacro
|
||||
|
||||
|
||||
BITS 16
|
||||
ORG 0
|
||||
|
||||
VbeInfo:
|
||||
TIMES 256 nop
|
||||
|
||||
VbeModeInfo:
|
||||
TIMES 256 nop
|
||||
|
||||
|
||||
Handler:
|
||||
cmp ax, 0x4f00
|
||||
je GetInfo
|
||||
cmp ax, 0x4f01
|
||||
je GetModeInfo
|
||||
cmp ax, 0x4f02
|
||||
je SetMode
|
||||
cmp ax, 0x4f03
|
||||
je GetMode
|
||||
cmp ax, 0x4f10
|
||||
je GetPmCapabilities
|
||||
cmp ax, 0x4f15
|
||||
je ReadEdid
|
||||
cmp ah, 0x00
|
||||
je SetModeLegacy
|
||||
DebugLog StrUnknownFunction
|
||||
Hang:
|
||||
jmp Hang
|
||||
|
||||
|
||||
GetInfo:
|
||||
push es
|
||||
push di
|
||||
push ds
|
||||
push si
|
||||
push cx
|
||||
|
||||
DebugLog StrEnterGetInfo
|
||||
|
||||
; target (es:di) set on input
|
||||
push cs
|
||||
pop ds
|
||||
mov si, VbeInfo
|
||||
; source (ds:si) set now
|
||||
|
||||
mov cx, 256
|
||||
cld
|
||||
rep movsb
|
||||
|
||||
pop cx
|
||||
pop si
|
||||
pop ds
|
||||
pop di
|
||||
pop es
|
||||
jmp Success
|
||||
|
||||
|
||||
GetModeInfo:
|
||||
push es
|
||||
push di
|
||||
push ds
|
||||
push si
|
||||
push cx
|
||||
|
||||
DebugLog StrEnterGetModeInfo
|
||||
|
||||
and cx, ~0x4000 ; clear potentially set LFB bit in mode number
|
||||
cmp cx, 0x00f1
|
||||
je KnownMode1
|
||||
DebugLog StrUnknownMode
|
||||
jmp Hang
|
||||
KnownMode1:
|
||||
; target (es:di) set on input
|
||||
push cs
|
||||
pop ds
|
||||
mov si, VbeModeInfo
|
||||
; source (ds:si) set now
|
||||
|
||||
mov cx, 256
|
||||
cld
|
||||
rep movsb
|
||||
|
||||
pop cx
|
||||
pop si
|
||||
pop ds
|
||||
pop di
|
||||
pop es
|
||||
jmp Success
|
||||
|
||||
|
||||
%define ATT_ADDRESS_REGISTER 0x03c0
|
||||
%define VBE_DISPI_IOPORT_INDEX 0x01ce
|
||||
%define VBE_DISPI_IOPORT_DATA 0x01d0
|
||||
|
||||
%define VBE_DISPI_INDEX_XRES 0x1
|
||||
%define VBE_DISPI_INDEX_YRES 0x2
|
||||
%define VBE_DISPI_INDEX_BPP 0x3
|
||||
%define VBE_DISPI_INDEX_ENABLE 0x4
|
||||
%define VBE_DISPI_INDEX_BANK 0x5
|
||||
%define VBE_DISPI_INDEX_VIRT_WIDTH 0x6
|
||||
%define VBE_DISPI_INDEX_VIRT_HEIGHT 0x7
|
||||
%define VBE_DISPI_INDEX_X_OFFSET 0x8
|
||||
%define VBE_DISPI_INDEX_Y_OFFSET 0x9
|
||||
|
||||
%define VBE_DISPI_ENABLED 0x01
|
||||
%define VBE_DISPI_LFB_ENABLED 0x40
|
||||
|
||||
%macro BochsWrite 2
|
||||
push dx
|
||||
push ax
|
||||
|
||||
mov dx, VBE_DISPI_IOPORT_INDEX
|
||||
mov ax, %1
|
||||
out dx, ax
|
||||
|
||||
mov dx, VBE_DISPI_IOPORT_DATA
|
||||
mov ax, %2
|
||||
out dx, ax
|
||||
|
||||
pop ax
|
||||
pop dx
|
||||
%endmacro
|
||||
|
||||
SetMode:
|
||||
push dx
|
||||
push ax
|
||||
|
||||
DebugLog StrEnterSetMode
|
||||
|
||||
cmp bx, 0x40f1
|
||||
je KnownMode2
|
||||
DebugLog StrUnknownMode
|
||||
jmp Hang
|
||||
KnownMode2:
|
||||
|
||||
; unblank
|
||||
mov dx, ATT_ADDRESS_REGISTER
|
||||
mov al, 0x20
|
||||
out dx, al
|
||||
|
||||
BochsWrite VBE_DISPI_INDEX_ENABLE, 0
|
||||
BochsWrite VBE_DISPI_INDEX_BANK, 0
|
||||
BochsWrite VBE_DISPI_INDEX_X_OFFSET, 0
|
||||
BochsWrite VBE_DISPI_INDEX_Y_OFFSET, 0
|
||||
BochsWrite VBE_DISPI_INDEX_BPP, 32
|
||||
BochsWrite VBE_DISPI_INDEX_XRES, 1024
|
||||
BochsWrite VBE_DISPI_INDEX_VIRT_WIDTH, 1024
|
||||
BochsWrite VBE_DISPI_INDEX_YRES, 768
|
||||
BochsWrite VBE_DISPI_INDEX_VIRT_HEIGHT, 768
|
||||
BochsWrite VBE_DISPI_INDEX_ENABLE, VBE_DISPI_ENABLED | VBE_DISPI_LFB_ENABLED
|
||||
|
||||
pop ax
|
||||
pop dx
|
||||
jmp Success
|
||||
|
||||
|
||||
GetMode:
|
||||
DebugLog StrEnterGetMode
|
||||
mov bx, 0x40f1
|
||||
jmp Success
|
||||
|
||||
|
||||
GetPmCapabilities:
|
||||
DebugLog StrGetPmCapabilities
|
||||
jmp Unsupported
|
||||
|
||||
|
||||
ReadEdid:
|
||||
DebugLog StrReadEdid
|
||||
jmp Unsupported
|
||||
|
||||
|
||||
SetModeLegacy:
|
||||
DebugLog StrEnterSetModeLegacy
|
||||
|
||||
cmp al, 0x03
|
||||
je KnownMode3
|
||||
cmp al, 0x12
|
||||
je KnownMode4
|
||||
DebugLog StrUnknownMode
|
||||
jmp Hang
|
||||
KnownMode3:
|
||||
mov al, 0x30
|
||||
jmp SetModeLegacyDone
|
||||
KnownMode4:
|
||||
mov al, 0x20
|
||||
SetModeLegacyDone:
|
||||
DebugLog StrExitSuccess
|
||||
iret
|
||||
|
||||
|
||||
Success:
|
||||
DebugLog StrExitSuccess
|
||||
mov ax, 0x004f
|
||||
iret
|
||||
|
||||
|
||||
Unsupported:
|
||||
DebugLog StrExitUnsupported
|
||||
mov ax, 0x014f
|
||||
iret
|
||||
|
||||
|
||||
%ifdef DEBUG
|
||||
PrintStringSi:
|
||||
pusha
|
||||
push ds ; save original
|
||||
push cs
|
||||
pop ds
|
||||
mov dx, 0x0402
|
||||
PrintStringSiLoop:
|
||||
lodsb
|
||||
cmp al, 0
|
||||
je PrintStringSiDone
|
||||
out dx, al
|
||||
jmp PrintStringSiLoop
|
||||
PrintStringSiDone:
|
||||
pop ds ; restore original
|
||||
popa
|
||||
ret
|
||||
|
||||
|
||||
StrExitSuccess:
|
||||
db 'Exit', 0x0a, 0
|
||||
|
||||
StrExitUnsupported:
|
||||
db 'Unsupported', 0x0a, 0
|
||||
|
||||
StrUnknownFunction:
|
||||
db 'Unknown Function', 0x0a, 0
|
||||
|
||||
StrEnterGetInfo:
|
||||
db 'GetInfo', 0x0a, 0
|
||||
|
||||
StrEnterGetModeInfo:
|
||||
db 'GetModeInfo', 0x0a, 0
|
||||
|
||||
StrEnterGetMode:
|
||||
db 'GetMode', 0x0a, 0
|
||||
|
||||
StrEnterSetMode:
|
||||
db 'SetMode', 0x0a, 0
|
||||
|
||||
StrEnterSetModeLegacy:
|
||||
db 'SetModeLegacy', 0x0a, 0
|
||||
|
||||
StrUnknownMode:
|
||||
db 'Unknown Mode', 0x0a, 0
|
||||
|
||||
StrGetPmCapabilities:
|
||||
db 'GetPmCapabilities', 0x0a, 0
|
||||
|
||||
StrReadEdid:
|
||||
db 'ReadEdid', 0x0a, 0
|
||||
%endif
|
@ -1,328 +0,0 @@
|
||||
/** @file
|
||||
Install a fake VGABIOS service handler (real mode Int10h) for the buggy
|
||||
Windows 2008 R2 SP1 UEFI guest.
|
||||
|
||||
The handler is never meant to be directly executed by a VCPU; it's there for
|
||||
the internal real mode emulator of Windows 2008 R2 SP1.
|
||||
|
||||
The code is based on Ralf Brown's Interrupt List:
|
||||
<http://www.cs.cmu.edu/~ralf/files.html>
|
||||
<http://www.ctyme.com/rbrown.htm>
|
||||
|
||||
Copyright (C) 2014, Red Hat, Inc.
|
||||
Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
**/
|
||||
|
||||
#include <IndustryStandard/LegacyVgaBios.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/PciLib.h>
|
||||
#include <Library/PrintLib.h>
|
||||
#include <OvmfPlatforms.h>
|
||||
|
||||
#include "Qemu.h"
|
||||
#include "VbeShim.h"
|
||||
|
||||
#pragma pack (1)
|
||||
typedef struct {
|
||||
UINT16 Offset;
|
||||
UINT16 Segment;
|
||||
} IVT_ENTRY;
|
||||
#pragma pack ()
|
||||
|
||||
//
|
||||
// This string is displayed by Windows 2008 R2 SP1 in the Screen Resolution,
|
||||
// Advanced Settings dialog. It should be short.
|
||||
//
|
||||
STATIC CONST CHAR8 mProductRevision[] = "OVMF Int10h (fake)";
|
||||
|
||||
/**
|
||||
Install the VBE Info and VBE Mode Info structures, and the VBE service
|
||||
handler routine in the C segment. Point the real-mode Int10h interrupt vector
|
||||
to the handler. The only advertised mode is 1024x768x32.
|
||||
|
||||
@param[in] CardName Name of the video card to be exposed in the
|
||||
Product Name field of the VBE Info structure. The
|
||||
parameter must originate from a
|
||||
QEMU_VIDEO_CARD.Name field.
|
||||
@param[in] FrameBufferBase Guest-physical base address of the video card's
|
||||
frame buffer.
|
||||
**/
|
||||
VOID
|
||||
InstallVbeShim (
|
||||
IN CONST CHAR16 *CardName,
|
||||
IN EFI_PHYSICAL_ADDRESS FrameBufferBase
|
||||
)
|
||||
{
|
||||
EFI_PHYSICAL_ADDRESS Segment0, SegmentC, SegmentF;
|
||||
UINTN Segment0Pages;
|
||||
IVT_ENTRY *Int0x10;
|
||||
EFI_STATUS Segment0AllocationStatus;
|
||||
UINT16 HostBridgeDevId;
|
||||
UINTN Pam1Address;
|
||||
UINT8 Pam1;
|
||||
UINTN SegmentCPages;
|
||||
VBE_INFO *VbeInfoFull;
|
||||
VBE_INFO_BASE *VbeInfo;
|
||||
UINT8 *Ptr;
|
||||
UINTN Printed;
|
||||
VBE_MODE_INFO *VbeModeInfo;
|
||||
|
||||
if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & (BIT0|BIT7)) == BIT0) {
|
||||
DEBUG ((
|
||||
DEBUG_WARN,
|
||||
"%a: page 0 protected, not installing VBE shim\n",
|
||||
__func__
|
||||
));
|
||||
DEBUG ((
|
||||
DEBUG_WARN,
|
||||
"%a: page 0 protection prevents Windows 7 from booting anyway\n",
|
||||
__func__
|
||||
));
|
||||
return;
|
||||
}
|
||||
|
||||
Segment0 = 0x00000;
|
||||
SegmentC = 0xC0000;
|
||||
SegmentF = 0xF0000;
|
||||
|
||||
//
|
||||
// Attempt to cover the real mode IVT with an allocation. This is a UEFI
|
||||
// driver, hence the arch protocols have been installed previously. Among
|
||||
// those, the CPU arch protocol has configured the IDT, so we can overwrite
|
||||
// the IVT used in real mode.
|
||||
//
|
||||
// The allocation request may fail, eg. if LegacyBiosDxe has already run.
|
||||
//
|
||||
Segment0Pages = 1;
|
||||
Int0x10 = (IVT_ENTRY *)(UINTN)(Segment0 + 0x10 * sizeof (IVT_ENTRY));
|
||||
Segment0AllocationStatus = gBS->AllocatePages (
|
||||
AllocateAddress,
|
||||
EfiBootServicesCode,
|
||||
Segment0Pages,
|
||||
&Segment0
|
||||
);
|
||||
|
||||
if (EFI_ERROR (Segment0AllocationStatus)) {
|
||||
EFI_PHYSICAL_ADDRESS Handler;
|
||||
|
||||
//
|
||||
// Check if a video BIOS handler has been installed previously -- we
|
||||
// shouldn't override a real video BIOS with our shim, nor our own shim if
|
||||
// it's already present.
|
||||
//
|
||||
Handler = (Int0x10->Segment << 4) + Int0x10->Offset;
|
||||
if ((Handler >= SegmentC) && (Handler < SegmentF)) {
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
"%a: Video BIOS handler found at %04x:%04x\n",
|
||||
__func__,
|
||||
Int0x10->Segment,
|
||||
Int0x10->Offset
|
||||
));
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// Otherwise we'll overwrite the Int10h vector, even though we may not own
|
||||
// the page at zero.
|
||||
//
|
||||
DEBUG ((
|
||||
DEBUG_INFO,
|
||||
"%a: failed to allocate page at zero: %r\n",
|
||||
__func__,
|
||||
Segment0AllocationStatus
|
||||
));
|
||||
} else {
|
||||
//
|
||||
// We managed to allocate the page at zero. SVN r14218 guarantees that it
|
||||
// is NUL-filled.
|
||||
//
|
||||
ASSERT (Int0x10->Segment == 0x0000);
|
||||
ASSERT (Int0x10->Offset == 0x0000);
|
||||
}
|
||||
|
||||
//
|
||||
// Put the shim in place first.
|
||||
//
|
||||
// Start by determining the address of the PAM1 register.
|
||||
//
|
||||
HostBridgeDevId = PcdGet16 (PcdOvmfHostBridgePciDevId);
|
||||
switch (HostBridgeDevId) {
|
||||
case INTEL_82441_DEVICE_ID:
|
||||
Pam1Address = PMC_REGISTER_PIIX4 (PIIX4_PAM1);
|
||||
break;
|
||||
case INTEL_Q35_MCH_DEVICE_ID:
|
||||
Pam1Address = DRAMC_REGISTER_Q35 (MCH_PAM1);
|
||||
break;
|
||||
case MICROVM_PSEUDO_DEVICE_ID:
|
||||
return;
|
||||
default:
|
||||
DEBUG ((
|
||||
DEBUG_ERROR,
|
||||
"%a: unknown host bridge device ID: 0x%04x\n",
|
||||
__func__,
|
||||
HostBridgeDevId
|
||||
));
|
||||
ASSERT (FALSE);
|
||||
|
||||
if (!EFI_ERROR (Segment0AllocationStatus)) {
|
||||
gBS->FreePages (Segment0, Segment0Pages);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// low nibble covers 0xC0000 to 0xC3FFF
|
||||
// high nibble covers 0xC4000 to 0xC7FFF
|
||||
// bit1 in each nibble is Write Enable
|
||||
// bit0 in each nibble is Read Enable
|
||||
//
|
||||
Pam1 = PciRead8 (Pam1Address);
|
||||
PciWrite8 (Pam1Address, Pam1 | (BIT1 | BIT0));
|
||||
|
||||
//
|
||||
// We never added memory space during PEI or DXE for the C segment, so we
|
||||
// don't need to (and can't) allocate from there. Also, guest operating
|
||||
// systems will see a hole in the UEFI memory map there.
|
||||
//
|
||||
SegmentCPages = 4;
|
||||
|
||||
ASSERT (sizeof mVbeShim <= EFI_PAGES_TO_SIZE (SegmentCPages));
|
||||
CopyMem ((VOID *)(UINTN)SegmentC, mVbeShim, sizeof mVbeShim);
|
||||
|
||||
//
|
||||
// Fill in the VBE INFO structure.
|
||||
//
|
||||
VbeInfoFull = (VBE_INFO *)(UINTN)SegmentC;
|
||||
VbeInfo = &VbeInfoFull->Base;
|
||||
Ptr = VbeInfoFull->Buffer;
|
||||
|
||||
CopyMem (VbeInfo->Signature, "VESA", 4);
|
||||
VbeInfo->VesaVersion = 0x0300;
|
||||
|
||||
VbeInfo->OemNameAddress = (UINT32)SegmentC << 12 | (UINT16)(UINTN)Ptr;
|
||||
CopyMem (Ptr, "QEMU", 5);
|
||||
Ptr += 5;
|
||||
|
||||
VbeInfo->Capabilities = BIT0; // DAC can be switched into 8-bit mode
|
||||
|
||||
VbeInfo->ModeListAddress = (UINT32)SegmentC << 12 | (UINT16)(UINTN)Ptr;
|
||||
*(UINT16 *)Ptr = 0x00f1; // mode number
|
||||
Ptr += 2;
|
||||
*(UINT16 *)Ptr = 0xFFFF; // mode list terminator
|
||||
Ptr += 2;
|
||||
|
||||
VbeInfo->VideoMem64K = (UINT16)((1024 * 768 * 4 + 65535) / 65536);
|
||||
VbeInfo->OemSoftwareVersion = 0x0000;
|
||||
|
||||
VbeInfo->VendorNameAddress = (UINT32)SegmentC << 12 | (UINT16)(UINTN)Ptr;
|
||||
CopyMem (Ptr, "OVMF", 5);
|
||||
Ptr += 5;
|
||||
|
||||
VbeInfo->ProductNameAddress = (UINT32)SegmentC << 12 | (UINT16)(UINTN)Ptr;
|
||||
Printed = AsciiSPrint (
|
||||
(CHAR8 *)Ptr,
|
||||
sizeof VbeInfoFull->Buffer - (Ptr - VbeInfoFull->Buffer),
|
||||
"%s",
|
||||
CardName
|
||||
);
|
||||
Ptr += Printed + 1;
|
||||
|
||||
VbeInfo->ProductRevAddress = (UINT32)SegmentC << 12 | (UINT16)(UINTN)Ptr;
|
||||
CopyMem (Ptr, mProductRevision, sizeof mProductRevision);
|
||||
Ptr += sizeof mProductRevision;
|
||||
|
||||
ASSERT (sizeof VbeInfoFull->Buffer >= Ptr - VbeInfoFull->Buffer);
|
||||
ZeroMem (Ptr, sizeof VbeInfoFull->Buffer - (Ptr - VbeInfoFull->Buffer));
|
||||
|
||||
//
|
||||
// Fil in the VBE MODE INFO structure.
|
||||
//
|
||||
VbeModeInfo = (VBE_MODE_INFO *)(VbeInfoFull + 1);
|
||||
|
||||
//
|
||||
// bit0: mode supported by present hardware configuration
|
||||
// bit1: optional information available (must be =1 for VBE v1.2+)
|
||||
// bit3: set if color, clear if monochrome
|
||||
// bit4: set if graphics mode, clear if text mode
|
||||
// bit5: mode is not VGA-compatible
|
||||
// bit7: linear framebuffer mode supported
|
||||
//
|
||||
VbeModeInfo->ModeAttr = BIT7 | BIT5 | BIT4 | BIT3 | BIT1 | BIT0;
|
||||
|
||||
//
|
||||
// bit0: exists
|
||||
// bit1: bit1: readable
|
||||
// bit2: writeable
|
||||
//
|
||||
VbeModeInfo->WindowAAttr = BIT2 | BIT1 | BIT0;
|
||||
|
||||
VbeModeInfo->WindowBAttr = 0x00;
|
||||
VbeModeInfo->WindowGranularityKB = 0x0040;
|
||||
VbeModeInfo->WindowSizeKB = 0x0040;
|
||||
VbeModeInfo->WindowAStartSegment = 0xA000;
|
||||
VbeModeInfo->WindowBStartSegment = 0x0000;
|
||||
VbeModeInfo->WindowPositioningAddress = 0x0000;
|
||||
VbeModeInfo->BytesPerScanLine = 1024 * 4;
|
||||
|
||||
VbeModeInfo->Width = 1024;
|
||||
VbeModeInfo->Height = 768;
|
||||
VbeModeInfo->CharCellWidth = 8;
|
||||
VbeModeInfo->CharCellHeight = 16;
|
||||
VbeModeInfo->NumPlanes = 1;
|
||||
VbeModeInfo->BitsPerPixel = 32;
|
||||
VbeModeInfo->NumBanks = 1;
|
||||
VbeModeInfo->MemoryModel = 6; // direct color
|
||||
VbeModeInfo->BankSizeKB = 0;
|
||||
VbeModeInfo->NumImagePagesLessOne = 0;
|
||||
VbeModeInfo->Vbe3 = 0x01;
|
||||
|
||||
VbeModeInfo->RedMaskSize = 8;
|
||||
VbeModeInfo->RedMaskPos = 16;
|
||||
VbeModeInfo->GreenMaskSize = 8;
|
||||
VbeModeInfo->GreenMaskPos = 8;
|
||||
VbeModeInfo->BlueMaskSize = 8;
|
||||
VbeModeInfo->BlueMaskPos = 0;
|
||||
VbeModeInfo->ReservedMaskSize = 8;
|
||||
VbeModeInfo->ReservedMaskPos = 24;
|
||||
|
||||
//
|
||||
// bit1: Bytes in reserved field may be used by application
|
||||
//
|
||||
VbeModeInfo->DirectColorModeInfo = BIT1;
|
||||
|
||||
VbeModeInfo->LfbAddress = (UINT32)FrameBufferBase;
|
||||
VbeModeInfo->OffScreenAddress = 0;
|
||||
VbeModeInfo->OffScreenSizeKB = 0;
|
||||
|
||||
VbeModeInfo->BytesPerScanLineLinear = 1024 * 4;
|
||||
VbeModeInfo->NumImagesLessOneBanked = 0;
|
||||
VbeModeInfo->NumImagesLessOneLinear = 0;
|
||||
VbeModeInfo->RedMaskSizeLinear = 8;
|
||||
VbeModeInfo->RedMaskPosLinear = 16;
|
||||
VbeModeInfo->GreenMaskSizeLinear = 8;
|
||||
VbeModeInfo->GreenMaskPosLinear = 8;
|
||||
VbeModeInfo->BlueMaskSizeLinear = 8;
|
||||
VbeModeInfo->BlueMaskPosLinear = 0;
|
||||
VbeModeInfo->ReservedMaskSizeLinear = 8;
|
||||
VbeModeInfo->ReservedMaskPosLinear = 24;
|
||||
VbeModeInfo->MaxPixelClockHz = 0;
|
||||
|
||||
ZeroMem (VbeModeInfo->Reserved, sizeof VbeModeInfo->Reserved);
|
||||
|
||||
//
|
||||
// Clear Write Enable (bit1), keep Read Enable (bit0) set
|
||||
//
|
||||
PciWrite8 (Pam1Address, (Pam1 & ~BIT1) | BIT0);
|
||||
|
||||
//
|
||||
// Second, point the Int10h vector at the shim.
|
||||
//
|
||||
Int0x10->Segment = (UINT16)((UINT32)SegmentC >> 4);
|
||||
Int0x10->Offset = (UINT16)((UINTN)(VbeModeInfo + 1) - SegmentC);
|
||||
|
||||
DEBUG ((DEBUG_INFO, "%a: VBE shim installed\n", __func__));
|
||||
}
|
@ -1,701 +0,0 @@
|
||||
//
|
||||
// THIS FILE WAS GENERATED BY "VbeShim.sh". DO NOT EDIT.
|
||||
//
|
||||
#ifndef _VBE_SHIM_H_
|
||||
#define _VBE_SHIM_H_
|
||||
STATIC CONST UINT8 mVbeShim[] = {
|
||||
/* 00000000 nop */ 0x90,
|
||||
/* 00000001 nop */ 0x90,
|
||||
/* 00000002 nop */ 0x90,
|
||||
/* 00000003 nop */ 0x90,
|
||||
/* 00000004 nop */ 0x90,
|
||||
/* 00000005 nop */ 0x90,
|
||||
/* 00000006 nop */ 0x90,
|
||||
/* 00000007 nop */ 0x90,
|
||||
/* 00000008 nop */ 0x90,
|
||||
/* 00000009 nop */ 0x90,
|
||||
/* 0000000A nop */ 0x90,
|
||||
/* 0000000B nop */ 0x90,
|
||||
/* 0000000C nop */ 0x90,
|
||||
/* 0000000D nop */ 0x90,
|
||||
/* 0000000E nop */ 0x90,
|
||||
/* 0000000F nop */ 0x90,
|
||||
/* 00000010 nop */ 0x90,
|
||||
/* 00000011 nop */ 0x90,
|
||||
/* 00000012 nop */ 0x90,
|
||||
/* 00000013 nop */ 0x90,
|
||||
/* 00000014 nop */ 0x90,
|
||||
/* 00000015 nop */ 0x90,
|
||||
/* 00000016 nop */ 0x90,
|
||||
/* 00000017 nop */ 0x90,
|
||||
/* 00000018 nop */ 0x90,
|
||||
/* 00000019 nop */ 0x90,
|
||||
/* 0000001A nop */ 0x90,
|
||||
/* 0000001B nop */ 0x90,
|
||||
/* 0000001C nop */ 0x90,
|
||||
/* 0000001D nop */ 0x90,
|
||||
/* 0000001E nop */ 0x90,
|
||||
/* 0000001F nop */ 0x90,
|
||||
/* 00000020 nop */ 0x90,
|
||||
/* 00000021 nop */ 0x90,
|
||||
/* 00000022 nop */ 0x90,
|
||||
/* 00000023 nop */ 0x90,
|
||||
/* 00000024 nop */ 0x90,
|
||||
/* 00000025 nop */ 0x90,
|
||||
/* 00000026 nop */ 0x90,
|
||||
/* 00000027 nop */ 0x90,
|
||||
/* 00000028 nop */ 0x90,
|
||||
/* 00000029 nop */ 0x90,
|
||||
/* 0000002A nop */ 0x90,
|
||||
/* 0000002B nop */ 0x90,
|
||||
/* 0000002C nop */ 0x90,
|
||||
/* 0000002D nop */ 0x90,
|
||||
/* 0000002E nop */ 0x90,
|
||||
/* 0000002F nop */ 0x90,
|
||||
/* 00000030 nop */ 0x90,
|
||||
/* 00000031 nop */ 0x90,
|
||||
/* 00000032 nop */ 0x90,
|
||||
/* 00000033 nop */ 0x90,
|
||||
/* 00000034 nop */ 0x90,
|
||||
/* 00000035 nop */ 0x90,
|
||||
/* 00000036 nop */ 0x90,
|
||||
/* 00000037 nop */ 0x90,
|
||||
/* 00000038 nop */ 0x90,
|
||||
/* 00000039 nop */ 0x90,
|
||||
/* 0000003A nop */ 0x90,
|
||||
/* 0000003B nop */ 0x90,
|
||||
/* 0000003C nop */ 0x90,
|
||||
/* 0000003D nop */ 0x90,
|
||||
/* 0000003E nop */ 0x90,
|
||||
/* 0000003F nop */ 0x90,
|
||||
/* 00000040 nop */ 0x90,
|
||||
/* 00000041 nop */ 0x90,
|
||||
/* 00000042 nop */ 0x90,
|
||||
/* 00000043 nop */ 0x90,
|
||||
/* 00000044 nop */ 0x90,
|
||||
/* 00000045 nop */ 0x90,
|
||||
/* 00000046 nop */ 0x90,
|
||||
/* 00000047 nop */ 0x90,
|
||||
/* 00000048 nop */ 0x90,
|
||||
/* 00000049 nop */ 0x90,
|
||||
/* 0000004A nop */ 0x90,
|
||||
/* 0000004B nop */ 0x90,
|
||||
/* 0000004C nop */ 0x90,
|
||||
/* 0000004D nop */ 0x90,
|
||||
/* 0000004E nop */ 0x90,
|
||||
/* 0000004F nop */ 0x90,
|
||||
/* 00000050 nop */ 0x90,
|
||||
/* 00000051 nop */ 0x90,
|
||||
/* 00000052 nop */ 0x90,
|
||||
/* 00000053 nop */ 0x90,
|
||||
/* 00000054 nop */ 0x90,
|
||||
/* 00000055 nop */ 0x90,
|
||||
/* 00000056 nop */ 0x90,
|
||||
/* 00000057 nop */ 0x90,
|
||||
/* 00000058 nop */ 0x90,
|
||||
/* 00000059 nop */ 0x90,
|
||||
/* 0000005A nop */ 0x90,
|
||||
/* 0000005B nop */ 0x90,
|
||||
/* 0000005C nop */ 0x90,
|
||||
/* 0000005D nop */ 0x90,
|
||||
/* 0000005E nop */ 0x90,
|
||||
/* 0000005F nop */ 0x90,
|
||||
/* 00000060 nop */ 0x90,
|
||||
/* 00000061 nop */ 0x90,
|
||||
/* 00000062 nop */ 0x90,
|
||||
/* 00000063 nop */ 0x90,
|
||||
/* 00000064 nop */ 0x90,
|
||||
/* 00000065 nop */ 0x90,
|
||||
/* 00000066 nop */ 0x90,
|
||||
/* 00000067 nop */ 0x90,
|
||||
/* 00000068 nop */ 0x90,
|
||||
/* 00000069 nop */ 0x90,
|
||||
/* 0000006A nop */ 0x90,
|
||||
/* 0000006B nop */ 0x90,
|
||||
/* 0000006C nop */ 0x90,
|
||||
/* 0000006D nop */ 0x90,
|
||||
/* 0000006E nop */ 0x90,
|
||||
/* 0000006F nop */ 0x90,
|
||||
/* 00000070 nop */ 0x90,
|
||||
/* 00000071 nop */ 0x90,
|
||||
/* 00000072 nop */ 0x90,
|
||||
/* 00000073 nop */ 0x90,
|
||||
/* 00000074 nop */ 0x90,
|
||||
/* 00000075 nop */ 0x90,
|
||||
/* 00000076 nop */ 0x90,
|
||||
/* 00000077 nop */ 0x90,
|
||||
/* 00000078 nop */ 0x90,
|
||||
/* 00000079 nop */ 0x90,
|
||||
/* 0000007A nop */ 0x90,
|
||||
/* 0000007B nop */ 0x90,
|
||||
/* 0000007C nop */ 0x90,
|
||||
/* 0000007D nop */ 0x90,
|
||||
/* 0000007E nop */ 0x90,
|
||||
/* 0000007F nop */ 0x90,
|
||||
/* 00000080 nop */ 0x90,
|
||||
/* 00000081 nop */ 0x90,
|
||||
/* 00000082 nop */ 0x90,
|
||||
/* 00000083 nop */ 0x90,
|
||||
/* 00000084 nop */ 0x90,
|
||||
/* 00000085 nop */ 0x90,
|
||||
/* 00000086 nop */ 0x90,
|
||||
/* 00000087 nop */ 0x90,
|
||||
/* 00000088 nop */ 0x90,
|
||||
/* 00000089 nop */ 0x90,
|
||||
/* 0000008A nop */ 0x90,
|
||||
/* 0000008B nop */ 0x90,
|
||||
/* 0000008C nop */ 0x90,
|
||||
/* 0000008D nop */ 0x90,
|
||||
/* 0000008E nop */ 0x90,
|
||||
/* 0000008F nop */ 0x90,
|
||||
/* 00000090 nop */ 0x90,
|
||||
/* 00000091 nop */ 0x90,
|
||||
/* 00000092 nop */ 0x90,
|
||||
/* 00000093 nop */ 0x90,
|
||||
/* 00000094 nop */ 0x90,
|
||||
/* 00000095 nop */ 0x90,
|
||||
/* 00000096 nop */ 0x90,
|
||||
/* 00000097 nop */ 0x90,
|
||||
/* 00000098 nop */ 0x90,
|
||||
/* 00000099 nop */ 0x90,
|
||||
/* 0000009A nop */ 0x90,
|
||||
/* 0000009B nop */ 0x90,
|
||||
/* 0000009C nop */ 0x90,
|
||||
/* 0000009D nop */ 0x90,
|
||||
/* 0000009E nop */ 0x90,
|
||||
/* 0000009F nop */ 0x90,
|
||||
/* 000000A0 nop */ 0x90,
|
||||
/* 000000A1 nop */ 0x90,
|
||||
/* 000000A2 nop */ 0x90,
|
||||
/* 000000A3 nop */ 0x90,
|
||||
/* 000000A4 nop */ 0x90,
|
||||
/* 000000A5 nop */ 0x90,
|
||||
/* 000000A6 nop */ 0x90,
|
||||
/* 000000A7 nop */ 0x90,
|
||||
/* 000000A8 nop */ 0x90,
|
||||
/* 000000A9 nop */ 0x90,
|
||||
/* 000000AA nop */ 0x90,
|
||||
/* 000000AB nop */ 0x90,
|
||||
/* 000000AC nop */ 0x90,
|
||||
/* 000000AD nop */ 0x90,
|
||||
/* 000000AE nop */ 0x90,
|
||||
/* 000000AF nop */ 0x90,
|
||||
/* 000000B0 nop */ 0x90,
|
||||
/* 000000B1 nop */ 0x90,
|
||||
/* 000000B2 nop */ 0x90,
|
||||
/* 000000B3 nop */ 0x90,
|
||||
/* 000000B4 nop */ 0x90,
|
||||
/* 000000B5 nop */ 0x90,
|
||||
/* 000000B6 nop */ 0x90,
|
||||
/* 000000B7 nop */ 0x90,
|
||||
/* 000000B8 nop */ 0x90,
|
||||
/* 000000B9 nop */ 0x90,
|
||||
/* 000000BA nop */ 0x90,
|
||||
/* 000000BB nop */ 0x90,
|
||||
/* 000000BC nop */ 0x90,
|
||||
/* 000000BD nop */ 0x90,
|
||||
/* 000000BE nop */ 0x90,
|
||||
/* 000000BF nop */ 0x90,
|
||||
/* 000000C0 nop */ 0x90,
|
||||
/* 000000C1 nop */ 0x90,
|
||||
/* 000000C2 nop */ 0x90,
|
||||
/* 000000C3 nop */ 0x90,
|
||||
/* 000000C4 nop */ 0x90,
|
||||
/* 000000C5 nop */ 0x90,
|
||||
/* 000000C6 nop */ 0x90,
|
||||
/* 000000C7 nop */ 0x90,
|
||||
/* 000000C8 nop */ 0x90,
|
||||
/* 000000C9 nop */ 0x90,
|
||||
/* 000000CA nop */ 0x90,
|
||||
/* 000000CB nop */ 0x90,
|
||||
/* 000000CC nop */ 0x90,
|
||||
/* 000000CD nop */ 0x90,
|
||||
/* 000000CE nop */ 0x90,
|
||||
/* 000000CF nop */ 0x90,
|
||||
/* 000000D0 nop */ 0x90,
|
||||
/* 000000D1 nop */ 0x90,
|
||||
/* 000000D2 nop */ 0x90,
|
||||
/* 000000D3 nop */ 0x90,
|
||||
/* 000000D4 nop */ 0x90,
|
||||
/* 000000D5 nop */ 0x90,
|
||||
/* 000000D6 nop */ 0x90,
|
||||
/* 000000D7 nop */ 0x90,
|
||||
/* 000000D8 nop */ 0x90,
|
||||
/* 000000D9 nop */ 0x90,
|
||||
/* 000000DA nop */ 0x90,
|
||||
/* 000000DB nop */ 0x90,
|
||||
/* 000000DC nop */ 0x90,
|
||||
/* 000000DD nop */ 0x90,
|
||||
/* 000000DE nop */ 0x90,
|
||||
/* 000000DF nop */ 0x90,
|
||||
/* 000000E0 nop */ 0x90,
|
||||
/* 000000E1 nop */ 0x90,
|
||||
/* 000000E2 nop */ 0x90,
|
||||
/* 000000E3 nop */ 0x90,
|
||||
/* 000000E4 nop */ 0x90,
|
||||
/* 000000E5 nop */ 0x90,
|
||||
/* 000000E6 nop */ 0x90,
|
||||
/* 000000E7 nop */ 0x90,
|
||||
/* 000000E8 nop */ 0x90,
|
||||
/* 000000E9 nop */ 0x90,
|
||||
/* 000000EA nop */ 0x90,
|
||||
/* 000000EB nop */ 0x90,
|
||||
/* 000000EC nop */ 0x90,
|
||||
/* 000000ED nop */ 0x90,
|
||||
/* 000000EE nop */ 0x90,
|
||||
/* 000000EF nop */ 0x90,
|
||||
/* 000000F0 nop */ 0x90,
|
||||
/* 000000F1 nop */ 0x90,
|
||||
/* 000000F2 nop */ 0x90,
|
||||
/* 000000F3 nop */ 0x90,
|
||||
/* 000000F4 nop */ 0x90,
|
||||
/* 000000F5 nop */ 0x90,
|
||||
/* 000000F6 nop */ 0x90,
|
||||
/* 000000F7 nop */ 0x90,
|
||||
/* 000000F8 nop */ 0x90,
|
||||
/* 000000F9 nop */ 0x90,
|
||||
/* 000000FA nop */ 0x90,
|
||||
/* 000000FB nop */ 0x90,
|
||||
/* 000000FC nop */ 0x90,
|
||||
/* 000000FD nop */ 0x90,
|
||||
/* 000000FE nop */ 0x90,
|
||||
/* 000000FF nop */ 0x90,
|
||||
/* 00000100 nop */ 0x90,
|
||||
/* 00000101 nop */ 0x90,
|
||||
/* 00000102 nop */ 0x90,
|
||||
/* 00000103 nop */ 0x90,
|
||||
/* 00000104 nop */ 0x90,
|
||||
/* 00000105 nop */ 0x90,
|
||||
/* 00000106 nop */ 0x90,
|
||||
/* 00000107 nop */ 0x90,
|
||||
/* 00000108 nop */ 0x90,
|
||||
/* 00000109 nop */ 0x90,
|
||||
/* 0000010A nop */ 0x90,
|
||||
/* 0000010B nop */ 0x90,
|
||||
/* 0000010C nop */ 0x90,
|
||||
/* 0000010D nop */ 0x90,
|
||||
/* 0000010E nop */ 0x90,
|
||||
/* 0000010F nop */ 0x90,
|
||||
/* 00000110 nop */ 0x90,
|
||||
/* 00000111 nop */ 0x90,
|
||||
/* 00000112 nop */ 0x90,
|
||||
/* 00000113 nop */ 0x90,
|
||||
/* 00000114 nop */ 0x90,
|
||||
/* 00000115 nop */ 0x90,
|
||||
/* 00000116 nop */ 0x90,
|
||||
/* 00000117 nop */ 0x90,
|
||||
/* 00000118 nop */ 0x90,
|
||||
/* 00000119 nop */ 0x90,
|
||||
/* 0000011A nop */ 0x90,
|
||||
/* 0000011B nop */ 0x90,
|
||||
/* 0000011C nop */ 0x90,
|
||||
/* 0000011D nop */ 0x90,
|
||||
/* 0000011E nop */ 0x90,
|
||||
/* 0000011F nop */ 0x90,
|
||||
/* 00000120 nop */ 0x90,
|
||||
/* 00000121 nop */ 0x90,
|
||||
/* 00000122 nop */ 0x90,
|
||||
/* 00000123 nop */ 0x90,
|
||||
/* 00000124 nop */ 0x90,
|
||||
/* 00000125 nop */ 0x90,
|
||||
/* 00000126 nop */ 0x90,
|
||||
/* 00000127 nop */ 0x90,
|
||||
/* 00000128 nop */ 0x90,
|
||||
/* 00000129 nop */ 0x90,
|
||||
/* 0000012A nop */ 0x90,
|
||||
/* 0000012B nop */ 0x90,
|
||||
/* 0000012C nop */ 0x90,
|
||||
/* 0000012D nop */ 0x90,
|
||||
/* 0000012E nop */ 0x90,
|
||||
/* 0000012F nop */ 0x90,
|
||||
/* 00000130 nop */ 0x90,
|
||||
/* 00000131 nop */ 0x90,
|
||||
/* 00000132 nop */ 0x90,
|
||||
/* 00000133 nop */ 0x90,
|
||||
/* 00000134 nop */ 0x90,
|
||||
/* 00000135 nop */ 0x90,
|
||||
/* 00000136 nop */ 0x90,
|
||||
/* 00000137 nop */ 0x90,
|
||||
/* 00000138 nop */ 0x90,
|
||||
/* 00000139 nop */ 0x90,
|
||||
/* 0000013A nop */ 0x90,
|
||||
/* 0000013B nop */ 0x90,
|
||||
/* 0000013C nop */ 0x90,
|
||||
/* 0000013D nop */ 0x90,
|
||||
/* 0000013E nop */ 0x90,
|
||||
/* 0000013F nop */ 0x90,
|
||||
/* 00000140 nop */ 0x90,
|
||||
/* 00000141 nop */ 0x90,
|
||||
/* 00000142 nop */ 0x90,
|
||||
/* 00000143 nop */ 0x90,
|
||||
/* 00000144 nop */ 0x90,
|
||||
/* 00000145 nop */ 0x90,
|
||||
/* 00000146 nop */ 0x90,
|
||||
/* 00000147 nop */ 0x90,
|
||||
/* 00000148 nop */ 0x90,
|
||||
/* 00000149 nop */ 0x90,
|
||||
/* 0000014A nop */ 0x90,
|
||||
/* 0000014B nop */ 0x90,
|
||||
/* 0000014C nop */ 0x90,
|
||||
/* 0000014D nop */ 0x90,
|
||||
/* 0000014E nop */ 0x90,
|
||||
/* 0000014F nop */ 0x90,
|
||||
/* 00000150 nop */ 0x90,
|
||||
/* 00000151 nop */ 0x90,
|
||||
/* 00000152 nop */ 0x90,
|
||||
/* 00000153 nop */ 0x90,
|
||||
/* 00000154 nop */ 0x90,
|
||||
/* 00000155 nop */ 0x90,
|
||||
/* 00000156 nop */ 0x90,
|
||||
/* 00000157 nop */ 0x90,
|
||||
/* 00000158 nop */ 0x90,
|
||||
/* 00000159 nop */ 0x90,
|
||||
/* 0000015A nop */ 0x90,
|
||||
/* 0000015B nop */ 0x90,
|
||||
/* 0000015C nop */ 0x90,
|
||||
/* 0000015D nop */ 0x90,
|
||||
/* 0000015E nop */ 0x90,
|
||||
/* 0000015F nop */ 0x90,
|
||||
/* 00000160 nop */ 0x90,
|
||||
/* 00000161 nop */ 0x90,
|
||||
/* 00000162 nop */ 0x90,
|
||||
/* 00000163 nop */ 0x90,
|
||||
/* 00000164 nop */ 0x90,
|
||||
/* 00000165 nop */ 0x90,
|
||||
/* 00000166 nop */ 0x90,
|
||||
/* 00000167 nop */ 0x90,
|
||||
/* 00000168 nop */ 0x90,
|
||||
/* 00000169 nop */ 0x90,
|
||||
/* 0000016A nop */ 0x90,
|
||||
/* 0000016B nop */ 0x90,
|
||||
/* 0000016C nop */ 0x90,
|
||||
/* 0000016D nop */ 0x90,
|
||||
/* 0000016E nop */ 0x90,
|
||||
/* 0000016F nop */ 0x90,
|
||||
/* 00000170 nop */ 0x90,
|
||||
/* 00000171 nop */ 0x90,
|
||||
/* 00000172 nop */ 0x90,
|
||||
/* 00000173 nop */ 0x90,
|
||||
/* 00000174 nop */ 0x90,
|
||||
/* 00000175 nop */ 0x90,
|
||||
/* 00000176 nop */ 0x90,
|
||||
/* 00000177 nop */ 0x90,
|
||||
/* 00000178 nop */ 0x90,
|
||||
/* 00000179 nop */ 0x90,
|
||||
/* 0000017A nop */ 0x90,
|
||||
/* 0000017B nop */ 0x90,
|
||||
/* 0000017C nop */ 0x90,
|
||||
/* 0000017D nop */ 0x90,
|
||||
/* 0000017E nop */ 0x90,
|
||||
/* 0000017F nop */ 0x90,
|
||||
/* 00000180 nop */ 0x90,
|
||||
/* 00000181 nop */ 0x90,
|
||||
/* 00000182 nop */ 0x90,
|
||||
/* 00000183 nop */ 0x90,
|
||||
/* 00000184 nop */ 0x90,
|
||||
/* 00000185 nop */ 0x90,
|
||||
/* 00000186 nop */ 0x90,
|
||||
/* 00000187 nop */ 0x90,
|
||||
/* 00000188 nop */ 0x90,
|
||||
/* 00000189 nop */ 0x90,
|
||||
/* 0000018A nop */ 0x90,
|
||||
/* 0000018B nop */ 0x90,
|
||||
/* 0000018C nop */ 0x90,
|
||||
/* 0000018D nop */ 0x90,
|
||||
/* 0000018E nop */ 0x90,
|
||||
/* 0000018F nop */ 0x90,
|
||||
/* 00000190 nop */ 0x90,
|
||||
/* 00000191 nop */ 0x90,
|
||||
/* 00000192 nop */ 0x90,
|
||||
/* 00000193 nop */ 0x90,
|
||||
/* 00000194 nop */ 0x90,
|
||||
/* 00000195 nop */ 0x90,
|
||||
/* 00000196 nop */ 0x90,
|
||||
/* 00000197 nop */ 0x90,
|
||||
/* 00000198 nop */ 0x90,
|
||||
/* 00000199 nop */ 0x90,
|
||||
/* 0000019A nop */ 0x90,
|
||||
/* 0000019B nop */ 0x90,
|
||||
/* 0000019C nop */ 0x90,
|
||||
/* 0000019D nop */ 0x90,
|
||||
/* 0000019E nop */ 0x90,
|
||||
/* 0000019F nop */ 0x90,
|
||||
/* 000001A0 nop */ 0x90,
|
||||
/* 000001A1 nop */ 0x90,
|
||||
/* 000001A2 nop */ 0x90,
|
||||
/* 000001A3 nop */ 0x90,
|
||||
/* 000001A4 nop */ 0x90,
|
||||
/* 000001A5 nop */ 0x90,
|
||||
/* 000001A6 nop */ 0x90,
|
||||
/* 000001A7 nop */ 0x90,
|
||||
/* 000001A8 nop */ 0x90,
|
||||
/* 000001A9 nop */ 0x90,
|
||||
/* 000001AA nop */ 0x90,
|
||||
/* 000001AB nop */ 0x90,
|
||||
/* 000001AC nop */ 0x90,
|
||||
/* 000001AD nop */ 0x90,
|
||||
/* 000001AE nop */ 0x90,
|
||||
/* 000001AF nop */ 0x90,
|
||||
/* 000001B0 nop */ 0x90,
|
||||
/* 000001B1 nop */ 0x90,
|
||||
/* 000001B2 nop */ 0x90,
|
||||
/* 000001B3 nop */ 0x90,
|
||||
/* 000001B4 nop */ 0x90,
|
||||
/* 000001B5 nop */ 0x90,
|
||||
/* 000001B6 nop */ 0x90,
|
||||
/* 000001B7 nop */ 0x90,
|
||||
/* 000001B8 nop */ 0x90,
|
||||
/* 000001B9 nop */ 0x90,
|
||||
/* 000001BA nop */ 0x90,
|
||||
/* 000001BB nop */ 0x90,
|
||||
/* 000001BC nop */ 0x90,
|
||||
/* 000001BD nop */ 0x90,
|
||||
/* 000001BE nop */ 0x90,
|
||||
/* 000001BF nop */ 0x90,
|
||||
/* 000001C0 nop */ 0x90,
|
||||
/* 000001C1 nop */ 0x90,
|
||||
/* 000001C2 nop */ 0x90,
|
||||
/* 000001C3 nop */ 0x90,
|
||||
/* 000001C4 nop */ 0x90,
|
||||
/* 000001C5 nop */ 0x90,
|
||||
/* 000001C6 nop */ 0x90,
|
||||
/* 000001C7 nop */ 0x90,
|
||||
/* 000001C8 nop */ 0x90,
|
||||
/* 000001C9 nop */ 0x90,
|
||||
/* 000001CA nop */ 0x90,
|
||||
/* 000001CB nop */ 0x90,
|
||||
/* 000001CC nop */ 0x90,
|
||||
/* 000001CD nop */ 0x90,
|
||||
/* 000001CE nop */ 0x90,
|
||||
/* 000001CF nop */ 0x90,
|
||||
/* 000001D0 nop */ 0x90,
|
||||
/* 000001D1 nop */ 0x90,
|
||||
/* 000001D2 nop */ 0x90,
|
||||
/* 000001D3 nop */ 0x90,
|
||||
/* 000001D4 nop */ 0x90,
|
||||
/* 000001D5 nop */ 0x90,
|
||||
/* 000001D6 nop */ 0x90,
|
||||
/* 000001D7 nop */ 0x90,
|
||||
/* 000001D8 nop */ 0x90,
|
||||
/* 000001D9 nop */ 0x90,
|
||||
/* 000001DA nop */ 0x90,
|
||||
/* 000001DB nop */ 0x90,
|
||||
/* 000001DC nop */ 0x90,
|
||||
/* 000001DD nop */ 0x90,
|
||||
/* 000001DE nop */ 0x90,
|
||||
/* 000001DF nop */ 0x90,
|
||||
/* 000001E0 nop */ 0x90,
|
||||
/* 000001E1 nop */ 0x90,
|
||||
/* 000001E2 nop */ 0x90,
|
||||
/* 000001E3 nop */ 0x90,
|
||||
/* 000001E4 nop */ 0x90,
|
||||
/* 000001E5 nop */ 0x90,
|
||||
/* 000001E6 nop */ 0x90,
|
||||
/* 000001E7 nop */ 0x90,
|
||||
/* 000001E8 nop */ 0x90,
|
||||
/* 000001E9 nop */ 0x90,
|
||||
/* 000001EA nop */ 0x90,
|
||||
/* 000001EB nop */ 0x90,
|
||||
/* 000001EC nop */ 0x90,
|
||||
/* 000001ED nop */ 0x90,
|
||||
/* 000001EE nop */ 0x90,
|
||||
/* 000001EF nop */ 0x90,
|
||||
/* 000001F0 nop */ 0x90,
|
||||
/* 000001F1 nop */ 0x90,
|
||||
/* 000001F2 nop */ 0x90,
|
||||
/* 000001F3 nop */ 0x90,
|
||||
/* 000001F4 nop */ 0x90,
|
||||
/* 000001F5 nop */ 0x90,
|
||||
/* 000001F6 nop */ 0x90,
|
||||
/* 000001F7 nop */ 0x90,
|
||||
/* 000001F8 nop */ 0x90,
|
||||
/* 000001F9 nop */ 0x90,
|
||||
/* 000001FA nop */ 0x90,
|
||||
/* 000001FB nop */ 0x90,
|
||||
/* 000001FC nop */ 0x90,
|
||||
/* 000001FD nop */ 0x90,
|
||||
/* 000001FE nop */ 0x90,
|
||||
/* 000001FF nop */ 0x90,
|
||||
/* 00000200 cmp ax,0x4f00 */ 0x3D, 0x00, 0x4F,
|
||||
/* 00000203 jz 0x22d */ 0x74, 0x28,
|
||||
/* 00000205 cmp ax,0x4f01 */ 0x3D, 0x01, 0x4F,
|
||||
/* 00000208 jz 0x245 */ 0x74, 0x3B,
|
||||
/* 0000020A cmp ax,0x4f02 */ 0x3D, 0x02, 0x4F,
|
||||
/* 0000020D jz 0x269 */ 0x74, 0x5A,
|
||||
/* 0000020F cmp ax,0x4f03 */ 0x3D, 0x03, 0x4F,
|
||||
/* 00000212 jz word 0x331 */ 0x0F, 0x84, 0x1B, 0x01,
|
||||
/* 00000216 cmp ax,0x4f10 */ 0x3D, 0x10, 0x4F,
|
||||
/* 00000219 jz word 0x336 */ 0x0F, 0x84, 0x19, 0x01,
|
||||
/* 0000021D cmp ax,0x4f15 */ 0x3D, 0x15, 0x4F,
|
||||
/* 00000220 jz word 0x338 */ 0x0F, 0x84, 0x14, 0x01,
|
||||
/* 00000224 cmp ah,0x0 */ 0x80, 0xFC, 0x00,
|
||||
/* 00000227 jz word 0x33a */ 0x0F, 0x84, 0x0F, 0x01,
|
||||
/* 0000022B jmp short 0x22b */ 0xEB, 0xFE,
|
||||
/* 0000022D push es */ 0x06,
|
||||
/* 0000022E push di */ 0x57,
|
||||
/* 0000022F push ds */ 0x1E,
|
||||
/* 00000230 push si */ 0x56,
|
||||
/* 00000231 push cx */ 0x51,
|
||||
/* 00000232 push cs */ 0x0E,
|
||||
/* 00000233 pop ds */ 0x1F,
|
||||
/* 00000234 mov si,0x0 */ 0xBE, 0x00, 0x00,
|
||||
/* 00000237 mov cx,0x100 */ 0xB9, 0x00, 0x01,
|
||||
/* 0000023A cld */ 0xFC,
|
||||
/* 0000023B rep movsb */ 0xF3, 0xA4,
|
||||
/* 0000023D pop cx */ 0x59,
|
||||
/* 0000023E pop si */ 0x5E,
|
||||
/* 0000023F pop ds */ 0x1F,
|
||||
/* 00000240 pop di */ 0x5F,
|
||||
/* 00000241 pop es */ 0x07,
|
||||
/* 00000242 jmp word 0x34c */ 0xE9, 0x07, 0x01,
|
||||
/* 00000245 push es */ 0x06,
|
||||
/* 00000246 push di */ 0x57,
|
||||
/* 00000247 push ds */ 0x1E,
|
||||
/* 00000248 push si */ 0x56,
|
||||
/* 00000249 push cx */ 0x51,
|
||||
/* 0000024A and cx,0xbfff */ 0x81, 0xE1, 0xFF, 0xBF,
|
||||
/* 0000024E cmp cx,0xf1 */ 0x81, 0xF9, 0xF1, 0x00,
|
||||
/* 00000252 jz 0x256 */ 0x74, 0x02,
|
||||
/* 00000254 jmp short 0x22b */ 0xEB, 0xD5,
|
||||
/* 00000256 push cs */ 0x0E,
|
||||
/* 00000257 pop ds */ 0x1F,
|
||||
/* 00000258 mov si,0x100 */ 0xBE, 0x00, 0x01,
|
||||
/* 0000025B mov cx,0x100 */ 0xB9, 0x00, 0x01,
|
||||
/* 0000025E cld */ 0xFC,
|
||||
/* 0000025F rep movsb */ 0xF3, 0xA4,
|
||||
/* 00000261 pop cx */ 0x59,
|
||||
/* 00000262 pop si */ 0x5E,
|
||||
/* 00000263 pop ds */ 0x1F,
|
||||
/* 00000264 pop di */ 0x5F,
|
||||
/* 00000265 pop es */ 0x07,
|
||||
/* 00000266 jmp word 0x34c */ 0xE9, 0xE3, 0x00,
|
||||
/* 00000269 push dx */ 0x52,
|
||||
/* 0000026A push ax */ 0x50,
|
||||
/* 0000026B cmp bx,0x40f1 */ 0x81, 0xFB, 0xF1, 0x40,
|
||||
/* 0000026F jz 0x273 */ 0x74, 0x02,
|
||||
/* 00000271 jmp short 0x22b */ 0xEB, 0xB8,
|
||||
/* 00000273 mov dx,0x3c0 */ 0xBA, 0xC0, 0x03,
|
||||
/* 00000276 mov al,0x20 */ 0xB0, 0x20,
|
||||
/* 00000278 out dx,al */ 0xEE,
|
||||
/* 00000279 push dx */ 0x52,
|
||||
/* 0000027A push ax */ 0x50,
|
||||
/* 0000027B mov dx,0x1ce */ 0xBA, 0xCE, 0x01,
|
||||
/* 0000027E mov ax,0x4 */ 0xB8, 0x04, 0x00,
|
||||
/* 00000281 out dx,ax */ 0xEF,
|
||||
/* 00000282 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01,
|
||||
/* 00000285 mov ax,0x0 */ 0xB8, 0x00, 0x00,
|
||||
/* 00000288 out dx,ax */ 0xEF,
|
||||
/* 00000289 pop ax */ 0x58,
|
||||
/* 0000028A pop dx */ 0x5A,
|
||||
/* 0000028B push dx */ 0x52,
|
||||
/* 0000028C push ax */ 0x50,
|
||||
/* 0000028D mov dx,0x1ce */ 0xBA, 0xCE, 0x01,
|
||||
/* 00000290 mov ax,0x5 */ 0xB8, 0x05, 0x00,
|
||||
/* 00000293 out dx,ax */ 0xEF,
|
||||
/* 00000294 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01,
|
||||
/* 00000297 mov ax,0x0 */ 0xB8, 0x00, 0x00,
|
||||
/* 0000029A out dx,ax */ 0xEF,
|
||||
/* 0000029B pop ax */ 0x58,
|
||||
/* 0000029C pop dx */ 0x5A,
|
||||
/* 0000029D push dx */ 0x52,
|
||||
/* 0000029E push ax */ 0x50,
|
||||
/* 0000029F mov dx,0x1ce */ 0xBA, 0xCE, 0x01,
|
||||
/* 000002A2 mov ax,0x8 */ 0xB8, 0x08, 0x00,
|
||||
/* 000002A5 out dx,ax */ 0xEF,
|
||||
/* 000002A6 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01,
|
||||
/* 000002A9 mov ax,0x0 */ 0xB8, 0x00, 0x00,
|
||||
/* 000002AC out dx,ax */ 0xEF,
|
||||
/* 000002AD pop ax */ 0x58,
|
||||
/* 000002AE pop dx */ 0x5A,
|
||||
/* 000002AF push dx */ 0x52,
|
||||
/* 000002B0 push ax */ 0x50,
|
||||
/* 000002B1 mov dx,0x1ce */ 0xBA, 0xCE, 0x01,
|
||||
/* 000002B4 mov ax,0x9 */ 0xB8, 0x09, 0x00,
|
||||
/* 000002B7 out dx,ax */ 0xEF,
|
||||
/* 000002B8 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01,
|
||||
/* 000002BB mov ax,0x0 */ 0xB8, 0x00, 0x00,
|
||||
/* 000002BE out dx,ax */ 0xEF,
|
||||
/* 000002BF pop ax */ 0x58,
|
||||
/* 000002C0 pop dx */ 0x5A,
|
||||
/* 000002C1 push dx */ 0x52,
|
||||
/* 000002C2 push ax */ 0x50,
|
||||
/* 000002C3 mov dx,0x1ce */ 0xBA, 0xCE, 0x01,
|
||||
/* 000002C6 mov ax,0x3 */ 0xB8, 0x03, 0x00,
|
||||
/* 000002C9 out dx,ax */ 0xEF,
|
||||
/* 000002CA mov dx,0x1d0 */ 0xBA, 0xD0, 0x01,
|
||||
/* 000002CD mov ax,0x20 */ 0xB8, 0x20, 0x00,
|
||||
/* 000002D0 out dx,ax */ 0xEF,
|
||||
/* 000002D1 pop ax */ 0x58,
|
||||
/* 000002D2 pop dx */ 0x5A,
|
||||
/* 000002D3 push dx */ 0x52,
|
||||
/* 000002D4 push ax */ 0x50,
|
||||
/* 000002D5 mov dx,0x1ce */ 0xBA, 0xCE, 0x01,
|
||||
/* 000002D8 mov ax,0x1 */ 0xB8, 0x01, 0x00,
|
||||
/* 000002DB out dx,ax */ 0xEF,
|
||||
/* 000002DC mov dx,0x1d0 */ 0xBA, 0xD0, 0x01,
|
||||
/* 000002DF mov ax,0x400 */ 0xB8, 0x00, 0x04,
|
||||
/* 000002E2 out dx,ax */ 0xEF,
|
||||
/* 000002E3 pop ax */ 0x58,
|
||||
/* 000002E4 pop dx */ 0x5A,
|
||||
/* 000002E5 push dx */ 0x52,
|
||||
/* 000002E6 push ax */ 0x50,
|
||||
/* 000002E7 mov dx,0x1ce */ 0xBA, 0xCE, 0x01,
|
||||
/* 000002EA mov ax,0x6 */ 0xB8, 0x06, 0x00,
|
||||
/* 000002ED out dx,ax */ 0xEF,
|
||||
/* 000002EE mov dx,0x1d0 */ 0xBA, 0xD0, 0x01,
|
||||
/* 000002F1 mov ax,0x400 */ 0xB8, 0x00, 0x04,
|
||||
/* 000002F4 out dx,ax */ 0xEF,
|
||||
/* 000002F5 pop ax */ 0x58,
|
||||
/* 000002F6 pop dx */ 0x5A,
|
||||
/* 000002F7 push dx */ 0x52,
|
||||
/* 000002F8 push ax */ 0x50,
|
||||
/* 000002F9 mov dx,0x1ce */ 0xBA, 0xCE, 0x01,
|
||||
/* 000002FC mov ax,0x2 */ 0xB8, 0x02, 0x00,
|
||||
/* 000002FF out dx,ax */ 0xEF,
|
||||
/* 00000300 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01,
|
||||
/* 00000303 mov ax,0x300 */ 0xB8, 0x00, 0x03,
|
||||
/* 00000306 out dx,ax */ 0xEF,
|
||||
/* 00000307 pop ax */ 0x58,
|
||||
/* 00000308 pop dx */ 0x5A,
|
||||
/* 00000309 push dx */ 0x52,
|
||||
/* 0000030A push ax */ 0x50,
|
||||
/* 0000030B mov dx,0x1ce */ 0xBA, 0xCE, 0x01,
|
||||
/* 0000030E mov ax,0x7 */ 0xB8, 0x07, 0x00,
|
||||
/* 00000311 out dx,ax */ 0xEF,
|
||||
/* 00000312 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01,
|
||||
/* 00000315 mov ax,0x300 */ 0xB8, 0x00, 0x03,
|
||||
/* 00000318 out dx,ax */ 0xEF,
|
||||
/* 00000319 pop ax */ 0x58,
|
||||
/* 0000031A pop dx */ 0x5A,
|
||||
/* 0000031B push dx */ 0x52,
|
||||
/* 0000031C push ax */ 0x50,
|
||||
/* 0000031D mov dx,0x1ce */ 0xBA, 0xCE, 0x01,
|
||||
/* 00000320 mov ax,0x4 */ 0xB8, 0x04, 0x00,
|
||||
/* 00000323 out dx,ax */ 0xEF,
|
||||
/* 00000324 mov dx,0x1d0 */ 0xBA, 0xD0, 0x01,
|
||||
/* 00000327 mov ax,0x41 */ 0xB8, 0x41, 0x00,
|
||||
/* 0000032A out dx,ax */ 0xEF,
|
||||
/* 0000032B pop ax */ 0x58,
|
||||
/* 0000032C pop dx */ 0x5A,
|
||||
/* 0000032D pop ax */ 0x58,
|
||||
/* 0000032E pop dx */ 0x5A,
|
||||
/* 0000032F jmp short 0x34c */ 0xEB, 0x1B,
|
||||
/* 00000331 mov bx,0x40f1 */ 0xBB, 0xF1, 0x40,
|
||||
/* 00000334 jmp short 0x34c */ 0xEB, 0x16,
|
||||
/* 00000336 jmp short 0x350 */ 0xEB, 0x18,
|
||||
/* 00000338 jmp short 0x350 */ 0xEB, 0x16,
|
||||
/* 0000033A cmp al,0x3 */ 0x3C, 0x03,
|
||||
/* 0000033C jz 0x345 */ 0x74, 0x07,
|
||||
/* 0000033E cmp al,0x12 */ 0x3C, 0x12,
|
||||
/* 00000340 jz 0x349 */ 0x74, 0x07,
|
||||
/* 00000342 jmp word 0x22b */ 0xE9, 0xE6, 0xFE,
|
||||
/* 00000345 mov al,0x30 */ 0xB0, 0x30,
|
||||
/* 00000347 jmp short 0x34b */ 0xEB, 0x02,
|
||||
/* 00000349 mov al,0x20 */ 0xB0, 0x20,
|
||||
/* 0000034B iretw */ 0xCF,
|
||||
/* 0000034C mov ax,0x4f */ 0xB8, 0x4F, 0x00,
|
||||
/* 0000034F iretw */ 0xCF,
|
||||
/* 00000350 mov ax,0x14f */ 0xB8, 0x4F, 0x01,
|
||||
/* 00000353 iretw */ 0xCF,
|
||||
};
|
||||
#endif
|
@ -1,82 +0,0 @@
|
||||
#!/bin/sh
|
||||
###
|
||||
# @file
|
||||
# Shell script to assemble and dump the fake Int10h handler from NASM source to
|
||||
# a C array.
|
||||
#
|
||||
# Copyright (C) 2014, Red Hat, Inc.
|
||||
# Copyright (c) 2013 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
#
|
||||
###
|
||||
|
||||
set -e -u
|
||||
|
||||
STEM=$(dirname -- "$0")/$(basename -- "$0" .sh)
|
||||
|
||||
#
|
||||
# Install exit handler -- remove temporary files.
|
||||
#
|
||||
exit_handler()
|
||||
{
|
||||
rm -f -- "$STEM".bin "$STEM".disasm "$STEM".offsets "$STEM".insns \
|
||||
"$STEM".bytes
|
||||
}
|
||||
trap exit_handler EXIT
|
||||
|
||||
#
|
||||
# Assemble the source file.
|
||||
# (nasm doesn't recognize the "--" end-of-options delimiter;
|
||||
# <https://bugzilla.nasm.us/show_bug.cgi?id=3392829>.)
|
||||
#
|
||||
nasm -o "$STEM".bin "$STEM".asm
|
||||
|
||||
#
|
||||
# Disassemble it, in order to get a binary dump associated with the source.
|
||||
# (ndisasm doesn't recognize the "--" end-of-options delimiter;
|
||||
# <https://bugzilla.nasm.us/show_bug.cgi?id=3392829>.)
|
||||
#
|
||||
ndisasm "$STEM".bin >"$STEM".disasm
|
||||
|
||||
#
|
||||
# Create three files, each with one column of the disassembly.
|
||||
#
|
||||
# The first column contains the offsets, and it starts the comment.
|
||||
#
|
||||
cut -c 1-8 -- "$STEM".disasm \
|
||||
| sed -e 's,^, /* ,' >"$STEM".offsets
|
||||
|
||||
#
|
||||
# The second column contains the assembly-language instructions, and it closes
|
||||
# the comment. We first pad it to 30 characters.
|
||||
#
|
||||
cut -c 29- -- "$STEM".disasm \
|
||||
| sed -e 's,$, ,' \
|
||||
-e 's,^\(.\{30\}\).*$,\1 */,' >"$STEM".insns
|
||||
|
||||
#
|
||||
# The third column contains the bytes corresponding to the instruction,
|
||||
# represented as C integer constants. First strip trailing whitespace from the
|
||||
# middle column of the input disassembly, then process pairs of nibbles.
|
||||
#
|
||||
cut -c 11-28 -- "$STEM".disasm \
|
||||
| sed -e 's, \+$,,' -e 's/\(..\)/ 0x\1,/g' >"$STEM".bytes
|
||||
|
||||
#
|
||||
# Write the output file, recombining the columns. The output should have CRLF
|
||||
# line endings.
|
||||
#
|
||||
{
|
||||
printf '//\n'
|
||||
printf '// THIS FILE WAS GENERATED BY "%s". DO NOT EDIT.\n' \
|
||||
"$(basename -- "$0")"
|
||||
printf '//\n'
|
||||
printf '#ifndef _VBE_SHIM_H_\n'
|
||||
printf '#define _VBE_SHIM_H_\n'
|
||||
printf 'STATIC CONST UINT8 mVbeShim[] = {\n'
|
||||
paste -d ' ' -- "$STEM".offsets "$STEM".insns "$STEM".bytes
|
||||
printf '};\n'
|
||||
printf '#endif\n'
|
||||
} \
|
||||
| unix2dos >"$STEM".h
|
Loading…
x
Reference in New Issue
Block a user