git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2846 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			284 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			284 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  The EFI Legacy BIOS Patform Protocol is used to mate a Legacy16
 | 
						|
  implementation with this EFI code. The EFI driver that produces
 | 
						|
  the Legacy BIOS protocol is generic and consumes this protocol.
 | 
						|
  A driver that matches the Legacy16 produces this protocol
 | 
						|
 | 
						|
  Copyright (c) 2007, Intel Corporation
 | 
						|
  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:  LegacyBiosPlatform.h
 | 
						|
 | 
						|
  @par Revision Reference:
 | 
						|
  This protocol is defined in Framework for EFI Compatibility Support Module spec
 | 
						|
  Version 0.96
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _EFI_LEGACY_BIOS_PLATFORM_H_
 | 
						|
#define _EFI_LEGACY_BIOS_PLATFORM_H_
 | 
						|
 | 
						|
#include <FrameworkDxe.h>
 | 
						|
 | 
						|
#define EFI_LEGACY_BIOS_PLATFORM_PROTOCOL_GUID \
 | 
						|
  { \
 | 
						|
    0x783658a3, 0x4172, 0x4421, {0xa2, 0x99, 0xe0, 0x9, 0x7, 0x9c, 0xc, 0xb4 } \
 | 
						|
  }
 | 
						|
 | 
						|
typedef struct _EFI_LEGACY_BIOS_PLATFORM_PROTOCOL EFI_LEGACY_BIOS_PLATFORM_PROTOCOL;
 | 
						|
 | 
						|
typedef enum {
 | 
						|
  EfiGetPlatformBinaryMpTable      = 0,
 | 
						|
  EfiGetPlatformBinaryOemIntData   = 1,
 | 
						|
  EfiGetPlatformBinaryOem16Data    = 2,
 | 
						|
  EfiGetPlatformBinaryOem32Data    = 3,
 | 
						|
  EfiGetPlatformBinaryTpmBinary    = 4,
 | 
						|
  EfiGetPlatformBinarySystemRom    = 5,
 | 
						|
  EfiGetPlatformPciExpressBase     = 6,
 | 
						|
  EfiGetPlatformPmmSize            = 7,
 | 
						|
  EfiGetPlatformEndOpromShadowAddr = 8,
 | 
						|
 | 
						|
} EFI_GET_PLATFORM_INFO_MODE;
 | 
						|
 | 
						|
typedef enum {
 | 
						|
  EfiGetPlatformVgaHandle       = 0,
 | 
						|
  EfiGetPlatformIdeHandle       = 1,
 | 
						|
  EfiGetPlatformIsaBusHandle    = 2,
 | 
						|
  EfiGetPlatformUsbHandle       = 3
 | 
						|
} EFI_GET_PLATFORM_HANDLE_MODE;
 | 
						|
 | 
						|
typedef enum {
 | 
						|
  EfiPlatformHookPrepareToScanRom = 0,
 | 
						|
  EfiPlatformHookShadowServiceRoms= 1,
 | 
						|
  EfiPlatformHookAfterRomInit     = 2
 | 
						|
} EFI_GET_PLATFORM_HOOK_MODE;
 | 
						|
 | 
						|
/**
 | 
						|
  Finds the binary data or other platform information.
 | 
						|
 | 
						|
  @param  This                  Protocol instance pointer.
 | 
						|
  @param  Mode                  Specifies what data to return
 | 
						|
  @param  Table                 Pointer to MP table.
 | 
						|
  @param  TableSize             Size in bytes of table.
 | 
						|
  @param  Location              Legacy region requested
 | 
						|
                                0x00 = Any location
 | 
						|
                                Bit 0 = 0xF0000 region
 | 
						|
                                Bit 1 = 0xE0000 region
 | 
						|
                                Multiple bits can be set
 | 
						|
  @param  Alignment             Address alignment for allocation.
 | 
						|
                                Bit mapped. First non-zero bit from right
 | 
						|
                                is alignment.
 | 
						|
  @param  LegacySegment         Segment in LegacyBios where Table is stored
 | 
						|
  @param  LegacyOffset          Offset in LegacyBios where Table is stored
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Data was returned successfully.
 | 
						|
  @retval EFI_UNSUPPORTED       Mode is not supported on the platform.
 | 
						|
  @retval EFI_NOT_FOUND         Binary image or table not found.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO) (
 | 
						|
  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   *This,
 | 
						|
  IN EFI_GET_PLATFORM_INFO_MODE          Mode,
 | 
						|
  OUT VOID                               **Table,
 | 
						|
  OUT UINTN                              *TableSize,
 | 
						|
  OUT UINTN                              *Location,
 | 
						|
  OUT UINTN                              *Alignment,
 | 
						|
  IN  UINT16                             LegacySegment,
 | 
						|
  IN  UINT16                             LegacyOffset
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Returns a buffer of handles for the requested sub-function.
 | 
						|
 | 
						|
  @param  This                  Protocol instance pointer.
 | 
						|
  @param  Mode                  Specifies what handle to return.
 | 
						|
  @param  Type                  Type from Device Path for Handle to represent.
 | 
						|
  @param  HandleBuffer          Handles of the device/controller in priority order
 | 
						|
                                with HandleBuffer[0] highest priority.
 | 
						|
  @param  HandleCount           Number of handles in the buffer.
 | 
						|
  @param  AdditionalData        Mode specific.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Handle is valid
 | 
						|
  @retval EFI_UNSUPPORTED       Mode is not supported on the platform.
 | 
						|
  @retval EFI_NOT_FOUND         Handle is not known
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE) (
 | 
						|
  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   *This,
 | 
						|
  IN EFI_GET_PLATFORM_HANDLE_MODE        Mode,
 | 
						|
  IN UINT16                              Type,
 | 
						|
  OUT EFI_HANDLE                         **HandleBuffer,
 | 
						|
  OUT UINTN                              *HandleCount,
 | 
						|
  IN  VOID                               **AdditionalData OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Load and initialize the Legacy BIOS SMM handler.
 | 
						|
 | 
						|
  @param  This                   Protocol instance pointer.
 | 
						|
  @param  EfiToLegacy16BootTable Pointer to Legacy16 boot table.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           SMM code loaded.
 | 
						|
  @retval EFI_DEVICE_ERROR      SMM code failed to load
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_SMM_INIT) (
 | 
						|
  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   *This,
 | 
						|
  IN  VOID                               *EfiToLegacy16BootTable
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Allows platform to perform any required action after a LegacyBios operation.
 | 
						|
 | 
						|
  @param  This                  Protocol instance pointer.
 | 
						|
  @param  Mode                  Specifies what handle to return.
 | 
						|
  @param  Type                  Mode specific.
 | 
						|
  @param  DeviceHandle          List of PCI devices in the system.
 | 
						|
  @param  ShadowAddress         First free OpROM area, after other OpROMs have been dispatched.
 | 
						|
  @param  Compatibility16Table  Pointer to Compatibility16Table.
 | 
						|
  @param  AdditionalData        Mode specific Pointer to additional data returned - mode specific.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           RomImage is valid
 | 
						|
  @retval EFI_UNSUPPORTED       Mode is not supported on the platform.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_HOOKS) (
 | 
						|
  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   *This,
 | 
						|
  IN EFI_GET_PLATFORM_HOOK_MODE          Mode,
 | 
						|
  IN UINT16                              Type,
 | 
						|
  IN  EFI_HANDLE                         DeviceHandle,
 | 
						|
  IN  OUT UINTN                          *ShadowAddress,
 | 
						|
  IN  EFI_COMPATIBILITY16_TABLE          *Compatibility16Table,
 | 
						|
  IN  VOID                               **AdditionalData OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Returns information associated with PCI IRQ routing.
 | 
						|
 | 
						|
  @param  This                    Protocol instance pointer.
 | 
						|
  @param  RoutingTable            Pointer to PCI IRQ Routing table.
 | 
						|
  @param  RoutingTableEntries     Number of entries in table.
 | 
						|
  @param  LocalPirqTable          $PIR table
 | 
						|
  @param  PirqTableSize           $PIR table size
 | 
						|
  @param  LocalIrqPriorityTable   List of interrupts in priority order to assign
 | 
						|
  @param  IrqPriorityTableEntries Number of entries in priority table
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Data was successfully returned.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE) (
 | 
						|
  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   *This,
 | 
						|
  OUT VOID                               **RoutingTable,
 | 
						|
  OUT UINTN                              *RoutingTableEntries,
 | 
						|
  OUT VOID                               **LocalPirqTable, OPTIONAL
 | 
						|
  OUT UINTN                              *PirqTableSize, OPTIONAL
 | 
						|
  OUT VOID                               **LocalIrqPriorityTable, OPTIONAL
 | 
						|
  OUT UINTN                              *IrqPriorityTableEntries OPTIONAL
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Translates the given PIRQ accounting for bridge
 | 
						|
 | 
						|
  @param  This                  Protocol instance pointer.
 | 
						|
  @param  PciBus                PCI bus number for this device.
 | 
						|
  @param  PciDevice             PCI device number for this device.
 | 
						|
  @param  PciFunction           PCI function number for this device.
 | 
						|
  @param  Pirq                  Input is PIRQ reported by device, output is true PIRQ.
 | 
						|
  @param  PciIrq                The IRQ already assigned to the PIRQ or the IRQ to be
 | 
						|
                                assigned to the PIRQ.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The PIRQ was translated.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_TRANSLATE_PIRQ) (
 | 
						|
  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   *This,
 | 
						|
  IN  UINTN                              PciBus,
 | 
						|
  IN  UINTN                              PciDevice,
 | 
						|
  IN  UINTN                              PciFunction,
 | 
						|
  IN  OUT UINT8                          *Pirq,
 | 
						|
  OUT UINT8                              *PciIrq
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Attempt to legacy boot the BootOption. If the EFI contexted has been
 | 
						|
  compromised this function will not return.
 | 
						|
 | 
						|
  @param  This                   Protocol instance pointer.
 | 
						|
  @param  BbsDevicePath          EFI Device Path from BootXXXX variable.
 | 
						|
  @param  BbsTable               Internal BBS table.
 | 
						|
  @param  LoadOptionSize         Size of LoadOption in size.
 | 
						|
  @param  LoadOption             LoadOption from BootXXXX variable
 | 
						|
  @param  EfiToLegacy16BootTable Pointer to BootTable structure
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Ready to boot.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_PREPARE_TO_BOOT) (
 | 
						|
  IN EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   *This,
 | 
						|
  IN  BBS_BBS_DEVICE_PATH                *BbsDevicePath,
 | 
						|
  IN  VOID                               *BbsTable,
 | 
						|
  IN  UINT32                             LoadOptionsSize,
 | 
						|
  IN  VOID                               *LoadOptions,
 | 
						|
  IN  VOID                               *EfiToLegacy16BootTable
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  @par Protocol Description:
 | 
						|
  Abstracts the platform portion of the traditional BIOS.
 | 
						|
 | 
						|
  @param GetPlatformInfo
 | 
						|
  Gets binary data or other platform information.
 | 
						|
 | 
						|
  @param GetPlatformHandle
 | 
						|
  Returns a buffer of all handles matching the requested subfunction.
 | 
						|
 | 
						|
  @param SmmInit
 | 
						|
  Loads and initializes the traditional BIOS SMM handler.
 | 
						|
 | 
						|
  @param PlatformHooks
 | 
						|
  Allows platform to perform any required actions after a LegacyBios operation.
 | 
						|
 | 
						|
  @param GetRoutingTable
 | 
						|
  Gets $PIR table.
 | 
						|
 | 
						|
  @param TranslatePirq
 | 
						|
  Translates the given PIRQ to the final value after traversing any PCI bridges.
 | 
						|
 | 
						|
  @param PrepareToBoot
 | 
						|
  Final platform function before the system attempts to boot to a traditional OS.
 | 
						|
 | 
						|
**/
 | 
						|
struct _EFI_LEGACY_BIOS_PLATFORM_PROTOCOL {
 | 
						|
  EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO    GetPlatformInfo;
 | 
						|
  EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE  GetPlatformHandle;
 | 
						|
  EFI_LEGACY_BIOS_PLATFORM_SMM_INIT             SmmInit;
 | 
						|
  EFI_LEGACY_BIOS_PLATFORM_HOOKS                PlatformHooks;
 | 
						|
  EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE    GetRoutingTable;
 | 
						|
  EFI_LEGACY_BIOS_PLATFORM_TRANSLATE_PIRQ       TranslatePirq;
 | 
						|
  EFI_LEGACY_BIOS_PLATFORM_PREPARE_TO_BOOT      PrepareToBoot;
 | 
						|
};
 | 
						|
 | 
						|
extern EFI_GUID gEfiLegacyBiosPlatformProtocolGuid;
 | 
						|
 | 
						|
#endif
 |