[efi] Add definitions of GUIDs observed during Windows boot
Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
parent
64dc45a4dc
commit
a56bba3912
2175
src/include/ipxe/efi/IndustryStandard/Tpm12.h
Normal file
2175
src/include/ipxe/efi/IndustryStandard/Tpm12.h
Normal file
File diff suppressed because it is too large
Load Diff
172
src/include/ipxe/efi/IndustryStandard/UefiTcgPlatform.h
Normal file
172
src/include/ipxe/efi/IndustryStandard/UefiTcgPlatform.h
Normal file
@ -0,0 +1,172 @@
|
||||
/** @file
|
||||
TCG EFI Platform Definition in TCG_EFI_Platform_1_20_Final
|
||||
|
||||
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef __UEFI_TCG_PLATFORM_H__
|
||||
#define __UEFI_TCG_PLATFORM_H__
|
||||
|
||||
FILE_LICENCE ( BSD3 );
|
||||
|
||||
#include <ipxe/efi/IndustryStandard/Tpm12.h>
|
||||
#include <ipxe/efi/Uefi.h>
|
||||
|
||||
//
|
||||
// Standard event types
|
||||
//
|
||||
#define EV_POST_CODE ((TCG_EVENTTYPE) 0x00000001)
|
||||
#define EV_SEPARATOR ((TCG_EVENTTYPE) 0x00000004)
|
||||
#define EV_S_CRTM_CONTENTS ((TCG_EVENTTYPE) 0x00000007)
|
||||
#define EV_S_CRTM_VERSION ((TCG_EVENTTYPE) 0x00000008)
|
||||
#define EV_CPU_MICROCODE ((TCG_EVENTTYPE) 0x00000009)
|
||||
#define EV_TABLE_OF_DEVICES ((TCG_EVENTTYPE) 0x0000000B)
|
||||
|
||||
//
|
||||
// EFI specific event types
|
||||
//
|
||||
#define EV_EFI_EVENT_BASE ((TCG_EVENTTYPE) 0x80000000)
|
||||
#define EV_EFI_VARIABLE_DRIVER_CONFIG (EV_EFI_EVENT_BASE + 1)
|
||||
#define EV_EFI_VARIABLE_BOOT (EV_EFI_EVENT_BASE + 2)
|
||||
#define EV_EFI_BOOT_SERVICES_APPLICATION (EV_EFI_EVENT_BASE + 3)
|
||||
#define EV_EFI_BOOT_SERVICES_DRIVER (EV_EFI_EVENT_BASE + 4)
|
||||
#define EV_EFI_RUNTIME_SERVICES_DRIVER (EV_EFI_EVENT_BASE + 5)
|
||||
#define EV_EFI_GPT_EVENT (EV_EFI_EVENT_BASE + 6)
|
||||
#define EV_EFI_ACTION (EV_EFI_EVENT_BASE + 7)
|
||||
#define EV_EFI_PLATFORM_FIRMWARE_BLOB (EV_EFI_EVENT_BASE + 8)
|
||||
#define EV_EFI_HANDOFF_TABLES (EV_EFI_EVENT_BASE + 9)
|
||||
|
||||
#define EFI_CALLING_EFI_APPLICATION \
|
||||
"Calling EFI Application from Boot Option"
|
||||
#define EFI_RETURNING_FROM_EFI_APPLICATOIN \
|
||||
"Returning from EFI Application from Boot Option"
|
||||
#define EFI_EXIT_BOOT_SERVICES_INVOCATION \
|
||||
"Exit Boot Services Invocation"
|
||||
#define EFI_EXIT_BOOT_SERVICES_FAILED \
|
||||
"Exit Boot Services Returned with Failure"
|
||||
#define EFI_EXIT_BOOT_SERVICES_SUCCEEDED \
|
||||
"Exit Boot Services Returned with Success"
|
||||
|
||||
|
||||
#define EV_POSTCODE_INFO_POST_CODE "POST CODE"
|
||||
#define POST_CODE_STR_LEN (sizeof(EV_POSTCODE_INFO_POST_CODE) - 1)
|
||||
|
||||
#define EV_POSTCODE_INFO_SMM_CODE "SMM CODE"
|
||||
#define SMM_CODE_STR_LEN (sizeof(EV_POSTCODE_INFO_SMM_CODE) - 1)
|
||||
|
||||
#define EV_POSTCODE_INFO_ACPI_DATA "ACPI DATA"
|
||||
#define ACPI_DATA_LEN (sizeof(EV_POSTCODE_INFO_ACPI_DATA) - 1)
|
||||
|
||||
#define EV_POSTCODE_INFO_BIS_CODE "BIS CODE"
|
||||
#define BIS_CODE_LEN (sizeof(EV_POSTCODE_INFO_BIS_CODE) - 1)
|
||||
|
||||
#define EV_POSTCODE_INFO_UEFI_PI "UEFI PI"
|
||||
#define UEFI_PI_LEN (sizeof(EV_POSTCODE_INFO_UEFI_PI) - 1)
|
||||
|
||||
#define EV_POSTCODE_INFO_OPROM "Embedded Option ROM"
|
||||
#define OPROM_LEN (sizeof(EV_POSTCODE_INFO_OPROM) - 1)
|
||||
|
||||
//
|
||||
// Set structure alignment to 1-byte
|
||||
//
|
||||
#pragma pack (1)
|
||||
|
||||
typedef UINT32 TCG_EVENTTYPE;
|
||||
typedef TPM_PCRINDEX TCG_PCRINDEX;
|
||||
typedef TPM_DIGEST TCG_DIGEST;
|
||||
///
|
||||
/// Event Log Entry Structure Definition
|
||||
///
|
||||
typedef struct tdTCG_PCR_EVENT {
|
||||
TCG_PCRINDEX PCRIndex; ///< PCRIndex event extended to
|
||||
TCG_EVENTTYPE EventType; ///< TCG EFI event type
|
||||
TCG_DIGEST Digest; ///< Value extended into PCRIndex
|
||||
UINT32 EventSize; ///< Size of the event data
|
||||
UINT8 Event[1]; ///< The event data
|
||||
} TCG_PCR_EVENT;
|
||||
|
||||
#define TSS_EVENT_DATA_MAX_SIZE 256
|
||||
|
||||
///
|
||||
/// TCG_PCR_EVENT_HDR
|
||||
///
|
||||
typedef struct tdTCG_PCR_EVENT_HDR {
|
||||
TCG_PCRINDEX PCRIndex;
|
||||
TCG_EVENTTYPE EventType;
|
||||
TCG_DIGEST Digest;
|
||||
UINT32 EventSize;
|
||||
} TCG_PCR_EVENT_HDR;
|
||||
|
||||
///
|
||||
/// EFI_PLATFORM_FIRMWARE_BLOB
|
||||
///
|
||||
/// BlobLength should be of type UINTN but we use UINT64 here
|
||||
/// because PEI is 32-bit while DXE is 64-bit on x64 platforms
|
||||
///
|
||||
typedef struct tdEFI_PLATFORM_FIRMWARE_BLOB {
|
||||
EFI_PHYSICAL_ADDRESS BlobBase;
|
||||
UINT64 BlobLength;
|
||||
} EFI_PLATFORM_FIRMWARE_BLOB;
|
||||
|
||||
///
|
||||
/// EFI_IMAGE_LOAD_EVENT
|
||||
///
|
||||
/// This structure is used in EV_EFI_BOOT_SERVICES_APPLICATION,
|
||||
/// EV_EFI_BOOT_SERVICES_DRIVER and EV_EFI_RUNTIME_SERVICES_DRIVER
|
||||
///
|
||||
typedef struct tdEFI_IMAGE_LOAD_EVENT {
|
||||
EFI_PHYSICAL_ADDRESS ImageLocationInMemory;
|
||||
UINTN ImageLengthInMemory;
|
||||
UINTN ImageLinkTimeAddress;
|
||||
UINTN LengthOfDevicePath;
|
||||
EFI_DEVICE_PATH_PROTOCOL DevicePath[1];
|
||||
} EFI_IMAGE_LOAD_EVENT;
|
||||
|
||||
///
|
||||
/// EFI_HANDOFF_TABLE_POINTERS
|
||||
///
|
||||
/// This structure is used in EV_EFI_HANDOFF_TABLES event to facilitate
|
||||
/// the measurement of given configuration tables.
|
||||
///
|
||||
typedef struct tdEFI_HANDOFF_TABLE_POINTERS {
|
||||
UINTN NumberOfTables;
|
||||
EFI_CONFIGURATION_TABLE TableEntry[1];
|
||||
} EFI_HANDOFF_TABLE_POINTERS;
|
||||
|
||||
///
|
||||
/// EFI_VARIABLE_DATA
|
||||
///
|
||||
/// This structure serves as the header for measuring variables. The name of the
|
||||
/// variable (in Unicode format) should immediately follow, then the variable
|
||||
/// data.
|
||||
///
|
||||
typedef struct tdEFI_VARIABLE_DATA {
|
||||
EFI_GUID VariableName;
|
||||
UINTN UnicodeNameLength;
|
||||
UINTN VariableDataLength;
|
||||
CHAR16 UnicodeName[1];
|
||||
INT8 VariableData[1]; ///< Driver or platform-specific data
|
||||
} EFI_VARIABLE_DATA;
|
||||
|
||||
typedef struct tdEFI_GPT_DATA {
|
||||
EFI_PARTITION_TABLE_HEADER EfiPartitionHeader;
|
||||
UINTN NumberOfPartitions;
|
||||
EFI_PARTITION_ENTRY Partitions[1];
|
||||
} EFI_GPT_DATA;
|
||||
|
||||
//
|
||||
// Restore original structure alignment
|
||||
//
|
||||
#pragma pack ()
|
||||
|
||||
#endif
|
||||
|
||||
|
278
src/include/ipxe/efi/Protocol/GraphicsOutput.h
Normal file
278
src/include/ipxe/efi/Protocol/GraphicsOutput.h
Normal file
@ -0,0 +1,278 @@
|
||||
/** @file
|
||||
Graphics Output Protocol from the UEFI 2.0 specification.
|
||||
|
||||
Abstraction of a very simple graphics device.
|
||||
|
||||
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef __GRAPHICS_OUTPUT_H__
|
||||
#define __GRAPHICS_OUTPUT_H__
|
||||
|
||||
FILE_LICENCE ( BSD3 );
|
||||
|
||||
#define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x9042a9de, 0x23dc, 0x4a38, {0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a } \
|
||||
}
|
||||
|
||||
typedef struct _EFI_GRAPHICS_OUTPUT_PROTOCOL EFI_GRAPHICS_OUTPUT_PROTOCOL;
|
||||
|
||||
typedef struct {
|
||||
UINT32 RedMask;
|
||||
UINT32 GreenMask;
|
||||
UINT32 BlueMask;
|
||||
UINT32 ReservedMask;
|
||||
} EFI_PIXEL_BITMASK;
|
||||
|
||||
typedef enum {
|
||||
///
|
||||
/// A pixel is 32-bits and byte zero represents red, byte one represents green,
|
||||
/// byte two represents blue, and byte three is reserved. This is the definition
|
||||
/// for the physical frame buffer. The byte values for the red, green, and blue
|
||||
/// components represent the color intensity. This color intensity value range
|
||||
/// from a minimum intensity of 0 to maximum intensity of 255.
|
||||
///
|
||||
PixelRedGreenBlueReserved8BitPerColor,
|
||||
///
|
||||
/// A pixel is 32-bits and byte zero represents blue, byte one represents green,
|
||||
/// byte two represents red, and byte three is reserved. This is the definition
|
||||
/// for the physical frame buffer. The byte values for the red, green, and blue
|
||||
/// components represent the color intensity. This color intensity value range
|
||||
/// from a minimum intensity of 0 to maximum intensity of 255.
|
||||
///
|
||||
PixelBlueGreenRedReserved8BitPerColor,
|
||||
///
|
||||
/// The Pixel definition of the physical frame buffer.
|
||||
///
|
||||
PixelBitMask,
|
||||
///
|
||||
/// This mode does not support a physical frame buffer.
|
||||
///
|
||||
PixelBltOnly,
|
||||
///
|
||||
/// Valid EFI_GRAPHICS_PIXEL_FORMAT enum values are less than this value.
|
||||
///
|
||||
PixelFormatMax
|
||||
} EFI_GRAPHICS_PIXEL_FORMAT;
|
||||
|
||||
typedef struct {
|
||||
///
|
||||
/// The version of this data structure. A value of zero represents the
|
||||
/// EFI_GRAPHICS_OUTPUT_MODE_INFORMATION structure as defined in this specification.
|
||||
///
|
||||
UINT32 Version;
|
||||
///
|
||||
/// The size of video screen in pixels in the X dimension.
|
||||
///
|
||||
UINT32 HorizontalResolution;
|
||||
///
|
||||
/// The size of video screen in pixels in the Y dimension.
|
||||
///
|
||||
UINT32 VerticalResolution;
|
||||
///
|
||||
/// Enumeration that defines the physical format of the pixel. A value of PixelBltOnly
|
||||
/// implies that a linear frame buffer is not available for this mode.
|
||||
///
|
||||
EFI_GRAPHICS_PIXEL_FORMAT PixelFormat;
|
||||
///
|
||||
/// This bit-mask is only valid if PixelFormat is set to PixelPixelBitMask.
|
||||
/// A bit being set defines what bits are used for what purpose such as Red, Green, Blue, or Reserved.
|
||||
///
|
||||
EFI_PIXEL_BITMASK PixelInformation;
|
||||
///
|
||||
/// Defines the number of pixel elements per video memory line.
|
||||
///
|
||||
UINT32 PixelsPerScanLine;
|
||||
} EFI_GRAPHICS_OUTPUT_MODE_INFORMATION;
|
||||
|
||||
/**
|
||||
Returns information for an available graphics mode that the graphics device
|
||||
and the set of active video output devices supports.
|
||||
|
||||
@param This The EFI_GRAPHICS_OUTPUT_PROTOCOL instance.
|
||||
@param ModeNumber The mode number to return information on.
|
||||
@param SizeOfInfo A pointer to the size, in bytes, of the Info buffer.
|
||||
@param Info A pointer to callee allocated buffer that returns information about ModeNumber.
|
||||
|
||||
@retval EFI_SUCCESS Valid mode information was returned.
|
||||
@retval EFI_DEVICE_ERROR A hardware error occurred trying to retrieve the video mode.
|
||||
@retval EFI_INVALID_PARAMETER ModeNumber is not valid.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE)(
|
||||
IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
|
||||
IN UINT32 ModeNumber,
|
||||
OUT UINTN *SizeOfInfo,
|
||||
OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info
|
||||
);
|
||||
|
||||
/**
|
||||
Set the video device into the specified mode and clears the visible portions of
|
||||
the output display to black.
|
||||
|
||||
@param This The EFI_GRAPHICS_OUTPUT_PROTOCOL instance.
|
||||
@param ModeNumber Abstraction that defines the current video mode.
|
||||
|
||||
@retval EFI_SUCCESS The graphics mode specified by ModeNumber was selected.
|
||||
@retval EFI_DEVICE_ERROR The device had an error and could not complete the request.
|
||||
@retval EFI_UNSUPPORTED ModeNumber is not supported by this device.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE)(
|
||||
IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
|
||||
IN UINT32 ModeNumber
|
||||
);
|
||||
|
||||
typedef struct {
|
||||
UINT8 Blue;
|
||||
UINT8 Green;
|
||||
UINT8 Red;
|
||||
UINT8 Reserved;
|
||||
} EFI_GRAPHICS_OUTPUT_BLT_PIXEL;
|
||||
|
||||
typedef union {
|
||||
EFI_GRAPHICS_OUTPUT_BLT_PIXEL Pixel;
|
||||
UINT32 Raw;
|
||||
} EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION;
|
||||
|
||||
///
|
||||
/// actions for BltOperations
|
||||
///
|
||||
typedef enum {
|
||||
///
|
||||
/// Write data from the BltBuffer pixel (0, 0)
|
||||
/// directly to every pixel of the video display rectangle
|
||||
/// (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height).
|
||||
/// Only one pixel will be used from the BltBuffer. Delta is NOT used.
|
||||
///
|
||||
EfiBltVideoFill,
|
||||
|
||||
///
|
||||
/// Read data from the video display rectangle
|
||||
/// (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in
|
||||
/// the BltBuffer rectangle (DestinationX, DestinationY )
|
||||
/// (DestinationX + Width, DestinationY + Height). If DestinationX or
|
||||
/// DestinationY is not zero then Delta must be set to the length in bytes
|
||||
/// of a row in the BltBuffer.
|
||||
///
|
||||
EfiBltVideoToBltBuffer,
|
||||
|
||||
///
|
||||
/// Write data from the BltBuffer rectangle
|
||||
/// (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the
|
||||
/// video display rectangle (DestinationX, DestinationY)
|
||||
/// (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is
|
||||
/// not zero then Delta must be set to the length in bytes of a row in the
|
||||
/// BltBuffer.
|
||||
///
|
||||
EfiBltBufferToVideo,
|
||||
|
||||
///
|
||||
/// Copy from the video display rectangle (SourceX, SourceY)
|
||||
/// (SourceX + Width, SourceY + Height) to the video display rectangle
|
||||
/// (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height).
|
||||
/// The BltBuffer and Delta are not used in this mode.
|
||||
///
|
||||
EfiBltVideoToVideo,
|
||||
|
||||
EfiGraphicsOutputBltOperationMax
|
||||
} EFI_GRAPHICS_OUTPUT_BLT_OPERATION;
|
||||
|
||||
/**
|
||||
Blt a rectangle of pixels on the graphics screen. Blt stands for BLock Transfer.
|
||||
|
||||
@param This Protocol instance pointer.
|
||||
@param BltBuffer The data to transfer to the graphics screen.
|
||||
Size is at least Width*Height*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL).
|
||||
@param BltOperation The operation to perform when copying BltBuffer on to the graphics screen.
|
||||
@param SourceX The X coordinate of source for the BltOperation.
|
||||
@param SourceY The Y coordinate of source for the BltOperation.
|
||||
@param DestinationX The X coordinate of destination for the BltOperation.
|
||||
@param DestinationY The Y coordinate of destination for the BltOperation.
|
||||
@param Width The width of a rectangle in the blt rectangle in pixels.
|
||||
@param Height The height of a rectangle in the blt rectangle in pixels.
|
||||
@param Delta Not used for EfiBltVideoFill or the EfiBltVideoToVideo operation.
|
||||
If a Delta of zero is used, the entire BltBuffer is being operated on.
|
||||
If a subrectangle of the BltBuffer is being used then Delta
|
||||
represents the number of bytes in a row of the BltBuffer.
|
||||
|
||||
@retval EFI_SUCCESS BltBuffer was drawn to the graphics screen.
|
||||
@retval EFI_INVALID_PARAMETER BltOperation is not valid.
|
||||
@retval EFI_DEVICE_ERROR The device had an error and could not complete the request.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT)(
|
||||
IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
|
||||
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer, OPTIONAL
|
||||
IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation,
|
||||
IN UINTN SourceX,
|
||||
IN UINTN SourceY,
|
||||
IN UINTN DestinationX,
|
||||
IN UINTN DestinationY,
|
||||
IN UINTN Width,
|
||||
IN UINTN Height,
|
||||
IN UINTN Delta OPTIONAL
|
||||
);
|
||||
|
||||
typedef struct {
|
||||
///
|
||||
/// The number of modes supported by QueryMode() and SetMode().
|
||||
///
|
||||
UINT32 MaxMode;
|
||||
///
|
||||
/// Current Mode of the graphics device. Valid mode numbers are 0 to MaxMode -1.
|
||||
///
|
||||
UINT32 Mode;
|
||||
///
|
||||
/// Pointer to read-only EFI_GRAPHICS_OUTPUT_MODE_INFORMATION data.
|
||||
///
|
||||
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;
|
||||
///
|
||||
/// Size of Info structure in bytes.
|
||||
///
|
||||
UINTN SizeOfInfo;
|
||||
///
|
||||
/// Base address of graphics linear frame buffer.
|
||||
/// Offset zero in FrameBufferBase represents the upper left pixel of the display.
|
||||
///
|
||||
EFI_PHYSICAL_ADDRESS FrameBufferBase;
|
||||
///
|
||||
/// Amount of frame buffer needed to support the active mode as defined by
|
||||
/// PixelsPerScanLine xVerticalResolution x PixelElementSize.
|
||||
///
|
||||
UINTN FrameBufferSize;
|
||||
} EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE;
|
||||
|
||||
///
|
||||
/// Provides a basic abstraction to set video modes and copy pixels to and from
|
||||
/// the graphics controller's frame buffer. The linear address of the hardware
|
||||
/// frame buffer is also exposed so software can write directly to the video hardware.
|
||||
///
|
||||
struct _EFI_GRAPHICS_OUTPUT_PROTOCOL {
|
||||
EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE QueryMode;
|
||||
EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE SetMode;
|
||||
EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT Blt;
|
||||
///
|
||||
/// Pointer to EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE data.
|
||||
///
|
||||
EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiGraphicsOutputProtocolGuid;
|
||||
|
||||
#endif
|
936
src/include/ipxe/efi/Protocol/PxeBaseCode.h
Normal file
936
src/include/ipxe/efi/Protocol/PxeBaseCode.h
Normal file
@ -0,0 +1,936 @@
|
||||
/** @file
|
||||
EFI PXE Base Code Protocol definitions, which is used to access PXE-compatible
|
||||
devices for network access and network booting.
|
||||
|
||||
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials are licensed and made available under
|
||||
the terms and conditions of the BSD License that 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.
|
||||
|
||||
@par Revision Reference:
|
||||
This Protocol is introduced in EFI Specification 1.10.
|
||||
|
||||
**/
|
||||
#ifndef __PXE_BASE_CODE_PROTOCOL_H__
|
||||
#define __PXE_BASE_CODE_PROTOCOL_H__
|
||||
|
||||
FILE_LICENCE ( BSD3 );
|
||||
|
||||
///
|
||||
/// PXE Base Code protocol.
|
||||
///
|
||||
#define EFI_PXE_BASE_CODE_PROTOCOL_GUID \
|
||||
{ \
|
||||
0x03c4e603, 0xac28, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d } \
|
||||
}
|
||||
|
||||
typedef struct _EFI_PXE_BASE_CODE_PROTOCOL EFI_PXE_BASE_CODE_PROTOCOL;
|
||||
|
||||
///
|
||||
/// Protocol defined in EFI1.1.
|
||||
///
|
||||
typedef EFI_PXE_BASE_CODE_PROTOCOL EFI_PXE_BASE_CODE;
|
||||
|
||||
///
|
||||
/// Default IP TTL and ToS.
|
||||
///
|
||||
#define DEFAULT_TTL 16
|
||||
#define DEFAULT_ToS 0
|
||||
|
||||
///
|
||||
/// ICMP error format.
|
||||
///
|
||||
typedef struct {
|
||||
UINT8 Type;
|
||||
UINT8 Code;
|
||||
UINT16 Checksum;
|
||||
union {
|
||||
UINT32 reserved;
|
||||
UINT32 Mtu;
|
||||
UINT32 Pointer;
|
||||
struct {
|
||||
UINT16 Identifier;
|
||||
UINT16 Sequence;
|
||||
} Echo;
|
||||
} u;
|
||||
UINT8 Data[494];
|
||||
} EFI_PXE_BASE_CODE_ICMP_ERROR;
|
||||
|
||||
///
|
||||
/// TFTP error format.
|
||||
///
|
||||
typedef struct {
|
||||
UINT8 ErrorCode;
|
||||
CHAR8 ErrorString[127];
|
||||
} EFI_PXE_BASE_CODE_TFTP_ERROR;
|
||||
|
||||
///
|
||||
/// IP Receive Filter definitions.
|
||||
///
|
||||
#define EFI_PXE_BASE_CODE_MAX_IPCNT 8
|
||||
|
||||
///
|
||||
/// IP Receive Filter structure.
|
||||
///
|
||||
typedef struct {
|
||||
UINT8 Filters;
|
||||
UINT8 IpCnt;
|
||||
UINT16 reserved;
|
||||
EFI_IP_ADDRESS IpList[EFI_PXE_BASE_CODE_MAX_IPCNT];
|
||||
} EFI_PXE_BASE_CODE_IP_FILTER;
|
||||
|
||||
#define EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP 0x0001
|
||||
#define EFI_PXE_BASE_CODE_IP_FILTER_BROADCAST 0x0002
|
||||
#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS 0x0004
|
||||
#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS_MULTICAST 0x0008
|
||||
|
||||
///
|
||||
/// ARP cache entries.
|
||||
///
|
||||
typedef struct {
|
||||
EFI_IP_ADDRESS IpAddr;
|
||||
EFI_MAC_ADDRESS MacAddr;
|
||||
} EFI_PXE_BASE_CODE_ARP_ENTRY;
|
||||
|
||||
///
|
||||
/// ARP route table entries.
|
||||
///
|
||||
typedef struct {
|
||||
EFI_IP_ADDRESS IpAddr;
|
||||
EFI_IP_ADDRESS SubnetMask;
|
||||
EFI_IP_ADDRESS GwAddr;
|
||||
} EFI_PXE_BASE_CODE_ROUTE_ENTRY;
|
||||
|
||||
//
|
||||
// UDP definitions
|
||||
//
|
||||
typedef UINT16 EFI_PXE_BASE_CODE_UDP_PORT;
|
||||
|
||||
#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_IP 0x0001
|
||||
#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_PORT 0x0002
|
||||
#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_IP 0x0004
|
||||
#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_PORT 0x0008
|
||||
#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_USE_FILTER 0x0010
|
||||
#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_MAY_FRAGMENT 0x0020
|
||||
|
||||
//
|
||||
// Discover() definitions
|
||||
//
|
||||
#define EFI_PXE_BASE_CODE_BOOT_TYPE_BOOTSTRAP 0
|
||||
#define EFI_PXE_BASE_CODE_BOOT_TYPE_MS_WINNT_RIS 1
|
||||
#define EFI_PXE_BASE_CODE_BOOT_TYPE_INTEL_LCM 2
|
||||
#define EFI_PXE_BASE_CODE_BOOT_TYPE_DOSUNDI 3
|
||||
#define EFI_PXE_BASE_CODE_BOOT_TYPE_NEC_ESMPRO 4
|
||||
#define EFI_PXE_BASE_CODE_BOOT_TYPE_IBM_WSoD 5
|
||||
#define EFI_PXE_BASE_CODE_BOOT_TYPE_IBM_LCCM 6
|
||||
#define EFI_PXE_BASE_CODE_BOOT_TYPE_CA_UNICENTER_TNG 7
|
||||
#define EFI_PXE_BASE_CODE_BOOT_TYPE_HP_OPENVIEW 8
|
||||
#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_9 9
|
||||
#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_10 10
|
||||
#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_11 11
|
||||
#define EFI_PXE_BASE_CODE_BOOT_TYPE_NOT_USED_12 12
|
||||
#define EFI_PXE_BASE_CODE_BOOT_TYPE_REDHAT_INSTALL 13
|
||||
#define EFI_PXE_BASE_CODE_BOOT_TYPE_REDHAT_BOOT 14
|
||||
#define EFI_PXE_BASE_CODE_BOOT_TYPE_REMBO 15
|
||||
#define EFI_PXE_BASE_CODE_BOOT_TYPE_BEOBOOT 16
|
||||
//
|
||||
// 17 through 32767 are reserved
|
||||
// 32768 through 65279 are for vendor use
|
||||
// 65280 through 65534 are reserved
|
||||
//
|
||||
#define EFI_PXE_BASE_CODE_BOOT_TYPE_PXETEST 65535
|
||||
|
||||
#define EFI_PXE_BASE_CODE_BOOT_LAYER_MASK 0x7FFF
|
||||
#define EFI_PXE_BASE_CODE_BOOT_LAYER_INITIAL 0x0000
|
||||
|
||||
//
|
||||
// PXE Tag definition that identifies the processor
|
||||
// and programming environment of the client system.
|
||||
// These identifiers are defined by IETF:
|
||||
// http://www.ietf.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xml
|
||||
//
|
||||
#if defined (MDE_CPU_IA32)
|
||||
#define EFI_PXE_CLIENT_SYSTEM_ARCHITECTURE 0x0006
|
||||
#elif defined (MDE_CPU_IPF)
|
||||
#define EFI_PXE_CLIENT_SYSTEM_ARCHITECTURE 0x0002
|
||||
#elif defined (MDE_CPU_X64)
|
||||
#define EFI_PXE_CLIENT_SYSTEM_ARCHITECTURE 0x0007
|
||||
#elif defined (MDE_CPU_ARM)
|
||||
#define EFI_PXE_CLIENT_SYSTEM_ARCHITECTURE 0x000A
|
||||
#elif defined (MDE_CPU_AARCH64)
|
||||
#define EFI_PXE_CLIENT_SYSTEM_ARCHITECTURE 0x000B
|
||||
#endif
|
||||
|
||||
|
||||
///
|
||||
/// Discover() server list structure.
|
||||
///
|
||||
typedef struct {
|
||||
UINT16 Type;
|
||||
BOOLEAN AcceptAnyResponse;
|
||||
UINT8 Reserved;
|
||||
EFI_IP_ADDRESS IpAddr;
|
||||
} EFI_PXE_BASE_CODE_SRVLIST;
|
||||
|
||||
///
|
||||
/// Discover() information override structure.
|
||||
///
|
||||
typedef struct {
|
||||
BOOLEAN UseMCast;
|
||||
BOOLEAN UseBCast;
|
||||
BOOLEAN UseUCast;
|
||||
BOOLEAN MustUseList;
|
||||
EFI_IP_ADDRESS ServerMCastIp;
|
||||
UINT16 IpCnt;
|
||||
EFI_PXE_BASE_CODE_SRVLIST SrvList[1];
|
||||
} EFI_PXE_BASE_CODE_DISCOVER_INFO;
|
||||
|
||||
///
|
||||
/// TFTP opcode definitions.
|
||||
///
|
||||
typedef enum {
|
||||
EFI_PXE_BASE_CODE_TFTP_FIRST,
|
||||
EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE,
|
||||
EFI_PXE_BASE_CODE_TFTP_READ_FILE,
|
||||
EFI_PXE_BASE_CODE_TFTP_WRITE_FILE,
|
||||
EFI_PXE_BASE_CODE_TFTP_READ_DIRECTORY,
|
||||
EFI_PXE_BASE_CODE_MTFTP_GET_FILE_SIZE,
|
||||
EFI_PXE_BASE_CODE_MTFTP_READ_FILE,
|
||||
EFI_PXE_BASE_CODE_MTFTP_READ_DIRECTORY,
|
||||
EFI_PXE_BASE_CODE_MTFTP_LAST
|
||||
} EFI_PXE_BASE_CODE_TFTP_OPCODE;
|
||||
|
||||
///
|
||||
/// MTFTP information. This information is required
|
||||
/// to start or join a multicast TFTP session. It is also required to
|
||||
/// perform the "get file size" and "read directory" operations of MTFTP.
|
||||
///
|
||||
typedef struct {
|
||||
EFI_IP_ADDRESS MCastIp;
|
||||
EFI_PXE_BASE_CODE_UDP_PORT CPort;
|
||||
EFI_PXE_BASE_CODE_UDP_PORT SPort;
|
||||
UINT16 ListenTimeout;
|
||||
UINT16 TransmitTimeout;
|
||||
} EFI_PXE_BASE_CODE_MTFTP_INFO;
|
||||
|
||||
///
|
||||
/// DHCPV4 Packet structure.
|
||||
///
|
||||
typedef struct {
|
||||
UINT8 BootpOpcode;
|
||||
UINT8 BootpHwType;
|
||||
UINT8 BootpHwAddrLen;
|
||||
UINT8 BootpGateHops;
|
||||
UINT32 BootpIdent;
|
||||
UINT16 BootpSeconds;
|
||||
UINT16 BootpFlags;
|
||||
UINT8 BootpCiAddr[4];
|
||||
UINT8 BootpYiAddr[4];
|
||||
UINT8 BootpSiAddr[4];
|
||||
UINT8 BootpGiAddr[4];
|
||||
UINT8 BootpHwAddr[16];
|
||||
UINT8 BootpSrvName[64];
|
||||
UINT8 BootpBootFile[128];
|
||||
UINT32 DhcpMagik;
|
||||
UINT8 DhcpOptions[56];
|
||||
} EFI_PXE_BASE_CODE_DHCPV4_PACKET;
|
||||
|
||||
///
|
||||
/// DHCPV6 Packet structure.
|
||||
///
|
||||
typedef struct {
|
||||
UINT32 MessageType:8;
|
||||
UINT32 TransactionId:24;
|
||||
UINT8 DhcpOptions[1024];
|
||||
} EFI_PXE_BASE_CODE_DHCPV6_PACKET;
|
||||
|
||||
///
|
||||
/// Packet structure.
|
||||
///
|
||||
typedef union {
|
||||
UINT8 Raw[1472];
|
||||
EFI_PXE_BASE_CODE_DHCPV4_PACKET Dhcpv4;
|
||||
EFI_PXE_BASE_CODE_DHCPV6_PACKET Dhcpv6;
|
||||
} EFI_PXE_BASE_CODE_PACKET;
|
||||
|
||||
//
|
||||
// PXE Base Code Mode structure
|
||||
//
|
||||
#define EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES 8
|
||||
#define EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES 8
|
||||
|
||||
///
|
||||
/// EFI_PXE_BASE_CODE_MODE.
|
||||
/// The data values in this structure are read-only and
|
||||
/// are updated by the code that produces the
|
||||
/// EFI_PXE_BASE_CODE_PROTOCOL functions.
|
||||
///
|
||||
typedef struct {
|
||||
BOOLEAN Started;
|
||||
BOOLEAN Ipv6Available;
|
||||
BOOLEAN Ipv6Supported;
|
||||
BOOLEAN UsingIpv6;
|
||||
BOOLEAN BisSupported;
|
||||
BOOLEAN BisDetected;
|
||||
BOOLEAN AutoArp;
|
||||
BOOLEAN SendGUID;
|
||||
BOOLEAN DhcpDiscoverValid;
|
||||
BOOLEAN DhcpAckReceived;
|
||||
BOOLEAN ProxyOfferReceived;
|
||||
BOOLEAN PxeDiscoverValid;
|
||||
BOOLEAN PxeReplyReceived;
|
||||
BOOLEAN PxeBisReplyReceived;
|
||||
BOOLEAN IcmpErrorReceived;
|
||||
BOOLEAN TftpErrorReceived;
|
||||
BOOLEAN MakeCallbacks;
|
||||
UINT8 TTL;
|
||||
UINT8 ToS;
|
||||
EFI_IP_ADDRESS StationIp;
|
||||
EFI_IP_ADDRESS SubnetMask;
|
||||
EFI_PXE_BASE_CODE_PACKET DhcpDiscover;
|
||||
EFI_PXE_BASE_CODE_PACKET DhcpAck;
|
||||
EFI_PXE_BASE_CODE_PACKET ProxyOffer;
|
||||
EFI_PXE_BASE_CODE_PACKET PxeDiscover;
|
||||
EFI_PXE_BASE_CODE_PACKET PxeReply;
|
||||
EFI_PXE_BASE_CODE_PACKET PxeBisReply;
|
||||
EFI_PXE_BASE_CODE_IP_FILTER IpFilter;
|
||||
UINT32 ArpCacheEntries;
|
||||
EFI_PXE_BASE_CODE_ARP_ENTRY ArpCache[EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES];
|
||||
UINT32 RouteTableEntries;
|
||||
EFI_PXE_BASE_CODE_ROUTE_ENTRY RouteTable[EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES];
|
||||
EFI_PXE_BASE_CODE_ICMP_ERROR IcmpError;
|
||||
EFI_PXE_BASE_CODE_TFTP_ERROR TftpError;
|
||||
} EFI_PXE_BASE_CODE_MODE;
|
||||
|
||||
//
|
||||
// PXE Base Code Interface Function definitions
|
||||
//
|
||||
|
||||
/**
|
||||
Enables the use of the PXE Base Code Protocol functions.
|
||||
|
||||
This function enables the use of the PXE Base Code Protocol functions. If the
|
||||
Started field of the EFI_PXE_BASE_CODE_MODE structure is already TRUE, then
|
||||
EFI_ALREADY_STARTED will be returned. If UseIpv6 is TRUE, then IPv6 formatted
|
||||
addresses will be used in this session. If UseIpv6 is FALSE, then IPv4 formatted
|
||||
addresses will be used in this session. If UseIpv6 is TRUE, and the Ipv6Supported
|
||||
field of the EFI_PXE_BASE_CODE_MODE structure is FALSE, then EFI_UNSUPPORTED will
|
||||
be returned. If there is not enough memory or other resources to start the PXE
|
||||
Base Code Protocol, then EFI_OUT_OF_RESOURCES will be returned. Otherwise, the
|
||||
PXE Base Code Protocol will be started, and all of the fields of the EFI_PXE_BASE_CODE_MODE
|
||||
structure will be initialized as follows:
|
||||
StartedSet to TRUE.
|
||||
Ipv6SupportedUnchanged.
|
||||
Ipv6AvailableUnchanged.
|
||||
UsingIpv6Set to UseIpv6.
|
||||
BisSupportedUnchanged.
|
||||
BisDetectedUnchanged.
|
||||
AutoArpSet to TRUE.
|
||||
SendGUIDSet to FALSE.
|
||||
TTLSet to DEFAULT_TTL.
|
||||
ToSSet to DEFAULT_ToS.
|
||||
DhcpCompletedSet to FALSE.
|
||||
ProxyOfferReceivedSet to FALSE.
|
||||
StationIpSet to an address of all zeros.
|
||||
SubnetMaskSet to a subnet mask of all zeros.
|
||||
DhcpDiscoverZero-filled.
|
||||
DhcpAckZero-filled.
|
||||
ProxyOfferZero-filled.
|
||||
PxeDiscoverValidSet to FALSE.
|
||||
PxeDiscoverZero-filled.
|
||||
PxeReplyValidSet to FALSE.
|
||||
PxeReplyZero-filled.
|
||||
PxeBisReplyValidSet to FALSE.
|
||||
PxeBisReplyZero-filled.
|
||||
IpFilterSet the Filters field to 0 and the IpCnt field to 0.
|
||||
ArpCacheEntriesSet to 0.
|
||||
ArpCacheZero-filled.
|
||||
RouteTableEntriesSet to 0.
|
||||
RouteTableZero-filled.
|
||||
IcmpErrorReceivedSet to FALSE.
|
||||
IcmpErrorZero-filled.
|
||||
TftpErroReceivedSet to FALSE.
|
||||
TftpErrorZero-filled.
|
||||
MakeCallbacksSet to TRUE if the PXE Base Code Callback Protocol is available.
|
||||
Set to FALSE if the PXE Base Code Callback Protocol is not available.
|
||||
|
||||
@param This The pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.
|
||||
@param UseIpv6 Specifies the type of IP addresses that are to be used during the session
|
||||
that is being started. Set to TRUE for IPv6 addresses, and FALSE for
|
||||
IPv4 addresses.
|
||||
|
||||
@retval EFI_SUCCESS The PXE Base Code Protocol was started.
|
||||
@retval EFI_DEVICE_ERROR The network device encountered an error during this oper
|
||||
@retval EFI_UNSUPPORTED UseIpv6 is TRUE, but the Ipv6Supported field of the
|
||||
EFI_PXE_BASE_CODE_MODE structure is FALSE.
|
||||
@retval EFI_ALREADY_STARTED The PXE Base Code Protocol is already in the started state.
|
||||
@retval EFI_INVALID_PARAMETER The This parameter is NULL or does not point to a valid
|
||||
EFI_PXE_BASE_CODE_PROTOCOL structure.
|
||||
@retval EFI_OUT_OF_RESOURCES Could not allocate enough memory or other resources to start the
|
||||
PXE Base Code Protocol.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_PXE_BASE_CODE_START)(
|
||||
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
|
||||
IN BOOLEAN UseIpv6
|
||||
);
|
||||
|
||||
/**
|
||||
Disables the use of the PXE Base Code Protocol functions.
|
||||
|
||||
This function stops all activity on the network device. All the resources allocated
|
||||
in Start() are released, the Started field of the EFI_PXE_BASE_CODE_MODE structure is
|
||||
set to FALSE and EFI_SUCCESS is returned. If the Started field of the EFI_PXE_BASE_CODE_MODE
|
||||
structure is already FALSE, then EFI_NOT_STARTED will be returned.
|
||||
|
||||
@param This The pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.
|
||||
|
||||
@retval EFI_SUCCESS The PXE Base Code Protocol was stopped.
|
||||
@retval EFI_NOT_STARTED The PXE Base Code Protocol is already in the stopped state.
|
||||
@retval EFI_INVALID_PARAMETER The This parameter is NULL or does not point to a valid
|
||||
EFI_PXE_BASE_CODE_PROTOCOL structure.
|
||||
@retval EFI_DEVICE_ERROR The network device encountered an error during this operation.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_PXE_BASE_CODE_STOP)(
|
||||
IN EFI_PXE_BASE_CODE_PROTOCOL *This
|
||||
);
|
||||
|
||||
/**
|
||||
Attempts to complete a DHCPv4 D.O.R.A. (discover / offer / request / acknowledge) or DHCPv6
|
||||
S.A.R.R (solicit / advertise / request / reply) sequence.
|
||||
|
||||
This function attempts to complete the DHCP sequence. If this sequence is completed,
|
||||
then EFI_SUCCESS is returned, and the DhcpCompleted, ProxyOfferReceived, StationIp,
|
||||
SubnetMask, DhcpDiscover, DhcpAck, and ProxyOffer fields of the EFI_PXE_BASE_CODE_MODE
|
||||
structure are filled in.
|
||||
If SortOffers is TRUE, then the cached DHCP offer packets will be sorted before
|
||||
they are tried. If SortOffers is FALSE, then the cached DHCP offer packets will
|
||||
be tried in the order in which they are received. Please see the Preboot Execution
|
||||
Environment (PXE) Specification for additional details on the implementation of DHCP.
|
||||
This function can take at least 31 seconds to timeout and return control to the
|
||||
caller. If the DHCP sequence does not complete, then EFI_TIMEOUT will be returned.
|
||||
If the Callback Protocol does not return EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE,
|
||||
then the DHCP sequence will be stopped and EFI_ABORTED will be returned.
|
||||
|
||||
@param This The pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.
|
||||
@param SortOffers TRUE if the offers received should be sorted. Set to FALSE to try the
|
||||
offers in the order that they are received.
|
||||
|
||||
@retval EFI_SUCCESS Valid DHCP has completed.
|
||||
@retval EFI_NOT_STARTED The PXE Base Code Protocol is in the stopped state.
|
||||
@retval EFI_INVALID_PARAMETER The This parameter is NULL or does not point to a valid
|
||||
EFI_PXE_BASE_CODE_PROTOCOL structure.
|
||||
@retval EFI_DEVICE_ERROR The network device encountered an error during this operation.
|
||||
@retval EFI_OUT_OF_RESOURCES Could not allocate enough memory to complete the DHCP Protocol.
|
||||
@retval EFI_ABORTED The callback function aborted the DHCP Protocol.
|
||||
@retval EFI_TIMEOUT The DHCP Protocol timed out.
|
||||
@retval EFI_ICMP_ERROR An ICMP error packet was received during the DHCP session.
|
||||
@retval EFI_NO_RESPONSE Valid PXE offer was not received.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_PXE_BASE_CODE_DHCP)(
|
||||
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
|
||||
IN BOOLEAN SortOffers
|
||||
);
|
||||
|
||||
/**
|
||||
Attempts to complete the PXE Boot Server and/or boot image discovery sequence.
|
||||
|
||||
This function attempts to complete the PXE Boot Server and/or boot image discovery
|
||||
sequence. If this sequence is completed, then EFI_SUCCESS is returned, and the
|
||||
PxeDiscoverValid, PxeDiscover, PxeReplyReceived, and PxeReply fields of the
|
||||
EFI_PXE_BASE_CODE_MODE structure are filled in. If UseBis is TRUE, then the
|
||||
PxeBisReplyReceived and PxeBisReply fields of the EFI_PXE_BASE_CODE_MODE structure
|
||||
will also be filled in. If UseBis is FALSE, then PxeBisReplyValid will be set to FALSE.
|
||||
In the structure referenced by parameter Info, the PXE Boot Server list, SrvList[],
|
||||
has two uses: It is the Boot Server IP address list used for unicast discovery
|
||||
(if the UseUCast field is TRUE), and it is the list used for Boot Server verification
|
||||
(if the MustUseList field is TRUE). Also, if the MustUseList field in that structure
|
||||
is TRUE and the AcceptAnyResponse field in the SrvList[] array is TRUE, any Boot
|
||||
Server reply of that type will be accepted. If the AcceptAnyResponse field is
|
||||
FALSE, only responses from Boot Servers with matching IP addresses will be accepted.
|
||||
This function can take at least 10 seconds to timeout and return control to the
|
||||
caller. If the Discovery sequence does not complete, then EFI_TIMEOUT will be
|
||||
returned. Please see the Preboot Execution Environment (PXE) Specification for
|
||||
additional details on the implementation of the Discovery sequence.
|
||||
If the Callback Protocol does not return EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE,
|
||||
then the Discovery sequence is stopped and EFI_ABORTED will be returned.
|
||||
|
||||
@param This The pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.
|
||||
@param Type The type of bootstrap to perform.
|
||||
@param Layer The pointer to the boot server layer number to discover, which must be
|
||||
PXE_BOOT_LAYER_INITIAL when a new server type is being
|
||||
discovered.
|
||||
@param UseBis TRUE if Boot Integrity Services are to be used. FALSE otherwise.
|
||||
@param Info The pointer to a data structure that contains additional information on the
|
||||
type of discovery operation that is to be performed.
|
||||
|
||||
@retval EFI_SUCCESS The Discovery sequence has been completed.
|
||||
@retval EFI_NOT_STARTED The PXE Base Code Protocol is in the stopped state.
|
||||
@retval EFI_INVALID_PARAMETER One or more parameters are invalid.
|
||||
@retval EFI_DEVICE_ERROR The network device encountered an error during this operation.
|
||||
@retval EFI_OUT_OF_RESOURCES Could not allocate enough memory to complete Discovery.
|
||||
@retval EFI_ABORTED The callback function aborted the Discovery sequence.
|
||||
@retval EFI_TIMEOUT The Discovery sequence timed out.
|
||||
@retval EFI_ICMP_ERROR An ICMP error packet was received during the PXE discovery
|
||||
session.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_PXE_BASE_CODE_DISCOVER)(
|
||||
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
|
||||
IN UINT16 Type,
|
||||
IN UINT16 *Layer,
|
||||
IN BOOLEAN UseBis,
|
||||
IN EFI_PXE_BASE_CODE_DISCOVER_INFO *Info OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Used to perform TFTP and MTFTP services.
|
||||
|
||||
This function is used to perform TFTP and MTFTP services. This includes the
|
||||
TFTP operations to get the size of a file, read a directory, read a file, and
|
||||
write a file. It also includes the MTFTP operations to get the size of a file,
|
||||
read a directory, and read a file. The type of operation is specified by Operation.
|
||||
If the callback function that is invoked during the TFTP/MTFTP operation does
|
||||
not return EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE, then EFI_ABORTED will
|
||||
be returned.
|
||||
For read operations, the return data will be placed in the buffer specified by
|
||||
BufferPtr. If BufferSize is too small to contain the entire downloaded file,
|
||||
then EFI_BUFFER_TOO_SMALL will be returned and BufferSize will be set to zero
|
||||
or the size of the requested file (the size of the requested file is only returned
|
||||
if the TFTP server supports TFTP options). If BufferSize is large enough for the
|
||||
read operation, then BufferSize will be set to the size of the downloaded file,
|
||||
and EFI_SUCCESS will be returned. Applications using the PxeBc.Mtftp() services
|
||||
should use the get-file-size operations to determine the size of the downloaded
|
||||
file prior to using the read-file operations--especially when downloading large
|
||||
(greater than 64 MB) files--instead of making two calls to the read-file operation.
|
||||
Following this recommendation will save time if the file is larger than expected
|
||||
and the TFTP server does not support TFTP option extensions. Without TFTP option
|
||||
extension support, the client has to download the entire file, counting and discarding
|
||||
the received packets, to determine the file size.
|
||||
For write operations, the data to be sent is in the buffer specified by BufferPtr.
|
||||
BufferSize specifies the number of bytes to send. If the write operation completes
|
||||
successfully, then EFI_SUCCESS will be returned.
|
||||
For TFTP "get file size" operations, the size of the requested file or directory
|
||||
is returned in BufferSize, and EFI_SUCCESS will be returned. If the TFTP server
|
||||
does not support options, the file will be downloaded into a bit bucket and the
|
||||
length of the downloaded file will be returned. For MTFTP "get file size" operations,
|
||||
if the MTFTP server does not support the "get file size" option, EFI_UNSUPPORTED
|
||||
will be returned.
|
||||
This function can take up to 10 seconds to timeout and return control to the caller.
|
||||
If the TFTP sequence does not complete, EFI_TIMEOUT will be returned.
|
||||
If the Callback Protocol does not return EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE,
|
||||
then the TFTP sequence is stopped and EFI_ABORTED will be returned.
|
||||
The format of the data returned from a TFTP read directory operation is a null-terminated
|
||||
filename followed by a null-terminated information string, of the form
|
||||
"size year-month-day hour:minute:second" (i.e. %d %d-%d-%d %d:%d:%f - note that
|
||||
the seconds field can be a decimal number), where the date and time are UTC. For
|
||||
an MTFTP read directory command, there is additionally a null-terminated multicast
|
||||
IP address preceding the filename of the form %d.%d.%d.%d for IP v4. The final
|
||||
entry is itself null-terminated, so that the final information string is terminated
|
||||
with two null octets.
|
||||
|
||||
@param This The pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.
|
||||
@param Operation The type of operation to perform.
|
||||
@param BufferPtr A pointer to the data buffer.
|
||||
@param Overwrite Only used on write file operations. TRUE if a file on a remote server can
|
||||
be overwritten.
|
||||
@param BufferSize For get-file-size operations, *BufferSize returns the size of the
|
||||
requested file.
|
||||
@param BlockSize The requested block size to be used during a TFTP transfer.
|
||||
@param ServerIp The TFTP / MTFTP server IP address.
|
||||
@param Filename A Null-terminated ASCII string that specifies a directory name or a file
|
||||
name.
|
||||
@param Info The pointer to the MTFTP information.
|
||||
@param DontUseBuffer Set to FALSE for normal TFTP and MTFTP read file operation.
|
||||
|
||||
@retval EFI_SUCCESS The TFTP/MTFTP operation was completed.
|
||||
@retval EFI_NOT_STARTED The PXE Base Code Protocol is in the stopped state.
|
||||
@retval EFI_INVALID_PARAMETER One or more parameters are invalid.
|
||||
@retval EFI_DEVICE_ERROR The network device encountered an error during this operation.
|
||||
@retval EFI_BUFFER_TOO_SMALL The buffer is not large enough to complete the read operation.
|
||||
@retval EFI_ABORTED The callback function aborted the TFTP/MTFTP operation.
|
||||
@retval EFI_TIMEOUT The TFTP/MTFTP operation timed out.
|
||||
@retval EFI_ICMP_ERROR An ICMP error packet was received during the MTFTP session.
|
||||
@retval EFI_TFTP_ERROR A TFTP error packet was received during the MTFTP session.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_PXE_BASE_CODE_MTFTP)(
|
||||
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
|
||||
IN EFI_PXE_BASE_CODE_TFTP_OPCODE Operation,
|
||||
IN OUT VOID *BufferPtr OPTIONAL,
|
||||
IN BOOLEAN Overwrite,
|
||||
IN OUT UINT64 *BufferSize,
|
||||
IN UINTN *BlockSize OPTIONAL,
|
||||
IN EFI_IP_ADDRESS *ServerIp,
|
||||
IN UINT8 *Filename OPTIONAL,
|
||||
IN EFI_PXE_BASE_CODE_MTFTP_INFO *Info OPTIONAL,
|
||||
IN BOOLEAN DontUseBuffer
|
||||
);
|
||||
|
||||
/**
|
||||
Writes a UDP packet to the network interface.
|
||||
|
||||
This function writes a UDP packet specified by the (optional HeaderPtr and)
|
||||
BufferPtr parameters to the network interface. The UDP header is automatically
|
||||
built by this routine. It uses the parameters OpFlags, DestIp, DestPort, GatewayIp,
|
||||
SrcIp, and SrcPort to build this header. If the packet is successfully built and
|
||||
transmitted through the network interface, then EFI_SUCCESS will be returned.
|
||||
If a timeout occurs during the transmission of the packet, then EFI_TIMEOUT will
|
||||
be returned. If an ICMP error occurs during the transmission of the packet, then
|
||||
the IcmpErrorReceived field is set to TRUE, the IcmpError field is filled in and
|
||||
EFI_ICMP_ERROR will be returned. If the Callback Protocol does not return
|
||||
EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE, then EFI_ABORTED will be returned.
|
||||
|
||||
@param This The pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.
|
||||
@param OpFlags The UDP operation flags.
|
||||
@param DestIp The destination IP address.
|
||||
@param DestPort The destination UDP port number.
|
||||
@param GatewayIp The gateway IP address.
|
||||
@param SrcIp The source IP address.
|
||||
@param SrcPort The source UDP port number.
|
||||
@param HeaderSize An optional field which may be set to the length of a header at
|
||||
HeaderPtr to be prefixed to the data at BufferPtr.
|
||||
@param HeaderPtr If HeaderSize is not NULL, a pointer to a header to be prefixed to the
|
||||
data at BufferPtr.
|
||||
@param BufferSize A pointer to the size of the data at BufferPtr.
|
||||
@param BufferPtr A pointer to the data to be written.
|
||||
|
||||
@retval EFI_SUCCESS The UDP Write operation was completed.
|
||||
@retval EFI_NOT_STARTED The PXE Base Code Protocol is in the stopped state.
|
||||
@retval EFI_INVALID_PARAMETER One or more parameters are invalid.
|
||||
@retval EFI_BAD_BUFFER_SIZE The buffer is too long to be transmitted.
|
||||
@retval EFI_ABORTED The callback function aborted the UDP Write operation.
|
||||
@retval EFI_TIMEOUT The UDP Write operation timed out.
|
||||
@retval EFI_ICMP_ERROR An ICMP error packet was received during the UDP write session.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_PXE_BASE_CODE_UDP_WRITE)(
|
||||
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
|
||||
IN UINT16 OpFlags,
|
||||
IN EFI_IP_ADDRESS *DestIp,
|
||||
IN EFI_PXE_BASE_CODE_UDP_PORT *DestPort,
|
||||
IN EFI_IP_ADDRESS *GatewayIp, OPTIONAL
|
||||
IN EFI_IP_ADDRESS *SrcIp, OPTIONAL
|
||||
IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort, OPTIONAL
|
||||
IN UINTN *HeaderSize, OPTIONAL
|
||||
IN VOID *HeaderPtr, OPTIONAL
|
||||
IN UINTN *BufferSize,
|
||||
IN VOID *BufferPtr
|
||||
);
|
||||
|
||||
/**
|
||||
Reads a UDP packet from the network interface.
|
||||
|
||||
This function reads a UDP packet from a network interface. The data contents
|
||||
are returned in (the optional HeaderPtr and) BufferPtr, and the size of the
|
||||
buffer received is returned in BufferSize. If the input BufferSize is smaller
|
||||
than the UDP packet received (less optional HeaderSize), it will be set to the
|
||||
required size, and EFI_BUFFER_TOO_SMALL will be returned. In this case, the
|
||||
contents of BufferPtr are undefined, and the packet is lost. If a UDP packet is
|
||||
successfully received, then EFI_SUCCESS will be returned, and the information
|
||||
from the UDP header will be returned in DestIp, DestPort, SrcIp, and SrcPort if
|
||||
they are not NULL.
|
||||
Depending on the values of OpFlags and the DestIp, DestPort, SrcIp, and SrcPort
|
||||
input values, different types of UDP packet receive filtering will be performed.
|
||||
The following tables summarize these receive filter operations.
|
||||
|
||||
@param This The pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.
|
||||
@param OpFlags The UDP operation flags.
|
||||
@param DestIp The destination IP address.
|
||||
@param DestPort The destination UDP port number.
|
||||
@param SrcIp The source IP address.
|
||||
@param SrcPort The source UDP port number.
|
||||
@param HeaderSize An optional field which may be set to the length of a header at
|
||||
HeaderPtr to be prefixed to the data at BufferPtr.
|
||||
@param HeaderPtr If HeaderSize is not NULL, a pointer to a header to be prefixed to the
|
||||
data at BufferPtr.
|
||||
@param BufferSize A pointer to the size of the data at BufferPtr.
|
||||
@param BufferPtr A pointer to the data to be read.
|
||||
|
||||
@retval EFI_SUCCESS The UDP Read operation was completed.
|
||||
@retval EFI_NOT_STARTED The PXE Base Code Protocol is in the stopped state.
|
||||
@retval EFI_INVALID_PARAMETER One or more parameters are invalid.
|
||||
@retval EFI_DEVICE_ERROR The network device encountered an error during this operation.
|
||||
@retval EFI_BUFFER_TOO_SMALL The packet is larger than Buffer can hold.
|
||||
@retval EFI_ABORTED The callback function aborted the UDP Read operation.
|
||||
@retval EFI_TIMEOUT The UDP Read operation timed out.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_PXE_BASE_CODE_UDP_READ)(
|
||||
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
|
||||
IN UINT16 OpFlags,
|
||||
IN OUT EFI_IP_ADDRESS *DestIp, OPTIONAL
|
||||
IN OUT EFI_PXE_BASE_CODE_UDP_PORT *DestPort, OPTIONAL
|
||||
IN OUT EFI_IP_ADDRESS *SrcIp, OPTIONAL
|
||||
IN OUT EFI_PXE_BASE_CODE_UDP_PORT *SrcPort, OPTIONAL
|
||||
IN UINTN *HeaderSize, OPTIONAL
|
||||
IN VOID *HeaderPtr, OPTIONAL
|
||||
IN OUT UINTN *BufferSize,
|
||||
IN VOID *BufferPtr
|
||||
);
|
||||
|
||||
/**
|
||||
Updates the IP receive filters of a network device and enables software filtering.
|
||||
|
||||
The NewFilter field is used to modify the network device's current IP receive
|
||||
filter settings and to enable a software filter. This function updates the IpFilter
|
||||
field of the EFI_PXE_BASE_CODE_MODE structure with the contents of NewIpFilter.
|
||||
The software filter is used when the USE_FILTER in OpFlags is set to UdpRead().
|
||||
The current hardware filter remains in effect no matter what the settings of OpFlags
|
||||
are, so that the meaning of ANY_DEST_IP set in OpFlags to UdpRead() is from those
|
||||
packets whose reception is enabled in hardware - physical NIC address (unicast),
|
||||
broadcast address, logical address or addresses (multicast), or all (promiscuous).
|
||||
UdpRead() does not modify the IP filter settings.
|
||||
Dhcp(), Discover(), and Mtftp() set the IP filter, and return with the IP receive
|
||||
filter list emptied and the filter set to EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP.
|
||||
If an application or driver wishes to preserve the IP receive filter settings,
|
||||
it will have to preserve the IP receive filter settings before these calls, and
|
||||
use SetIpFilter() to restore them after the calls. If incompatible filtering is
|
||||
requested (for example, PROMISCUOUS with anything else), or if the device does not
|
||||
support a requested filter setting and it cannot be accommodated in software
|
||||
(for example, PROMISCUOUS not supported), EFI_INVALID_PARAMETER will be returned.
|
||||
The IPlist field is used to enable IPs other than the StationIP. They may be
|
||||
multicast or unicast. If IPcnt is set as well as EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP,
|
||||
then both the StationIP and the IPs from the IPlist will be used.
|
||||
|
||||
@param This The pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.
|
||||
@param NewFilter The pointer to the new set of IP receive filters.
|
||||
|
||||
@retval EFI_SUCCESS The IP receive filter settings were updated.
|
||||
@retval EFI_NOT_STARTED The PXE Base Code Protocol is in the stopped state.
|
||||
@retval EFI_INVALID_PARAMETER One or more parameters are invalid.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_PXE_BASE_CODE_SET_IP_FILTER)(
|
||||
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
|
||||
IN EFI_PXE_BASE_CODE_IP_FILTER *NewFilter
|
||||
);
|
||||
|
||||
/**
|
||||
Uses the ARP protocol to resolve a MAC address.
|
||||
|
||||
This function uses the ARP protocol to resolve a MAC address. The UsingIpv6 field
|
||||
of the EFI_PXE_BASE_CODE_MODE structure is used to determine if IPv4 or IPv6
|
||||
addresses are being used. The IP address specified by IpAddr is used to resolve
|
||||
a MAC address. If the ARP protocol succeeds in resolving the specified address,
|
||||
then the ArpCacheEntries and ArpCache fields of the EFI_PXE_BASE_CODE_MODE structure
|
||||
are updated, and EFI_SUCCESS is returned. If MacAddr is not NULL, the resolved
|
||||
MAC address is placed there as well.
|
||||
If the PXE Base Code protocol is in the stopped state, then EFI_NOT_STARTED is
|
||||
returned. If the ARP protocol encounters a timeout condition while attempting
|
||||
to resolve an address, then EFI_TIMEOUT is returned. If the Callback Protocol
|
||||
does not return EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE, then EFI_ABORTED is
|
||||
returned.
|
||||
|
||||
@param This The pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.
|
||||
@param IpAddr The pointer to the IP address that is used to resolve a MAC address.
|
||||
@param MacAddr If not NULL, a pointer to the MAC address that was resolved with the
|
||||
ARP protocol.
|
||||
|
||||
@retval EFI_SUCCESS The IP or MAC address was resolved.
|
||||
@retval EFI_NOT_STARTED The PXE Base Code Protocol is in the stopped state.
|
||||
@retval EFI_INVALID_PARAMETER One or more parameters are invalid.
|
||||
@retval EFI_DEVICE_ERROR The network device encountered an error during this operation.
|
||||
@retval EFI_ABORTED The callback function aborted the ARP Protocol.
|
||||
@retval EFI_TIMEOUT The ARP Protocol encountered a timeout condition.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_PXE_BASE_CODE_ARP)(
|
||||
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
|
||||
IN EFI_IP_ADDRESS *IpAddr,
|
||||
IN EFI_MAC_ADDRESS *MacAddr OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Updates the parameters that affect the operation of the PXE Base Code Protocol.
|
||||
|
||||
This function sets parameters that affect the operation of the PXE Base Code Protocol.
|
||||
The parameter specified by NewAutoArp is used to control the generation of ARP
|
||||
protocol packets. If NewAutoArp is TRUE, then ARP Protocol packets will be generated
|
||||
as required by the PXE Base Code Protocol. If NewAutoArp is FALSE, then no ARP
|
||||
Protocol packets will be generated. In this case, the only mappings that are
|
||||
available are those stored in the ArpCache of the EFI_PXE_BASE_CODE_MODE structure.
|
||||
If there are not enough mappings in the ArpCache to perform a PXE Base Code Protocol
|
||||
service, then the service will fail. This function updates the AutoArp field of
|
||||
the EFI_PXE_BASE_CODE_MODE structure to NewAutoArp.
|
||||
The SetParameters() call must be invoked after a Callback Protocol is installed
|
||||
to enable the use of callbacks.
|
||||
|
||||
@param This The pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.
|
||||
@param NewAutoArp If not NULL, a pointer to a value that specifies whether to replace the
|
||||
current value of AutoARP.
|
||||
@param NewSendGUID If not NULL, a pointer to a value that specifies whether to replace the
|
||||
current value of SendGUID.
|
||||
@param NewTTL If not NULL, a pointer to be used in place of the current value of TTL,
|
||||
the "time to live" field of the IP header.
|
||||
@param NewToS If not NULL, a pointer to be used in place of the current value of ToS,
|
||||
the "type of service" field of the IP header.
|
||||
@param NewMakeCallback If not NULL, a pointer to a value that specifies whether to replace the
|
||||
current value of the MakeCallback field of the Mode structure.
|
||||
|
||||
@retval EFI_SUCCESS The new parameters values were updated.
|
||||
@retval EFI_NOT_STARTED The PXE Base Code Protocol is in the stopped state.
|
||||
@retval EFI_INVALID_PARAMETER One or more parameters are invalid.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_PXE_BASE_CODE_SET_PARAMETERS)(
|
||||
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
|
||||
IN BOOLEAN *NewAutoArp, OPTIONAL
|
||||
IN BOOLEAN *NewSendGUID, OPTIONAL
|
||||
IN UINT8 *NewTTL, OPTIONAL
|
||||
IN UINT8 *NewToS, OPTIONAL
|
||||
IN BOOLEAN *NewMakeCallback OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Updates the station IP address and/or subnet mask values of a network device.
|
||||
|
||||
This function updates the station IP address and/or subnet mask values of a network
|
||||
device.
|
||||
The NewStationIp field is used to modify the network device's current IP address.
|
||||
If NewStationIP is NULL, then the current IP address will not be modified. Otherwise,
|
||||
this function updates the StationIp field of the EFI_PXE_BASE_CODE_MODE structure
|
||||
with NewStationIp.
|
||||
The NewSubnetMask field is used to modify the network device's current subnet
|
||||
mask. If NewSubnetMask is NULL, then the current subnet mask will not be modified.
|
||||
Otherwise, this function updates the SubnetMask field of the EFI_PXE_BASE_CODE_MODE
|
||||
structure with NewSubnetMask.
|
||||
|
||||
@param This The pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.
|
||||
@param NewStationIp The pointer to the new IP address to be used by the network device.
|
||||
@param NewSubnetMask The pointer to the new subnet mask to be used by the network device.
|
||||
|
||||
@retval EFI_SUCCESS The new station IP address and/or subnet mask were updated.
|
||||
@retval EFI_NOT_STARTED The PXE Base Code Protocol is in the stopped state.
|
||||
@retval EFI_INVALID_PARAMETER One or more parameters are invalid.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_PXE_BASE_CODE_SET_STATION_IP)(
|
||||
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
|
||||
IN EFI_IP_ADDRESS *NewStationIp, OPTIONAL
|
||||
IN EFI_IP_ADDRESS *NewSubnetMask OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Updates the contents of the cached DHCP and Discover packets.
|
||||
|
||||
The pointers to the new packets are used to update the contents of the cached
|
||||
packets in the EFI_PXE_BASE_CODE_MODE structure.
|
||||
|
||||
@param This The pointer to the EFI_PXE_BASE_CODE_PROTOCOL instance.
|
||||
@param NewDhcpDiscoverValid The pointer to a value that will replace the current
|
||||
DhcpDiscoverValid field.
|
||||
@param NewDhcpAckReceived The pointer to a value that will replace the current
|
||||
DhcpAckReceived field.
|
||||
@param NewProxyOfferReceived The pointer to a value that will replace the current
|
||||
ProxyOfferReceived field.
|
||||
@param NewPxeDiscoverValid The pointer to a value that will replace the current
|
||||
ProxyOfferReceived field.
|
||||
@param NewPxeReplyReceived The pointer to a value that will replace the current
|
||||
PxeReplyReceived field.
|
||||
@param NewPxeBisReplyReceived The pointer to a value that will replace the current
|
||||
PxeBisReplyReceived field.
|
||||
@param NewDhcpDiscover The pointer to the new cached DHCP Discover packet contents.
|
||||
@param NewDhcpAck The pointer to the new cached DHCP Ack packet contents.
|
||||
@param NewProxyOffer The pointer to the new cached Proxy Offer packet contents.
|
||||
@param NewPxeDiscover The pointer to the new cached PXE Discover packet contents.
|
||||
@param NewPxeReply The pointer to the new cached PXE Reply packet contents.
|
||||
@param NewPxeBisReply The pointer to the new cached PXE BIS Reply packet contents.
|
||||
|
||||
@retval EFI_SUCCESS The cached packet contents were updated.
|
||||
@retval EFI_NOT_STARTED The PXE Base Code Protocol is in the stopped state.
|
||||
@retval EFI_INVALID_PARAMETER This is NULL or not point to a valid EFI_PXE_BASE_CODE_PROTOCOL structure.
|
||||
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_PXE_BASE_CODE_SET_PACKETS)(
|
||||
IN EFI_PXE_BASE_CODE_PROTOCOL *This,
|
||||
BOOLEAN *NewDhcpDiscoverValid, OPTIONAL
|
||||
BOOLEAN *NewDhcpAckReceived, OPTIONAL
|
||||
BOOLEAN *NewProxyOfferReceived, OPTIONAL
|
||||
BOOLEAN *NewPxeDiscoverValid, OPTIONAL
|
||||
BOOLEAN *NewPxeReplyReceived, OPTIONAL
|
||||
BOOLEAN *NewPxeBisReplyReceived, OPTIONAL
|
||||
IN EFI_PXE_BASE_CODE_PACKET *NewDhcpDiscover, OPTIONAL
|
||||
IN EFI_PXE_BASE_CODE_PACKET *NewDhcpAck, OPTIONAL
|
||||
IN EFI_PXE_BASE_CODE_PACKET *NewProxyOffer, OPTIONAL
|
||||
IN EFI_PXE_BASE_CODE_PACKET *NewPxeDiscover, OPTIONAL
|
||||
IN EFI_PXE_BASE_CODE_PACKET *NewPxeReply, OPTIONAL
|
||||
IN EFI_PXE_BASE_CODE_PACKET *NewPxeBisReply OPTIONAL
|
||||
);
|
||||
|
||||
//
|
||||
// PXE Base Code Protocol structure
|
||||
//
|
||||
#define EFI_PXE_BASE_CODE_PROTOCOL_REVISION 0x00010000
|
||||
|
||||
//
|
||||
// Revision defined in EFI1.1
|
||||
//
|
||||
#define EFI_PXE_BASE_CODE_INTERFACE_REVISION EFI_PXE_BASE_CODE_PROTOCOL_REVISION
|
||||
|
||||
///
|
||||
/// The EFI_PXE_BASE_CODE_PROTOCOL is used to control PXE-compatible devices.
|
||||
/// An EFI_PXE_BASE_CODE_PROTOCOL will be layered on top of an
|
||||
/// EFI_MANAGED_NETWORK_PROTOCOL protocol in order to perform packet level transactions.
|
||||
/// The EFI_PXE_BASE_CODE_PROTOCOL handle also supports the
|
||||
/// EFI_LOAD_FILE_PROTOCOL protocol. This provides a clean way to obtain control from the
|
||||
/// boot manager if the boot path is from the remote device.
|
||||
///
|
||||
struct _EFI_PXE_BASE_CODE_PROTOCOL {
|
||||
///
|
||||
/// The revision of the EFI_PXE_BASE_CODE_PROTOCOL. All future revisions must
|
||||
/// be backwards compatible. If a future version is not backwards compatible
|
||||
/// it is not the same GUID.
|
||||
///
|
||||
UINT64 Revision;
|
||||
EFI_PXE_BASE_CODE_START Start;
|
||||
EFI_PXE_BASE_CODE_STOP Stop;
|
||||
EFI_PXE_BASE_CODE_DHCP Dhcp;
|
||||
EFI_PXE_BASE_CODE_DISCOVER Discover;
|
||||
EFI_PXE_BASE_CODE_MTFTP Mtftp;
|
||||
EFI_PXE_BASE_CODE_UDP_WRITE UdpWrite;
|
||||
EFI_PXE_BASE_CODE_UDP_READ UdpRead;
|
||||
EFI_PXE_BASE_CODE_SET_IP_FILTER SetIpFilter;
|
||||
EFI_PXE_BASE_CODE_ARP Arp;
|
||||
EFI_PXE_BASE_CODE_SET_PARAMETERS SetParameters;
|
||||
EFI_PXE_BASE_CODE_SET_STATION_IP SetStationIp;
|
||||
EFI_PXE_BASE_CODE_SET_PACKETS SetPackets;
|
||||
///
|
||||
/// The pointer to the EFI_PXE_BASE_CODE_MODE data for this device.
|
||||
///
|
||||
EFI_PXE_BASE_CODE_MODE *Mode;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiPxeBaseCodeProtocolGuid;
|
||||
|
||||
#endif
|
209
src/include/ipxe/efi/Protocol/TcgService.h
Normal file
209
src/include/ipxe/efi/Protocol/TcgService.h
Normal file
@ -0,0 +1,209 @@
|
||||
/** @file
|
||||
TCG Service Protocol as defined in TCG_EFI_Protocol_1_20_Final
|
||||
See http://trustedcomputinggroup.org for the latest specification
|
||||
|
||||
Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials are licensed and made available under
|
||||
the terms and conditions of the BSD License that 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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _TCG_SERVICE_PROTOCOL_H_
|
||||
#define _TCG_SERVICE_PROTOCOL_H_
|
||||
|
||||
FILE_LICENCE ( BSD3 );
|
||||
|
||||
#include <ipxe/efi/IndustryStandard/UefiTcgPlatform.h>
|
||||
|
||||
#define EFI_TCG_PROTOCOL_GUID \
|
||||
{0xf541796d, 0xa62e, 0x4954, { 0xa7, 0x75, 0x95, 0x84, 0xf6, 0x1b, 0x9c, 0xdd } }
|
||||
|
||||
typedef struct _EFI_TCG_PROTOCOL EFI_TCG_PROTOCOL;
|
||||
|
||||
typedef struct {
|
||||
UINT8 Major;
|
||||
UINT8 Minor;
|
||||
UINT8 RevMajor;
|
||||
UINT8 RevMinor;
|
||||
} TCG_VERSION;
|
||||
|
||||
typedef struct _TCG_EFI_BOOT_SERVICE_CAPABILITY {
|
||||
UINT8 Size; /// Size of this structure.
|
||||
TCG_VERSION StructureVersion;
|
||||
TCG_VERSION ProtocolSpecVersion;
|
||||
UINT8 HashAlgorithmBitmap; /// Hash algorithms .
|
||||
/// This protocol is capable of : 01=SHA-1.
|
||||
BOOLEAN TPMPresentFlag; /// 00h = TPM not present.
|
||||
BOOLEAN TPMDeactivatedFlag; /// 01h = TPM currently deactivated.
|
||||
} TCG_EFI_BOOT_SERVICE_CAPABILITY;
|
||||
|
||||
typedef UINT32 TCG_ALGORITHM_ID;
|
||||
|
||||
///
|
||||
/// Note:
|
||||
/// Status codes returned for functions of EFI_TCG_PROTOCOL do not exactly match
|
||||
/// those defined in the TCG EFI Protocol 1.20 Final Specification.
|
||||
///
|
||||
|
||||
/**
|
||||
This service provides EFI protocol capability information, state information
|
||||
about the TPM, and Event Log state information.
|
||||
|
||||
@param This Indicates the calling context
|
||||
@param ProtocolCapability The callee allocates memory for a TCG_BOOT_SERVICE_CAPABILITY
|
||||
structure and fills in the fields with the EFI protocol
|
||||
capability information and the current TPM state information.
|
||||
@param TCGFeatureFlags This is a pointer to the feature flags. No feature
|
||||
flags are currently defined so this parameter
|
||||
MUST be set to 0. However, in the future,
|
||||
feature flags may be defined that, for example,
|
||||
enable hash algorithm agility.
|
||||
@param EventLogLocation This is a pointer to the address of the event log in memory.
|
||||
@param EventLogLastEntry If the Event Log contains more than one entry,
|
||||
this is a pointer to the address of the start of
|
||||
the last entry in the event log in memory.
|
||||
|
||||
@retval EFI_SUCCESS The operation completed successfully.
|
||||
@retval EFI_INVALID_PARAMETER ProtocolCapability does not match TCG capability.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_TCG_STATUS_CHECK)(
|
||||
IN EFI_TCG_PROTOCOL *This,
|
||||
OUT TCG_EFI_BOOT_SERVICE_CAPABILITY
|
||||
*ProtocolCapability,
|
||||
OUT UINT32 *TCGFeatureFlags,
|
||||
OUT EFI_PHYSICAL_ADDRESS *EventLogLocation,
|
||||
OUT EFI_PHYSICAL_ADDRESS *EventLogLastEntry
|
||||
);
|
||||
|
||||
/**
|
||||
This service abstracts the capability to do a hash operation on a data buffer.
|
||||
|
||||
@param This Indicates the calling context.
|
||||
@param HashData The pointer to the data buffer to be hashed.
|
||||
@param HashDataLen The length of the data buffer to be hashed.
|
||||
@param AlgorithmId Identification of the Algorithm to use for the hashing operation.
|
||||
@param HashedDataLen Resultant length of the hashed data.
|
||||
@param HashedDataResult Resultant buffer of the hashed data.
|
||||
|
||||
@retval EFI_SUCCESS The operation completed successfully.
|
||||
@retval EFI_INVALID_PARAMETER HashDataLen is NULL.
|
||||
@retval EFI_INVALID_PARAMETER HashDataLenResult is NULL.
|
||||
@retval EFI_OUT_OF_RESOURCES Cannot allocate buffer of size *HashedDataLen.
|
||||
@retval EFI_UNSUPPORTED AlgorithmId not supported.
|
||||
@retval EFI_BUFFER_TOO_SMALL *HashedDataLen < sizeof (TCG_DIGEST).
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_TCG_HASH_ALL)(
|
||||
IN EFI_TCG_PROTOCOL *This,
|
||||
IN UINT8 *HashData,
|
||||
IN UINT64 HashDataLen,
|
||||
IN TCG_ALGORITHM_ID AlgorithmId,
|
||||
IN OUT UINT64 *HashedDataLen,
|
||||
IN OUT UINT8 **HashedDataResult
|
||||
);
|
||||
|
||||
/**
|
||||
This service abstracts the capability to add an entry to the Event Log.
|
||||
|
||||
@param This Indicates the calling context
|
||||
@param TCGLogData The pointer to the start of the data buffer containing
|
||||
the TCG_PCR_EVENT data structure. All fields in
|
||||
this structure are properly filled by the caller.
|
||||
@param EventNumber The event number of the event just logged.
|
||||
@param Flags Indicates additional flags. Only one flag has been
|
||||
defined at this time, which is 0x01 and means the
|
||||
extend operation should not be performed. All
|
||||
other bits are reserved.
|
||||
|
||||
@retval EFI_SUCCESS The operation completed successfully.
|
||||
@retval EFI_OUT_OF_RESOURCES Insufficient memory in the event log to complete this action.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_TCG_LOG_EVENT)(
|
||||
IN EFI_TCG_PROTOCOL *This,
|
||||
IN TCG_PCR_EVENT *TCGLogData,
|
||||
IN OUT UINT32 *EventNumber,
|
||||
IN UINT32 Flags
|
||||
);
|
||||
|
||||
/**
|
||||
This service is a proxy for commands to the TPM.
|
||||
|
||||
@param This Indicates the calling context.
|
||||
@param TpmInputParameterBlockSize Size of the TPM input parameter block.
|
||||
@param TpmInputParameterBlock The pointer to the TPM input parameter block.
|
||||
@param TpmOutputParameterBlockSize Size of the TPM output parameter block.
|
||||
@param TpmOutputParameterBlock The pointer to the TPM output parameter block.
|
||||
|
||||
@retval EFI_SUCCESS The operation completed successfully.
|
||||
@retval EFI_INVALID_PARAMETER Invalid ordinal.
|
||||
@retval EFI_UNSUPPORTED Current Task Priority Level >= EFI_TPL_CALLBACK.
|
||||
@retval EFI_TIMEOUT The TIS timed-out.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_TCG_PASS_THROUGH_TO_TPM)(
|
||||
IN EFI_TCG_PROTOCOL *This,
|
||||
IN UINT32 TpmInputParameterBlockSize,
|
||||
IN UINT8 *TpmInputParameterBlock,
|
||||
IN UINT32 TpmOutputParameterBlockSize,
|
||||
IN UINT8 *TpmOutputParameterBlock
|
||||
);
|
||||
|
||||
/**
|
||||
This service abstracts the capability to do a hash operation on a data buffer, extend a specific TPM PCR with the hash result, and add an entry to the Event Log
|
||||
|
||||
@param This Indicates the calling context
|
||||
@param HashData The physical address of the start of the data buffer
|
||||
to be hashed, extended, and logged.
|
||||
@param HashDataLen The length, in bytes, of the buffer referenced by HashData
|
||||
@param AlgorithmId Identification of the Algorithm to use for the hashing operation
|
||||
@param TCGLogData The physical address of the start of the data
|
||||
buffer containing the TCG_PCR_EVENT data structure.
|
||||
@param EventNumber The event number of the event just logged.
|
||||
@param EventLogLastEntry The physical address of the first byte of the entry
|
||||
just placed in the Event Log. If the Event Log was
|
||||
empty when this function was called then this physical
|
||||
address will be the same as the physical address of
|
||||
the start of the Event Log.
|
||||
|
||||
@retval EFI_SUCCESS The operation completed successfully.
|
||||
@retval EFI_UNSUPPORTED AlgorithmId != TPM_ALG_SHA.
|
||||
@retval EFI_UNSUPPORTED Current TPL >= EFI_TPL_CALLBACK.
|
||||
@retval EFI_DEVICE_ERROR The command was unsuccessful.
|
||||
**/
|
||||
typedef
|
||||
EFI_STATUS
|
||||
(EFIAPI *EFI_TCG_HASH_LOG_EXTEND_EVENT)(
|
||||
IN EFI_TCG_PROTOCOL *This,
|
||||
IN EFI_PHYSICAL_ADDRESS HashData,
|
||||
IN UINT64 HashDataLen,
|
||||
IN TCG_ALGORITHM_ID AlgorithmId,
|
||||
IN OUT TCG_PCR_EVENT *TCGLogData,
|
||||
IN OUT UINT32 *EventNumber,
|
||||
OUT EFI_PHYSICAL_ADDRESS *EventLogLastEntry
|
||||
);
|
||||
|
||||
///
|
||||
/// The EFI_TCG Protocol abstracts TCG activity.
|
||||
///
|
||||
struct _EFI_TCG_PROTOCOL {
|
||||
EFI_TCG_STATUS_CHECK StatusCheck;
|
||||
EFI_TCG_HASH_ALL HashAll;
|
||||
EFI_TCG_LOG_EVENT LogEvent;
|
||||
EFI_TCG_PASS_THROUGH_TO_TPM PassThroughToTpm;
|
||||
EFI_TCG_HASH_LOG_EXTEND_EVENT HashLogExtendEvent;
|
||||
};
|
||||
|
||||
extern EFI_GUID gEfiTcgProtocolGuid;
|
||||
|
||||
#endif
|
@ -160,14 +160,17 @@ extern EFI_GUID efi_component_name2_protocol_guid;
|
||||
extern EFI_GUID efi_device_path_protocol_guid;
|
||||
extern EFI_GUID efi_disk_io_protocol_guid;
|
||||
extern EFI_GUID efi_driver_binding_protocol_guid;
|
||||
extern EFI_GUID efi_graphics_output_protocol_guid;
|
||||
extern EFI_GUID efi_load_file_protocol_guid;
|
||||
extern EFI_GUID efi_load_file2_protocol_guid;
|
||||
extern EFI_GUID efi_loaded_image_protocol_guid;
|
||||
extern EFI_GUID efi_loaded_image_device_path_protocol_guid;
|
||||
extern EFI_GUID efi_pci_io_protocol_guid;
|
||||
extern EFI_GUID efi_pci_root_bridge_io_protocol_guid;
|
||||
extern EFI_GUID efi_pxe_base_code_protocol_guid;
|
||||
extern EFI_GUID efi_simple_file_system_protocol_guid;
|
||||
extern EFI_GUID efi_simple_network_protocol_guid;
|
||||
extern EFI_GUID efi_tcg_protocol_guid;
|
||||
|
||||
extern EFI_HANDLE efi_image_handle;
|
||||
extern EFI_LOADED_IMAGE_PROTOCOL *efi_loaded_image;
|
||||
|
@ -66,6 +66,8 @@ static struct efi_well_known_guid efi_well_known_guids[] = {
|
||||
"DriverBinding" },
|
||||
{ &efi_disk_io_protocol_guid,
|
||||
"DiskIo" },
|
||||
{ &efi_graphics_output_protocol_guid,
|
||||
"GraphicsOutput" },
|
||||
{ &efi_load_file_protocol_guid,
|
||||
"LoadFile" },
|
||||
{ &efi_load_file2_protocol_guid,
|
||||
@ -78,10 +80,14 @@ static struct efi_well_known_guid efi_well_known_guids[] = {
|
||||
"PciIo" },
|
||||
{ &efi_pci_root_bridge_io_protocol_guid,
|
||||
"PciRootBridgeIo" },
|
||||
{ &efi_pxe_base_code_protocol_guid,
|
||||
"PxeBaseCode" },
|
||||
{ &efi_simple_file_system_protocol_guid,
|
||||
"SimpleFileSystem" },
|
||||
{ &efi_simple_network_protocol_guid,
|
||||
"SimpleNetwork" },
|
||||
{ &efi_tcg_protocol_guid,
|
||||
"Tcg" },
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -28,13 +28,16 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
||||
#include <ipxe/efi/Protocol/DevicePathToText.h>
|
||||
#include <ipxe/efi/Protocol/DiskIo.h>
|
||||
#include <ipxe/efi/Protocol/DriverBinding.h>
|
||||
#include <ipxe/efi/Protocol/GraphicsOutput.h>
|
||||
#include <ipxe/efi/Protocol/LoadFile.h>
|
||||
#include <ipxe/efi/Protocol/LoadFile2.h>
|
||||
#include <ipxe/efi/Protocol/LoadedImage.h>
|
||||
#include <ipxe/efi/Protocol/PciIo.h>
|
||||
#include <ipxe/efi/Protocol/PciRootBridgeIo.h>
|
||||
#include <ipxe/efi/Protocol/PxeBaseCode.h>
|
||||
#include <ipxe/efi/Protocol/SimpleFileSystem.h>
|
||||
#include <ipxe/efi/Protocol/SimpleNetwork.h>
|
||||
#include <ipxe/efi/Protocol/TcgService.h>
|
||||
|
||||
/** @file
|
||||
*
|
||||
@ -70,6 +73,10 @@ EFI_GUID efi_disk_io_protocol_guid
|
||||
EFI_GUID efi_driver_binding_protocol_guid
|
||||
= EFI_DRIVER_BINDING_PROTOCOL_GUID;
|
||||
|
||||
/** Graphics output protocol GUID */
|
||||
EFI_GUID efi_graphics_output_protocol_guid
|
||||
= EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
|
||||
|
||||
/** Load file protocol GUID */
|
||||
EFI_GUID efi_load_file_protocol_guid
|
||||
= EFI_LOAD_FILE_PROTOCOL_GUID;
|
||||
@ -94,10 +101,18 @@ EFI_GUID efi_pci_io_protocol_guid
|
||||
EFI_GUID efi_pci_root_bridge_io_protocol_guid
|
||||
= EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GUID;
|
||||
|
||||
/** PXE base code protocol GUID */
|
||||
EFI_GUID efi_pxe_base_code_protocol_guid
|
||||
= EFI_PXE_BASE_CODE_PROTOCOL_GUID;
|
||||
|
||||
/** Simple file system protocol GUID */
|
||||
EFI_GUID efi_simple_file_system_protocol_guid
|
||||
= EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID;
|
||||
|
||||
/** Simple network protocol guid */
|
||||
/** Simple network protocol GUID */
|
||||
EFI_GUID efi_simple_network_protocol_guid
|
||||
= EFI_SIMPLE_NETWORK_PROTOCOL_GUID;
|
||||
|
||||
/** TCG protocol GUID */
|
||||
EFI_GUID efi_tcg_protocol_guid
|
||||
= EFI_TCG_PROTOCOL_GUID;
|
||||
|
Reference in New Issue
Block a user