13eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
23eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3f57387d54bd8f2c0261834b2ad16155f1db63291hhtianCopyright (c) 1999 - 2006, Intel Corporation. All rights reserved.<BR>
4f57387d54bd8f2c0261834b2ad16155f1db63291hhtianThis program and the accompanying materials
53eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangare licensed and made available under the terms and conditions of the BSD License
63eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangwhich accompanies this distribution.  The full text of the license may be found at
73eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwanghttp://opensource.org/licenses/bsd-license.php
83eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
93eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangModule Name:
143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  LegacyBiosPlatform.h
163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangAbstract:
183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  The EFI Legacy BIOS Patform Protocol is used to mate a Legacy16
203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  implementation with this EFI code. The EFI driver that produces
213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  the Legacy BIOS protocol is generic and consumes this protocol.
223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  A driver that matches the Legacy16 produces this protocol
233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangRevision History
253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  The EFI Legacy BIOS Platform Protocol is compliant with CSM spec 0.96.
273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#ifndef _EFI_LEGACY_BIOS_PLATFORM_H
313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define _EFI_LEGACY_BIOS_PLATFORM_H
323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#define EFI_LEGACY_BIOS_PLATFORM_PROTOCOL_GUID \
343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  { \
357ccf38a33e1e227131c170a621d183b3bacef148qhuang    0x783658a3, 0x4172, 0x4421, {0xa2, 0x99, 0xe0, 0x9, 0x7, 0x9c, 0xc, 0xb4} \
363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  }
373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_FORWARD_DECLARATION (EFI_LEGACY_BIOS_PLATFORM_PROTOCOL);
393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#include "Tiano.h"
413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#include EFI_PROTOCOL_DEFINITION (LegacyBios)
423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#pragma pack(1)
443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang// Define structures for GetOemIntData
463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//  Note:
473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    OemIntDataElenent is an array of structures from 0 to Count-1.
483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//    RawData is an array of bytes from 0 to RamDataLength-1.
493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang//
503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct {
513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT16  Int;
523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT16  Ax;
533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT32  RawDataLength;
543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT8   RawData[1];
553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_OEM_INT_DATA_ELEMENT;
563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef struct {
583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  UINT16                    Count;
593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EFI_OEM_INT_DATA_ELEMENT  OemIntDataElement[1];
603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_OEM_INT_DATA;
613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#pragma pack()
623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef enum {
643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiGetPlatformBinaryMpTable        = 0,
653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiGetPlatformBinaryOemIntData     = 1,
663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiGetPlatformBinaryOem16Data      = 2,
673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiGetPlatformBinaryOem32Data      = 3,
683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiGetPlatformBinaryTpmBinary      = 4,
693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiGetPlatformBinarySystemRom      = 5,
703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiGetPlatformPciExpressBase       = 6,
713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiGetPlatformPmmSize              = 7,
723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiGetPlatformEndOfOpromShadowAddr = 8
733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_GET_PLATFORM_INFO_MODE;
743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef enum {
763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiGetPlatformVgaHandle       = 0,
773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiGetPlatformIdeHandle       = 1,
783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiGetPlatformIsaBusHandle    = 2,
793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiGetPlatformUsbHandle       = 3
803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_GET_PLATFORM_HANDLE_MODE;
813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef enum {
833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiPlatformHookPrepareToScanRom = 0,
843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiPlatformHookShadowServiceRoms= 1,
853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EfiPlatformHookAfterRomInit     = 2
863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang} EFI_GET_PLATFORM_HOOK_MODE;
873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef
893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO) (
913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   * This,
923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_GET_PLATFORM_INFO_MODE          Mode,
933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT VOID                               **Table,
943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT UINTN                              *TableSize,
953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT UINTN                              *Location,
963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT UINTN                              *Alignment,
973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN  UINT16                             LegacySegment,
983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN  UINT16                             LegacyOffset
993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
1003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
1013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Routine Description:
1033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Return a System ROM image for the platform
1043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Arguments:
1063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    This                   - Protocol instance pointer.
1073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Mode                   - Specifies what data to return
1083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Table                  - Pointer to MP table.
1093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    TableSize              - Size in bytes of table.
1103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Location               - Legacy region requested
1113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                               0x00 = Any location
1123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                               Bit 0 = 0xF0000 region
1133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                               Bit 1 = 0xE0000 region
1143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                               Multiple bits can be set
1153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Alignment              - Address alignment for allocation.
1163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                             Bit mapped. First non-zero bit from right
1173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                             is alignment.
1183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    LegacySegment          - Segment in LegacyBios where Table is stored
1203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    LegacyOffset           - Offset in LegacyBios where Table is stored
1213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Returns:
1233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_SUCCESS     - Data was returned successfully.
1243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_UNSUPPORTED - Mode is not supported on the platform.
1253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_NOT_FOUND   - Binary image or table not found.
1263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
1283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang;
1293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef
1313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
1323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE) (
1333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   * This,
1343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_GET_PLATFORM_HANDLE_MODE        Mode,
1353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN UINT16                              Type,
1363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT EFI_HANDLE                         **HandleBuffer,
1373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT UINTN                              *HandleCount,
1383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN  VOID                               **AdditionalData OPTIONAL
1393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
1403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
1413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Routine Description:
1433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Return the Legacy16 policy for which device should be the VGA controller
1443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    used during a Legacy16 boot.
1453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Arguments:
1473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    This             - Protocol instance pointer.
1483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Mode             - Specifies what handle to return.
1493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Type             - Type from Device Path for Handle to represent.
1503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    HandleBuffer     - Handles of the device/controller in priority order
1513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                       with HandleBuffer[0] highest priority.
1523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    HandleCount      - Number of handles in the buffer.
1533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    AdditionalData   - Mode specific.
1543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Returns:
1573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_SUCCESS     - Handle is valid
1583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_UNSUPPORTED - Mode is not supported on the platform.
1593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_NOT_FOUND   - Handle is not known
1603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
1623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang;
1633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef
1653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
1663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_SMM_INIT) (
1673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   * This,
1683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN  VOID                               *EfiToLegacy16BootTable
1693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  );
1703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
1723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Routine Description:
1743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Load and initialize the Legacy BIOS SMM handler.
1753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Arguments:
1773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    This                   - Protocol instance pointer.
1783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EfiToLegacy16BootTable - Pointer to Legacy16 boot table.
1793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Returns:
1803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_SUCCESS      - SMM code loaded.
1813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_DEVICE_ERROR - SMM code failed to load
1823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
1843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang;
1853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef
1873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
1883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_HOOKS) (
1893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   * This,
1903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_GET_PLATFORM_HOOK_MODE          Mode,
1913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN UINT16                              Type,
1923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN  EFI_HANDLE                         DeviceHandle,
1933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN  OUT UINTN                          *ShadowAddress,
1943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN  EFI_COMPATIBILITY16_TABLE          * Compatibility16Table,
1953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN  VOID                               **AdditionalData OPTIONAL
1963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
1973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
1983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
1993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Routine Description:
2003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Prepare to scan a ROM.
2013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Arguments:
2033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    This                   - Protocol instance pointer.
2043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Handle                 - Device handle
2053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    ShadowAddress          - Address that ROM is shadowed at prior to
2063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                             initialization or first free ROM address,
2073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                             depending upon mode.
2083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Compatibility16Table   - Pointer to Compatibility16Table.
2093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    AdditionalData   - Mode specific.
2103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Returns:
2133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_SUCCESS     - RomImage is valid
2143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_UNSUPPORTED - Mode is not supported on the platform or platform
2153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                      policy is to not install this OPROM.
2163eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
2173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang;
2183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef
2203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
2213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE) (
2223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   * This,
2233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT VOID                               **RoutingTable,
2243eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT UINTN                              *RoutingTableEntries,
2253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT VOID                               **LocalPirqTable, OPTIONAL
2263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT UINTN                              *PirqTableSize, OPTIONAL
2273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT VOID                               **LocalIrqPriorityTable, OPTIONAL
2283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT UINTN                              *IrqPriorityTableEntries OPTIONAL
2293eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
2303eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
2313eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2323eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Routine Description:
2333eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang      1. List of IRQ routing entries and number of entries.
2343eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang      2. Pointer to Entire $PIR table and length.
2353eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang      3. List of IRQs to assign to PCI in priority.
2363eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2373eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Arguments:
2383eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    This                - Protocol instance pointer.
2393eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    RoutingTable        - Pointer to PCI IRQ Routing table.
2403eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    RoutingTableEntries - Number of entries in table.
2413eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    LocalPirqTable         - $PIR table
2423eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    PirqTableSize          - $PIR table size
2433eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    LocalIrqPriorityTable  - List of interrupts in priority order to assign
2443eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    IrqPriorityTableEntries- Number of entries in priority table
2453eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2463eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Returns:
2473eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_SUCCESS   - Table pointer returned
2483eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2493eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
2503eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang;
2513eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2523eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef
2533eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
2543eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_TRANSLATE_PIRQ) (
2553eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   * This,
2563eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN  UINTN                              PciBus,
2573eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN  UINTN                              PciDevice,
2583eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN  UINTN                              PciFunction,
2593eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN  OUT UINT8                          *Pirq,
2603eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  OUT UINT8                              *PciIrq
2613eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
2623eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
2633eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2643eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Routine Description:
2653eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Translate the PIRQ reported by the PCI device into the true PIRQ
2663eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    from the internal IRQ routing information and IRQ assigned or to be
2673eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    assigned to device.
2683eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2693eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Arguments:
2703eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    This        - Protocol instance pointer.
2713eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                  Base as defined below is the bus,device, function in
2723eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                  IRQ routing table.
2733eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    PciBus      - Base Bus for this device.
2743eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    PciDevice   - Base Device for this device.
2753eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    PciFunction - Base Function for this device.
2763eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Pirq        - Input is PIRQ reported by device, output is true PIRQ.
2773eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    PciIrq      - The IRQ already assigned to the PIRQ or the IRQ to be
2783eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang                  assigned to the PIRQ.
2793eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2803eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Returns:
2813eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_SUCCESS  - Irq translated
2823eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2833eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
2843eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang;
2853eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2863eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangtypedef
2873eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangEFI_STATUS
2883eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_PREPARE_TO_BOOT) (
2893eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   * This,
2903eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN  BBS_BBS_DEVICE_PATH                * BbsDevicePath,
2913eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN  VOID                               *BbsTable,
2923eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN  UINT32                             LoadOptionsSize,
2933eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN  VOID                               *LoadOptions,
2943eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  IN  VOID                               *EfiToLegacy16BootTable
2953eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  )
2963eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang/*++
2973eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
2983eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Routine Description:
2993eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    Attempt to legacy boot the BootOption. If the EFI contexted has been
3003eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    compromised this function will not return.
3013eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3023eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Arguments:
3033eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    This                      - Protocol instance pointer.
3043eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    BbsDevicePath             - EFI Device Path from BootXXXX variable.
3053eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    BbsTable                  - Internal BBS table.
3063eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    LoadOptionSize            - Size of LoadOption in size.
3073eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    LoadOption                - LoadOption from BootXXXX variable
3083eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EfiToLegacy16BootTable    - Pointer to BootTable structure
3093eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3103eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  Returns:
3113eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang    EFI_SUCCESS     - Removable media not present
3123eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3133eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang--*/
3143eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang;
3153eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3165d46191d8fa6bb1ac94f697136b3444c61e8777cjljustenstruct _EFI_LEGACY_BIOS_PLATFORM_PROTOCOL {
3173eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO    GetPlatformInfo;
3183eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE  GetPlatformHandle;
3193eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EFI_LEGACY_BIOS_PLATFORM_SMM_INIT             SmmInit;
3203eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EFI_LEGACY_BIOS_PLATFORM_HOOKS                PlatformHooks;
3213eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE    GetRoutingTable;
3223eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EFI_LEGACY_BIOS_PLATFORM_TRANSLATE_PIRQ       TranslatePirq;
3233eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang  EFI_LEGACY_BIOS_PLATFORM_PREPARE_TO_BOOT      PrepareToBoot;
3245d46191d8fa6bb1ac94f697136b3444c61e8777cjljusten};
3253eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3263eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwangextern EFI_GUID gEfiLegacyBiosPlatformProtocolGuid;
3273eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang
3283eb9473ea9a949badfe06ae61d2d3fcfa53651c7qwang#endif
329