xref: /DragonStub/inc/protocol/legacyboot.h (revision 530d68ba191850edafc6da22cb2df55bec0c5fa5)
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