mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-10-31 13:02:07 +00:00 
			
		
		
		
	 0f899407a3
			
		
	
	
		0f899407a3
		
	
	
	
	
		
			
			git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8369 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.97.
 | |
| 
 | |
| **/
 | |
| 
 | |
| #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
 |