2007-06-15 12:02:42 +02:00
|
|
|
/** @file
|
|
|
|
The EFI Legacy BIOS Protocol is used to abstract legacy Option ROM usage
|
|
|
|
under EFI and Legacy OS boot.
|
|
|
|
|
|
|
|
Note: The names for EFI_IA32_REGISTER_SET elements were picked to follow
|
|
|
|
well known naming conventions.
|
|
|
|
|
|
|
|
Thunk - A thunk is a transition from one processor mode to another. A Thunk
|
|
|
|
is a transition from native EFI mode to 16-bit mode. A reverse thunk
|
|
|
|
would be a transition from 16-bit mode to native EFI mode.
|
|
|
|
|
|
|
|
You most likely should not use this protocol! Find the EFI way to solve the
|
|
|
|
problem to make your code portable
|
|
|
|
|
2009-07-02 09:40:24 +02:00
|
|
|
Copyright (c) 2007 - 2009, Intel Corporation
|
2007-06-15 12:02:42 +02:00
|
|
|
All rights reserved. This program and the accompanying materials
|
|
|
|
are licensed and made available under the terms and conditions of the BSD License
|
|
|
|
which accompanies this distribution. The full text of the license may be found at
|
|
|
|
http://opensource.org/licenses/bsd-license.php
|
|
|
|
|
|
|
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
|
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
|
|
|
|
|
|
Module Name: LegacyBios.h
|
|
|
|
|
|
|
|
@par Revision Reference:
|
|
|
|
This protocol is defined in Framework for EFI Compatibility Support Module spec
|
2009-05-21 11:04:03 +02:00
|
|
|
Version 0.97.
|
2007-06-15 12:02:42 +02:00
|
|
|
|
|
|
|
**/
|
|
|
|
|
|
|
|
#ifndef _EFI_LEGACY_BIOS_H_
|
|
|
|
#define _EFI_LEGACY_BIOS_H_
|
|
|
|
|
2009-07-10 11:30:53 +02:00
|
|
|
#include <Framework/Legacy16.h>
|
2007-06-28 14:23:11 +02:00
|
|
|
|
2007-06-15 12:02:42 +02:00
|
|
|
#define EFI_LEGACY_BIOS_PROTOCOL_GUID \
|
|
|
|
{ \
|
|
|
|
0xdb9a1e3d, 0x45cb, 0x4abb, {0x85, 0x3b, 0xe5, 0x38, 0x7f, 0xdb, 0x2e, 0x2d } \
|
|
|
|
}
|
|
|
|
|
|
|
|
typedef struct _EFI_LEGACY_BIOS_PROTOCOL EFI_LEGACY_BIOS_PROTOCOL;
|
|
|
|
|
2009-06-05 00:49:59 +02:00
|
|
|
//
|
|
|
|
// Flags returned by CheckPciRom()
|
|
|
|
//
|
|
|
|
#define NO_ROM 0x00
|
|
|
|
#define ROM_FOUND 0x01
|
|
|
|
#define VALID_LEGACY_ROM 0x02
|
|
|
|
#define ROM_WITH_CONFIG 0x04 // Not defined in CSM Specification0.96
|
|
|
|
|
2007-06-15 12:02:42 +02:00
|
|
|
//
|
2008-12-04 07:12:44 +01:00
|
|
|
/// @bug These macros appear in no specifications and are kept for backward
|
2007-06-15 12:02:42 +02:00
|
|
|
// compatibility only.
|
|
|
|
// Convert from 32-bit address (_Adr) to Segment:Offset 16-bit form
|
|
|
|
//
|
|
|
|
#define EFI_SEGMENT(_Adr) (UINT16) ((UINT16) (((UINTN) (_Adr)) >> 4) & 0xf000)
|
|
|
|
#define EFI_OFFSET(_Adr) (UINT16) (((UINT16) ((UINTN) (_Adr))) & 0xffff)
|
|
|
|
#define BYTE_GRANULARITY 0x01
|
|
|
|
#define WORD_GRANULARITY 0x02
|
|
|
|
#define DWORD_GRANULARITY 0x04
|
|
|
|
#define QWORD_GRANULARITY 0x08
|
|
|
|
#define PARAGRAPH_GRANULARITY 0x10
|
|
|
|
|
|
|
|
#define CARRY_FLAG 0x01
|
|
|
|
|
|
|
|
//*********************************************************
|
|
|
|
// EFI_EFLAGS_REG
|
|
|
|
//*********************************************************
|
|
|
|
typedef struct {
|
|
|
|
UINT32 CF:1;
|
|
|
|
UINT32 Reserved1:1;
|
|
|
|
UINT32 PF:1;
|
|
|
|
UINT32 Reserved2:1;
|
|
|
|
UINT32 AF:1;
|
|
|
|
UINT32 Reserved3:1;
|
|
|
|
UINT32 ZF:1;
|
|
|
|
UINT32 SF:1;
|
|
|
|
UINT32 TF:1;
|
|
|
|
UINT32 IF:1;
|
|
|
|
UINT32 DF:1;
|
|
|
|
UINT32 OF:1;
|
|
|
|
UINT32 IOPL:2;
|
|
|
|
UINT32 NT:1;
|
|
|
|
UINT32 Reserved4:2;
|
|
|
|
UINT32 VM:1;
|
|
|
|
UINT32 Reserved5:14;
|
|
|
|
} EFI_EFLAGS_REG;
|
|
|
|
|
|
|
|
//*********************************************************
|
|
|
|
// EFI_DWORD_REGS
|
|
|
|
//*********************************************************
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
UINT32 EAX;
|
|
|
|
UINT32 EBX;
|
|
|
|
UINT32 ECX;
|
|
|
|
UINT32 EDX;
|
|
|
|
UINT32 ESI;
|
|
|
|
UINT32 EDI;
|
|
|
|
EFI_EFLAGS_REG EFlags;
|
|
|
|
UINT16 ES;
|
|
|
|
UINT16 CS;
|
|
|
|
UINT16 SS;
|
|
|
|
UINT16 DS;
|
|
|
|
UINT16 FS;
|
|
|
|
UINT16 GS;
|
|
|
|
UINT32 EBP;
|
|
|
|
UINT32 ESP;
|
|
|
|
} EFI_DWORD_REGS;
|
|
|
|
|
|
|
|
//*******************************************
|
|
|
|
// EFI_FLAGS_REG
|
|
|
|
//*******************************************
|
|
|
|
typedef struct {
|
|
|
|
UINT16 CF:1;
|
|
|
|
UINT16 Reserved1:1;
|
|
|
|
UINT16 PF:1;
|
|
|
|
UINT16 Reserved2:1;
|
|
|
|
UINT16 AF:1;
|
|
|
|
UINT16 Reserved3:1;
|
|
|
|
UINT16 ZF:1;
|
|
|
|
UINT16 SF:1;
|
|
|
|
UINT16 TF:1;
|
|
|
|
UINT16 IF:1;
|
|
|
|
UINT16 DF:1;
|
|
|
|
UINT16 OF:1;
|
|
|
|
UINT16 IOPL:2;
|
|
|
|
UINT16 NT:1;
|
|
|
|
UINT16 Reserved4:1;
|
|
|
|
} EFI_FLAGS_REG;
|
|
|
|
|
|
|
|
|
|
|
|
//*********************************************************
|
|
|
|
// EFI_WORD_REGS
|
|
|
|
//*********************************************************
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
UINT16 AX;
|
|
|
|
UINT16 ReservedAX;
|
|
|
|
UINT16 BX;
|
|
|
|
UINT16 ReservedBX;
|
|
|
|
UINT16 CX;
|
|
|
|
UINT16 ReservedCX;
|
|
|
|
UINT16 DX;
|
|
|
|
UINT16 ReservedDX;
|
|
|
|
UINT16 SI;
|
|
|
|
UINT16 ReservedSI;
|
|
|
|
UINT16 DI;
|
|
|
|
UINT16 ReservedDI;
|
|
|
|
EFI_FLAGS_REG Flags;
|
|
|
|
UINT16 ReservedFlags;
|
|
|
|
UINT16 ES;
|
|
|
|
UINT16 CS;
|
|
|
|
UINT16 SS;
|
|
|
|
UINT16 DS;
|
|
|
|
UINT16 FS;
|
|
|
|
UINT16 GS;
|
|
|
|
UINT16 BP;
|
|
|
|
UINT16 ReservedBP;
|
|
|
|
UINT16 SP;
|
|
|
|
UINT16 ReservedSP;
|
|
|
|
} EFI_WORD_REGS;
|
|
|
|
|
|
|
|
//*********************************************************
|
|
|
|
// EFI_BYTE_REGS
|
|
|
|
//*********************************************************
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
UINT8 AL, AH;
|
|
|
|
UINT16 ReservedAX;
|
|
|
|
UINT8 BL, BH;
|
|
|
|
UINT16 ReservedBX;
|
|
|
|
UINT8 CL, CH;
|
|
|
|
UINT16 ReservedCX;
|
|
|
|
UINT8 DL, DH;
|
|
|
|
UINT16 ReservedDX;
|
|
|
|
} EFI_BYTE_REGS;
|
|
|
|
|
|
|
|
typedef union {
|
|
|
|
EFI_DWORD_REGS E;
|
|
|
|
EFI_WORD_REGS X;
|
|
|
|
EFI_BYTE_REGS H;
|
|
|
|
} EFI_IA32_REGISTER_SET;
|
|
|
|
|
|
|
|
/**
|
|
|
|
Thunk to 16-bit real mode and execute a software interrupt with a vector
|
|
|
|
of BiosInt. Regs will contain the 16-bit register context on entry and
|
|
|
|
exit.
|
|
|
|
|
|
|
|
@param This Protocol instance pointer.
|
|
|
|
@param BiosInt Processor interrupt vector to invoke
|
|
|
|
@param Reg Register contexted passed into (and returned) from thunk to
|
|
|
|
16-bit mode
|
|
|
|
|
|
|
|
@retval FALSE Thunk completed, and there were no BIOS errors in the target code.
|
|
|
|
See Regs for status.
|
|
|
|
@retval TRUE There was a BIOS erro in the target code.
|
|
|
|
|
|
|
|
**/
|
|
|
|
typedef
|
|
|
|
BOOLEAN
|
2008-07-31 09:44:54 +02:00
|
|
|
(EFIAPI *EFI_LEGACY_BIOS_INT86)(
|
2007-06-15 12:02:42 +02:00
|
|
|
IN EFI_LEGACY_BIOS_PROTOCOL *This,
|
|
|
|
IN UINT8 BiosInt,
|
|
|
|
IN OUT EFI_IA32_REGISTER_SET *Regs
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Thunk to 16-bit real mode and call Segment:Offset. Regs will contain the
|
|
|
|
16-bit register context on entry and exit. Arguments can be passed on
|
|
|
|
the Stack argument
|
|
|
|
|
|
|
|
@param This Protocol instance pointer.
|
|
|
|
@param Segment Segemnt of 16-bit mode call
|
|
|
|
@param Offset Offset of 16-bit mdoe call
|
|
|
|
@param Reg Register contexted passed into (and returned) from thunk to
|
|
|
|
16-bit mode
|
|
|
|
@param Stack Caller allocated stack used to pass arguments
|
|
|
|
@param StackSize Size of Stack in bytes
|
|
|
|
|
|
|
|
@retval FALSE Thunk completed, and there were no BIOS errors in the target code.
|
|
|
|
See Regs for status.
|
|
|
|
@retval TRUE There was a BIOS erro in the target code.
|
|
|
|
|
|
|
|
**/
|
|
|
|
typedef
|
|
|
|
BOOLEAN
|
2008-07-31 09:44:54 +02:00
|
|
|
(EFIAPI *EFI_LEGACY_BIOS_FARCALL86)(
|
2007-06-15 12:02:42 +02:00
|
|
|
IN EFI_LEGACY_BIOS_PROTOCOL *This,
|
|
|
|
IN UINT16 Segment,
|
|
|
|
IN UINT16 Offset,
|
|
|
|
IN EFI_IA32_REGISTER_SET *Regs,
|
|
|
|
IN VOID *Stack,
|
|
|
|
IN UINTN StackSize
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Test to see if a legacy PCI ROM exists for this device. Optionally return
|
|
|
|
the Legacy ROM instance for this PCI device.
|
|
|
|
|
|
|
|
@param This Protocol instance pointer.
|
|
|
|
@param PciHandle The PCI PC-AT OPROM from this devices ROM BAR will be loaded
|
|
|
|
@param RomImage Return the legacy PCI ROM for this device
|
|
|
|
@param RomSize Size of ROM Image
|
2009-07-07 04:15:40 +02:00
|
|
|
@param Flags Indicates if ROM found and if PC-AT. Multiple bits can be set as follows:
|
|
|
|
00 = No ROM
|
|
|
|
01 = ROM Found
|
|
|
|
02 = ROM is a valid legacy ROM
|
2007-06-15 12:02:42 +02:00
|
|
|
|
|
|
|
@retval EFI_SUCCESS Legacy Option ROM availible for this device
|
|
|
|
@retval EFI_UNSUPPORTED Legacy Option ROM not supported.
|
|
|
|
|
|
|
|
**/
|
|
|
|
typedef
|
|
|
|
EFI_STATUS
|
2008-07-31 09:44:54 +02:00
|
|
|
(EFIAPI *EFI_LEGACY_BIOS_CHECK_ROM)(
|
2007-06-15 12:02:42 +02:00
|
|
|
IN EFI_LEGACY_BIOS_PROTOCOL *This,
|
|
|
|
IN EFI_HANDLE PciHandle,
|
|
|
|
OUT VOID **RomImage, OPTIONAL
|
|
|
|
OUT UINTN *RomSize, OPTIONAL
|
|
|
|
OUT UINTN *Flags
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Load a legacy PC-AT OPROM on the PciHandle device. Return information
|
|
|
|
about how many disks were added by the OPROM and the shadow address and
|
|
|
|
size. DiskStart & DiskEnd are INT 13h drive letters. Thus 0x80 is C:
|
|
|
|
|
|
|
|
@param This Protocol instance pointer.
|
|
|
|
@param PciHandle The PCI PC-AT OPROM from this devices ROM BAR will be loaded.
|
|
|
|
This value is NULL if RomImage is non-NULL. This is the normal
|
|
|
|
case.
|
|
|
|
@param RomImage A PCI PC-AT ROM image. This argument is non-NULL if there is
|
|
|
|
no hardware associated with the ROM and thus no PciHandle,
|
|
|
|
otherwise is must be NULL.
|
|
|
|
Example is PXE base code.
|
2009-07-07 04:15:40 +02:00
|
|
|
@param Flags The type of ROM discovered. Multiple bits can be set, as follows:
|
|
|
|
00 = No ROM.
|
|
|
|
01 = ROM found.
|
|
|
|
02 = ROM is a valid legacy ROM.
|
2007-06-15 12:02:42 +02:00
|
|
|
@param DiskStart Disk number of first device hooked by the ROM. If DiskStart
|
|
|
|
is the same as DiskEnd no disked were hooked.
|
|
|
|
@param DiskEnd Disk number of the last device hooked by the ROM.
|
|
|
|
@param RomShadowAddress Shadow address of PC-AT ROM
|
|
|
|
@param RomShadowSize Size of RomShadowAddress in bytes
|
|
|
|
|
|
|
|
@retval EFI_SUCCESS Thunk completed, see Regs for status.
|
|
|
|
@retval EFI_INVALID_PARAMETER PciHandle not found
|
|
|
|
|
|
|
|
**/
|
|
|
|
typedef
|
|
|
|
EFI_STATUS
|
2008-07-31 09:44:54 +02:00
|
|
|
(EFIAPI *EFI_LEGACY_BIOS_INSTALL_ROM)(
|
2007-06-15 12:02:42 +02:00
|
|
|
IN EFI_LEGACY_BIOS_PROTOCOL *This,
|
|
|
|
IN EFI_HANDLE PciHandle,
|
|
|
|
IN VOID **RomImage,
|
|
|
|
OUT UINTN *Flags,
|
|
|
|
OUT UINT8 *DiskStart, OPTIONAL
|
|
|
|
OUT UINT8 *DiskEnd, OPTIONAL
|
|
|
|
OUT VOID **RomShadowAddress, OPTIONAL
|
|
|
|
OUT UINT32 *ShadowedRomSize OPTIONAL
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
2009-07-07 04:15:40 +02:00
|
|
|
This function attempts to traditionally boot the specified BootOption. If the EFI context has
|
|
|
|
been compromised, this function will not return. This procedure is not used for loading an EFIaware
|
|
|
|
OS off a traditional device. The following actions occur:
|
|
|
|
- Get EFI SMBIOS data structures, convert them to a traditional format, and copy to
|
|
|
|
Compatibility16.
|
|
|
|
- Get a pointer to ACPI data structures and copy the Compatibility16 RSD PTR to F0000 block.
|
|
|
|
- Find the traditional SMI handler from a firmware volume and register the traditional SMI
|
|
|
|
handler with the EFI SMI handler.
|
|
|
|
- Build onboard IDE information and pass this information to the Compatibility16 code.
|
|
|
|
- Make sure all PCI Interrupt Line registers are programmed to match 8259.
|
|
|
|
- Reconfigure SIO devices from EFI mode (polled) into traditional mode (interrupt driven).
|
|
|
|
- Shadow all PCI ROMs.
|
|
|
|
- Set up BDA and EBDA standard areas before the legacy boot.
|
|
|
|
- Construct the Compatibility16 boot memory map and pass it to the Compatibility16 code.
|
|
|
|
- Invoke the Compatibility16 table function Compatibility16PrepareToBoot(). This
|
|
|
|
invocation causes a thunk into the Compatibility16 code, which sets all appropriate internal
|
|
|
|
data structures. The boot device list is a parameter.
|
|
|
|
- Invoke the Compatibility16 Table function Compatibility16Boot(). This invocation
|
|
|
|
causes a thunk into the Compatibility16 code, which does an INT19.
|
|
|
|
- If the Compatibility16Boot() function returns, then the boot failed in a graceful
|
|
|
|
manner—i.e., EFI code is still valid. An ungraceful boot failure causes a reset because the state
|
|
|
|
of EFI code is unknown.
|
2007-06-15 12:02:42 +02:00
|
|
|
|
|
|
|
@param This Protocol instance pointer.
|
|
|
|
@param BootOption EFI Device Path from BootXXXX variable.
|
|
|
|
@param LoadOptionSize Size of LoadOption in size.
|
|
|
|
@param LoadOption LoadOption from BootXXXX variable
|
|
|
|
|
2009-07-07 04:15:40 +02:00
|
|
|
@retval EFI_DEVICE_ERROR Failed to boot from any boot device and memory is uncorrupted.
|
|
|
|
Note: This function normally never returns. It will either boot the
|
|
|
|
OS or reset the system if memory has been "corrupted" by loading
|
|
|
|
a boot sector and passing control to it.
|
2007-06-15 12:02:42 +02:00
|
|
|
|
|
|
|
**/
|
|
|
|
typedef
|
|
|
|
EFI_STATUS
|
2008-07-31 09:44:54 +02:00
|
|
|
(EFIAPI *EFI_LEGACY_BIOS_BOOT)(
|
2007-06-15 12:02:42 +02:00
|
|
|
IN EFI_LEGACY_BIOS_PROTOCOL *This,
|
|
|
|
IN BBS_BBS_DEVICE_PATH *BootOption,
|
|
|
|
IN UINT32 LoadOptionsSize,
|
|
|
|
IN VOID *LoadOptions
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
2009-07-07 04:15:40 +02:00
|
|
|
This function takes the Leds input parameter and sets/resets the BDA accordingly.
|
|
|
|
Leds is also passed to Compatibility16 code, in case any special processing is required.
|
|
|
|
This function is normally called from EFI Setup drivers that handle userselectable
|
|
|
|
keyboard options such as boot with NUM LOCK on/off. This function does not
|
|
|
|
touch the keyboard or keyboard LEDs but only the BDA.
|
2007-06-15 12:02:42 +02:00
|
|
|
|
|
|
|
@param This Protocol instance pointer.
|
|
|
|
@param Leds Status of current Scroll, Num & Cap lock LEDS
|
|
|
|
Bit 0 is Scroll Lock 0 = Not locked
|
|
|
|
Bit 1 is Num Lock
|
|
|
|
Bit 2 is Caps Lock
|
|
|
|
|
2009-07-07 04:15:40 +02:00
|
|
|
@retval EFI_SUCCESS The BDA was updated successfully.
|
2007-06-15 12:02:42 +02:00
|
|
|
|
|
|
|
**/
|
|
|
|
typedef
|
|
|
|
EFI_STATUS
|
2008-07-31 09:44:54 +02:00
|
|
|
(EFIAPI *EFI_LEGACY_BIOS_UPDATE_KEYBOARD_LED_STATUS)(
|
2007-06-15 12:02:42 +02:00
|
|
|
IN EFI_LEGACY_BIOS_PROTOCOL *This,
|
|
|
|
IN UINT8 Leds
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Retrieve legacy BBS info and assign boot priority.
|
|
|
|
|
|
|
|
@param This Protocol instance pointer.
|
|
|
|
@param HddCount Number of HDD_INFO structures
|
|
|
|
@param HddInfo Onboard IDE controller information
|
|
|
|
@param BbsCount Number of BBS_TABLE structures
|
2009-07-07 04:15:40 +02:00
|
|
|
@param BbsTable Point to List of BBS_TABLE
|
2007-06-15 12:02:42 +02:00
|
|
|
|
|
|
|
@retval EFI_SUCCESS Tables returned
|
|
|
|
|
|
|
|
**/
|
|
|
|
typedef
|
|
|
|
EFI_STATUS
|
2008-07-31 09:44:54 +02:00
|
|
|
(EFIAPI *EFI_LEGACY_BIOS_GET_BBS_INFO)(
|
2007-06-15 12:02:42 +02:00
|
|
|
IN EFI_LEGACY_BIOS_PROTOCOL *This,
|
|
|
|
OUT UINT16 *HddCount,
|
|
|
|
OUT HDD_INFO **HddInfo,
|
|
|
|
OUT UINT16 *BbsCount,
|
|
|
|
IN OUT BBS_TABLE **BbsTable
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Assign drive number to legacy HDD drives prior to booting an EFI
|
|
|
|
aware OS so the OS can access drives without an EFI driver.
|
|
|
|
|
|
|
|
@param This Protocol instance pointer.
|
|
|
|
@param BbsCount Number of BBS_TABLE structures
|
|
|
|
@param BbsTable List BBS entries
|
|
|
|
|
|
|
|
@retval EFI_SUCCESS Drive numbers assigned
|
|
|
|
|
|
|
|
**/
|
|
|
|
typedef
|
|
|
|
EFI_STATUS
|
2008-07-31 09:44:54 +02:00
|
|
|
(EFIAPI *EFI_LEGACY_BIOS_PREPARE_TO_BOOT_EFI)(
|
2007-06-15 12:02:42 +02:00
|
|
|
IN EFI_LEGACY_BIOS_PROTOCOL *This,
|
|
|
|
OUT UINT16 *BbsCount,
|
|
|
|
OUT BBS_TABLE **BbsTable
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
To boot from an unconventional device like parties and/or execute
|
|
|
|
HDD diagnostics.
|
|
|
|
|
|
|
|
@param This Protocol instance pointer.
|
|
|
|
@param Attributes How to interpret the other input parameters
|
|
|
|
@param BbsEntry The 0-based index into the BbsTable for the parent
|
|
|
|
device.
|
|
|
|
@param BeerData Pointer to the 128 bytes of ram BEER data.
|
|
|
|
@param ServiceAreaData Pointer to the 64 bytes of raw Service Area data. The
|
|
|
|
caller must provide a pointer to the specific Service
|
|
|
|
Area and not the start all Service Areas.
|
|
|
|
|
2009-07-07 04:15:40 +02:00
|
|
|
@retval EFI_INVALID_PARAMETER if error. Does NOT return if no error.
|
2007-06-15 12:02:42 +02:00
|
|
|
|
|
|
|
**/
|
|
|
|
typedef
|
|
|
|
EFI_STATUS
|
2008-07-31 09:44:54 +02:00
|
|
|
(EFIAPI *EFI_LEGACY_BIOS_BOOT_UNCONVENTIONAL_DEVICE)(
|
2007-06-15 12:02:42 +02:00
|
|
|
IN EFI_LEGACY_BIOS_PROTOCOL *This,
|
|
|
|
IN UDC_ATTRIBUTES Attributes,
|
|
|
|
IN UINTN BbsEntry,
|
|
|
|
IN VOID *BeerData,
|
|
|
|
IN VOID *ServiceAreaData
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Shadow all legacy16 OPROMs that haven't been shadowed.
|
|
|
|
Warning: Use this with caution. This routine disconnects all EFI
|
|
|
|
drivers. If used externally then caller must re-connect EFI
|
|
|
|
drivers.
|
|
|
|
|
|
|
|
@retval EFI_SUCCESS OPROMs shadowed
|
|
|
|
|
|
|
|
**/
|
|
|
|
typedef
|
|
|
|
EFI_STATUS
|
2008-07-31 09:44:54 +02:00
|
|
|
(EFIAPI *EFI_LEGACY_BIOS_SHADOW_ALL_LEGACY_OPROMS)(
|
2007-06-15 12:02:42 +02:00
|
|
|
IN EFI_LEGACY_BIOS_PROTOCOL *This
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Get a region from the LegacyBios for S3 usage.
|
|
|
|
|
|
|
|
@param This Protocol instance pointer.
|
|
|
|
@param LegacyMemorySize Size of required region
|
|
|
|
@param Region Region to use.
|
|
|
|
00 = Either 0xE0000 or 0xF0000 block
|
|
|
|
Bit0 = 1 0xF0000 block
|
|
|
|
Bit1 = 1 0xE0000 block
|
|
|
|
@param Alignment Address alignment. Bit mapped. First non-zero
|
|
|
|
bit from right is alignment.
|
|
|
|
@param LegacyMemoryAddress Region Assigned
|
|
|
|
|
|
|
|
@retval EFI_SUCCESS Region assigned
|
2009-07-07 04:15:40 +02:00
|
|
|
@retval EFI_ACCESS_DENIED The function was previously invoked.
|
2007-06-15 12:02:42 +02:00
|
|
|
@retval Other Region not assigned
|
|
|
|
|
|
|
|
**/
|
|
|
|
typedef
|
|
|
|
EFI_STATUS
|
2008-07-31 09:44:54 +02:00
|
|
|
(EFIAPI *EFI_LEGACY_BIOS_GET_LEGACY_REGION)(
|
2007-06-15 12:02:42 +02:00
|
|
|
IN EFI_LEGACY_BIOS_PROTOCOL *This,
|
|
|
|
IN UINTN LegacyMemorySize,
|
|
|
|
IN UINTN Region,
|
|
|
|
IN UINTN Alignment,
|
|
|
|
OUT VOID **LegacyMemoryAddress
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Get a region from the LegacyBios for Tiano usage. Can only be invoked once.
|
|
|
|
|
|
|
|
@param This Protocol instance pointer.
|
|
|
|
@param LegacyMemorySize Size of data to copy
|
|
|
|
@param LegacyMemoryAddress Legacy Region destination address
|
|
|
|
Note: must be in region assigned by
|
|
|
|
LegacyBiosGetLegacyRegion
|
|
|
|
@param LegacyMemorySourceAddress
|
2009-07-07 04:15:40 +02:00
|
|
|
Source of the data to copy.
|
2007-06-15 12:02:42 +02:00
|
|
|
|
|
|
|
@retval EFI_SUCCESS Region assigned
|
|
|
|
@retval EFI_ACCESS_DENIED Destination outside assigned region
|
|
|
|
|
|
|
|
**/
|
|
|
|
typedef
|
|
|
|
EFI_STATUS
|
2008-07-31 09:44:54 +02:00
|
|
|
(EFIAPI *EFI_LEGACY_BIOS_COPY_LEGACY_REGION)(
|
2007-06-15 12:02:42 +02:00
|
|
|
IN EFI_LEGACY_BIOS_PROTOCOL *This,
|
|
|
|
IN UINTN LegacyMemorySize,
|
|
|
|
IN VOID *LegacyMemoryAddress,
|
|
|
|
IN VOID *LegacyMemorySourceAddress
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Abstracts the traditional BIOS from the rest of EFI. The LegacyBoot()
|
|
|
|
member function allows the BDS to support booting a traditional OS.
|
|
|
|
EFI thunks drivers that make EFI bindings for BIOS INT services use
|
|
|
|
all the other member functions.
|
|
|
|
**/
|
|
|
|
struct _EFI_LEGACY_BIOS_PROTOCOL {
|
2009-07-02 09:40:24 +02:00
|
|
|
///
|
|
|
|
/// Performs traditional software INT. See the Int86() function description.
|
|
|
|
///
|
2007-06-15 12:02:42 +02:00
|
|
|
EFI_LEGACY_BIOS_INT86 Int86;
|
2009-07-02 09:40:24 +02:00
|
|
|
|
|
|
|
///
|
|
|
|
/// Performs a far call into Compatibility16 or traditional OpROM code.
|
|
|
|
///
|
2007-06-15 12:02:42 +02:00
|
|
|
EFI_LEGACY_BIOS_FARCALL86 FarCall86;
|
2009-07-02 09:40:24 +02:00
|
|
|
|
|
|
|
///
|
|
|
|
/// Checks if a traditional OpROM exists for this device.
|
|
|
|
///
|
2007-06-15 12:02:42 +02:00
|
|
|
EFI_LEGACY_BIOS_CHECK_ROM CheckPciRom;
|
2009-07-02 09:40:24 +02:00
|
|
|
|
|
|
|
///
|
|
|
|
/// Loads a traditional OpROM in traditional OpROM address space.
|
|
|
|
///
|
2007-06-15 12:02:42 +02:00
|
|
|
EFI_LEGACY_BIOS_INSTALL_ROM InstallPciRom;
|
2009-07-02 09:40:24 +02:00
|
|
|
|
|
|
|
///
|
|
|
|
/// Boots a traditional OS.
|
|
|
|
///
|
2007-06-15 12:02:42 +02:00
|
|
|
EFI_LEGACY_BIOS_BOOT LegacyBoot;
|
2009-07-02 09:40:24 +02:00
|
|
|
|
|
|
|
///
|
|
|
|
/// Updates BDA to reflect the current EFI keyboard LED status.
|
|
|
|
///
|
2007-06-15 12:02:42 +02:00
|
|
|
EFI_LEGACY_BIOS_UPDATE_KEYBOARD_LED_STATUS UpdateKeyboardLedStatus;
|
2009-07-02 09:40:24 +02:00
|
|
|
|
|
|
|
///
|
|
|
|
/// Allows an external agent, such as BIOS Setup, to get the BBS data.
|
|
|
|
///
|
2007-06-15 12:02:42 +02:00
|
|
|
EFI_LEGACY_BIOS_GET_BBS_INFO GetBbsInfo;
|
2009-07-02 09:40:24 +02:00
|
|
|
|
|
|
|
///
|
|
|
|
/// Causes all legacy OpROMs to be shadowed.
|
|
|
|
///
|
2007-06-15 12:02:42 +02:00
|
|
|
EFI_LEGACY_BIOS_SHADOW_ALL_LEGACY_OPROMS ShadowAllLegacyOproms;
|
2009-07-02 09:40:24 +02:00
|
|
|
|
|
|
|
///
|
|
|
|
/// Performs all actions prior to boot. Used when booting an EFI-aware OS
|
|
|
|
/// rather than a legacy OS.
|
|
|
|
///
|
2007-06-15 12:02:42 +02:00
|
|
|
EFI_LEGACY_BIOS_PREPARE_TO_BOOT_EFI PrepareToBootEfi;
|
2009-07-02 09:40:24 +02:00
|
|
|
|
|
|
|
///
|
|
|
|
/// Allows EFI to reserve an area in the 0xE0000 or 0xF0000 block.
|
|
|
|
///
|
2007-06-15 12:02:42 +02:00
|
|
|
EFI_LEGACY_BIOS_GET_LEGACY_REGION GetLegacyRegion;
|
2009-07-02 09:40:24 +02:00
|
|
|
|
|
|
|
///
|
|
|
|
/// Allows EFI to copy data to the area specified by GetLegacyRegion.
|
|
|
|
///
|
2007-06-15 12:02:42 +02:00
|
|
|
EFI_LEGACY_BIOS_COPY_LEGACY_REGION CopyLegacyRegion;
|
2009-07-02 09:40:24 +02:00
|
|
|
|
|
|
|
///
|
|
|
|
/// Allows the user to boot off an unconventional device such as a PARTIES partition.
|
|
|
|
///
|
2007-06-15 12:02:42 +02:00
|
|
|
EFI_LEGACY_BIOS_BOOT_UNCONVENTIONAL_DEVICE BootUnconventionalDevice;
|
|
|
|
};
|
|
|
|
|
|
|
|
extern EFI_GUID gEfiLegacyBiosProtocolGuid;
|
|
|
|
|
|
|
|
#endif
|