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