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 120