[e16e8f2] | 1 | /*++ |
---|
| 2 | |
---|
| 3 | Copyright (c) 1999 Intel Corporation |
---|
| 4 | |
---|
| 5 | Module Name: |
---|
| 6 | |
---|
| 7 | legacyboot |
---|
| 8 | |
---|
| 9 | Abstract: |
---|
| 10 | |
---|
| 11 | EFI support for legacy boot |
---|
| 12 | |
---|
| 13 | |
---|
| 14 | |
---|
| 15 | Revision History |
---|
| 16 | |
---|
| 17 | --*/ |
---|
| 18 | |
---|
| 19 | #ifndef _LEGACY_BOOT_INCLUDE_ |
---|
| 20 | #define _LEGACY_BOOT_INCLUDE_ |
---|
| 21 | |
---|
| 22 | #define LEGACY_BOOT_PROTOCOL \ |
---|
| 23 | { 0x376e5eb2, 0x30e4, 0x11d3, { 0xba, 0xe5, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } } |
---|
| 24 | |
---|
| 25 | #pragma pack(1) |
---|
| 26 | |
---|
| 27 | // |
---|
| 28 | // BBS 1.01 (See Appendix A) IPL and BCV Table Entry Data structure. |
---|
| 29 | // Seg:Off pointers have been converted to EFI pointers in this data structure |
---|
| 30 | // This is the structure that also maps to the EFI device path for the boot selection |
---|
| 31 | // |
---|
| 32 | typedef struct { |
---|
| 33 | UINT16 DeviceType; |
---|
| 34 | UINT16 StatusFlag; |
---|
| 35 | UINT32 Reserved; |
---|
| 36 | VOID *BootHandler; // Not an EFI entry point |
---|
| 37 | CHAR8 *DescString; |
---|
| 38 | } BBS_TABLE_ENTRY; |
---|
| 39 | #pragma pack() |
---|
| 40 | |
---|
| 41 | typedef |
---|
| 42 | EFI_STATUS |
---|
| 43 | (EFIAPI *LEGACY_BOOT_CALL) ( |
---|
| 44 | IN EFI_DEVICE_PATH *DevicePath |
---|
| 45 | ); |
---|
| 46 | |
---|
| 47 | |
---|
| 48 | // |
---|
| 49 | // BBS support functions |
---|
| 50 | // PnP Call numbers and BiosSelector hidden in implementation |
---|
| 51 | // |
---|
| 52 | |
---|
| 53 | typedef enum { |
---|
| 54 | IplRelative, |
---|
| 55 | BcvRelative |
---|
| 56 | } BBS_TYPE; |
---|
| 57 | |
---|
| 58 | INTERFACE_DECL(_LEGACY_BOOT_INTERFACE); |
---|
| 59 | |
---|
| 60 | // |
---|
| 61 | // == PnP Function 0x60 then BbsVersion == 0x0101 if this call fails then BbsVersion == 0x0000 |
---|
| 62 | // |
---|
| 63 | |
---|
| 64 | // |
---|
| 65 | // == PnP Function 0x61 |
---|
| 66 | // |
---|
| 67 | typedef |
---|
| 68 | EFI_STATUS |
---|
| 69 | (EFIAPI *GET_DEVICE_COUNT) ( |
---|
| 70 | IN struct _LEGACY_BOOT_INTERFACE *This, |
---|
| 71 | IN BBS_TYPE *TableType, |
---|
| 72 | OUT UINTN *DeviceCount, |
---|
| 73 | OUT UINTN *MaxCount |
---|
| 74 | ); |
---|
| 75 | |
---|
| 76 | // |
---|
| 77 | // == PnP Function 0x62 |
---|
| 78 | // |
---|
| 79 | typedef |
---|
| 80 | EFI_STATUS |
---|
| 81 | (EFIAPI *GET_PRIORITY_AND_TABLE) ( |
---|
| 82 | IN struct _LEGACY_BOOT_INTERFACE *This, |
---|
| 83 | IN BBS_TYPE *TableType, |
---|
| 84 | IN OUT UINTN *PrioritySize, // MaxCount * sizeof(UINT8) |
---|
| 85 | OUT UINTN *Priority, |
---|
| 86 | IN OUT UINTN *TableSize, // MaxCount * sizeof(BBS_TABLE_ENTRY) |
---|
| 87 | OUT BBS_TABLE_ENTRY *TableEntrySize |
---|
| 88 | ); |
---|
| 89 | |
---|
| 90 | // |
---|
| 91 | // == PnP Function 0x63 |
---|
| 92 | // |
---|
| 93 | typedef |
---|
| 94 | EFI_STATUS |
---|
| 95 | (EFIAPI *SET_PRIORITY) ( |
---|
| 96 | IN struct _LEGACY_BOOT_INTERFACE *This, |
---|
| 97 | IN BBS_TYPE *TableType, |
---|
| 98 | IN OUT UINTN *PrioritySize, |
---|
| 99 | OUT UINTN *Priority |
---|
| 100 | ); |
---|
| 101 | |
---|
| 102 | typedef struct _LEGACY_BOOT_INTERFACE { |
---|
| 103 | LEGACY_BOOT_CALL BootIt; |
---|
| 104 | |
---|
| 105 | // |
---|
| 106 | // New functions to allow BBS booting to be configured from EFI |
---|
| 107 | // |
---|
| 108 | UINTN BbsVersion; // Currently 0x0101 |
---|
| 109 | GET_DEVICE_COUNT GetDeviceCount; |
---|
| 110 | GET_PRIORITY_AND_TABLE GetPriorityAndTable; |
---|
| 111 | SET_PRIORITY SetPriority; |
---|
| 112 | } LEGACY_BOOT_INTERFACE; |
---|
| 113 | |
---|
| 114 | EFI_STATUS |
---|
| 115 | PlInitializeLegacyBoot ( |
---|
| 116 | VOID |
---|
| 117 | ); |
---|
| 118 | |
---|
| 119 | #endif |
---|