120 lines
2.4 KiB
C
120 lines
2.4 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1999 Intel Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
legacyboot
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
EFI support for legacy boot
|
||
|
|
||
|
|
||
|
|
||
|
Revision History
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _LEGACY_BOOT_INCLUDE_
|
||
|
#define _LEGACY_BOOT_INCLUDE_
|
||
|
|
||
|
#define LEGACY_BOOT_PROTOCOL \
|
||
|
{ 0x376e5eb2, 0x30e4, 0x11d3, { 0xba, 0xe5, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } }
|
||
|
|
||
|
#pragma pack(1)
|
||
|
|
||
|
//
|
||
|
// BBS 1.01 (See Appendix A) IPL and BCV Table Entry Data structure.
|
||
|
// Seg:Off pointers have been converted to EFI pointers in this data structure
|
||
|
// This is the structure that also maps to the EFI device path for the boot selection
|
||
|
//
|
||
|
typedef struct {
|
||
|
UINT16 DeviceType;
|
||
|
UINT16 StatusFlag;
|
||
|
UINT32 Reserved;
|
||
|
VOID *BootHandler; // Not an EFI entry point
|
||
|
CHAR8 *DescString;
|
||
|
} BBS_TABLE_ENTRY;
|
||
|
#pragma pack()
|
||
|
|
||
|
typedef
|
||
|
EFI_STATUS
|
||
|
(EFIAPI *LEGACY_BOOT_CALL) (
|
||
|
IN EFI_DEVICE_PATH *DevicePath
|
||
|
);
|
||
|
|
||
|
|
||
|
//
|
||
|
// BBS support functions
|
||
|
// PnP Call numbers and BiosSelector hidden in implementation
|
||
|
//
|
||
|
|
||
|
typedef enum {
|
||
|
IplRelative,
|
||
|
BcvRelative
|
||
|
} BBS_TYPE;
|
||
|
|
||
|
INTERFACE_DECL(_LEGACY_BOOT_INTERFACE);
|
||
|
|
||
|
//
|
||
|
// == PnP Function 0x60 then BbsVersion == 0x0101 if this call fails then BbsVersion == 0x0000
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// == PnP Function 0x61
|
||
|
//
|
||
|
typedef
|
||
|
EFI_STATUS
|
||
|
(EFIAPI *GET_DEVICE_COUNT) (
|
||
|
IN struct _LEGACY_BOOT_INTERFACE *This,
|
||
|
IN BBS_TYPE *TableType,
|
||
|
OUT UINTN *DeviceCount,
|
||
|
OUT UINTN *MaxCount
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// == PnP Function 0x62
|
||
|
//
|
||
|
typedef
|
||
|
EFI_STATUS
|
||
|
(EFIAPI *GET_PRIORITY_AND_TABLE) (
|
||
|
IN struct _LEGACY_BOOT_INTERFACE *This,
|
||
|
IN BBS_TYPE *TableType,
|
||
|
IN OUT UINTN *PrioritySize, // MaxCount * sizeof(UINT8)
|
||
|
OUT UINTN *Priority,
|
||
|
IN OUT UINTN *TableSize, // MaxCount * sizeof(BBS_TABLE_ENTRY)
|
||
|
OUT BBS_TABLE_ENTRY *TableEntrySize
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// == PnP Function 0x63
|
||
|
//
|
||
|
typedef
|
||
|
EFI_STATUS
|
||
|
(EFIAPI *SET_PRIORITY) (
|
||
|
IN struct _LEGACY_BOOT_INTERFACE *This,
|
||
|
IN BBS_TYPE *TableType,
|
||
|
IN OUT UINTN *PrioritySize,
|
||
|
OUT UINTN *Priority
|
||
|
);
|
||
|
|
||
|
typedef struct _LEGACY_BOOT_INTERFACE {
|
||
|
LEGACY_BOOT_CALL BootIt;
|
||
|
|
||
|
//
|
||
|
// New functions to allow BBS booting to be configured from EFI
|
||
|
//
|
||
|
UINTN BbsVersion; // Currently 0x0101
|
||
|
GET_DEVICE_COUNT GetDeviceCount;
|
||
|
GET_PRIORITY_AND_TABLE GetPriorityAndTable;
|
||
|
SET_PRIORITY SetPriority;
|
||
|
} LEGACY_BOOT_INTERFACE;
|
||
|
|
||
|
EFI_STATUS
|
||
|
PlInitializeLegacyBoot (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
#endif
|