mirror of https://github.com/acidanthera/audk.git
340 lines
12 KiB
C
340 lines
12 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;
|
|
|
|
|
|
//
|
|
//
|
|
//
|
|
|
|
#define PCI_UNUSED 0x00
|
|
#define PCI_USED 0xFF
|
|
#define LEGACY_USED 0xFE
|
|
|
|
#pragma pack(1)
|
|
|
|
//
|
|
//
|
|
//
|
|
typedef struct {
|
|
UINT8 Irq;
|
|
UINT8 Used;
|
|
} EFI_LEGACY_IRQ_PRIORITY_TABLE_ENTRY;
|
|
|
|
//
|
|
// Define PIR table structures
|
|
//
|
|
#define EFI_LEGACY_PIRQ_TABLE_SIGNATURE SIGNATURE_32 ('$', 'P', 'I', 'R')
|
|
|
|
typedef struct {
|
|
UINT32 Signature;
|
|
UINT8 MinorVersion;
|
|
UINT8 MajorVersion;
|
|
UINT16 TableSize;
|
|
UINT8 Bus;
|
|
UINT8 DevFun;
|
|
UINT16 PciOnlyIrq;
|
|
UINT16 CompatibleVid;
|
|
UINT16 CompatibleDid;
|
|
UINT32 Miniport;
|
|
UINT8 Reserved[11];
|
|
UINT8 Checksum;
|
|
} EFI_LEGACY_PIRQ_TABLE_HEADER;
|
|
|
|
|
|
typedef struct {
|
|
UINT8 Pirq;
|
|
UINT16 IrqMask;
|
|
} EFI_LEGACY_PIRQ_ENTRY;
|
|
|
|
typedef struct {
|
|
UINT8 Bus;
|
|
UINT8 Device;
|
|
EFI_LEGACY_PIRQ_ENTRY PirqEntry[4];
|
|
UINT8 Slot;
|
|
UINT8 Reserved;
|
|
} EFI_LEGACY_IRQ_ROUTING_ENTRY;
|
|
|
|
#pragma pack()
|
|
|
|
|
|
/**
|
|
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
|